ZeroTech เชชเชฐ เช…เชฎเซ‡ Apple Safari เช…เชจเซ‡ เช•เซเชฒเชพเชฏเชจเซเชŸ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹เชจเซ‡ เชตเซ‡เชฌเชธเซ‹เช•เซ‡เชŸเซเชธ เชธเชพเชฅเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเซเชฏเชพ

เชฒเซ‡เช– เชคเซ‡ เชฒเซ‹เช•เซ‹ เชฎเชพเชŸเซ‡ เช‰เชชเชฏเซ‹เช—เซ€ เชฅเชถเซ‡ เชœเซ‡เช“:

  • เช•เซเชฒเชพเชˆเชจเซเชŸ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชถเซเช‚ เช›เซ‡ เชคเซ‡ เชœเชพเชฃเซ‡ เช›เซ‡ เช…เชจเซ‡ เชธเชฎเชœเซ‡ เช›เซ‡ เช•เซ‡ เชคเซ‡เชจเซ‡ เชฎเซ‹เชฌเชพเชˆเชฒ เชธเชซเชพเชฐเซ€ เชชเชฐ เชตเซ‡เชฌเชธเซ‹เช•เซ‡เชŸเซเชธเชจเซ€ เชœเชฐเซ‚เชฐ เช•เซ‡เชฎ เช›เซ‡;
  • เชนเซเช‚ เชตเซ‡เชฌ เชธเซ‡เชตเชพเช“เชจเซ‡ เชฒเซ‹เช•เซ‹เชจเชพ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชตเชฐเซเชคเซเชณเชฎเชพเช‚ เช…เชฅเชตเชพ เชซเช•เซเชค เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚;
  • เชตเชฟเชšเชพเชฐเซ‡ เช›เซ‡ เช•เซ‡ เชฌเชงเซเช‚ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช•เซ‹เชˆ เชตเซเชฏเช•เซเชคเชฟ เชฆเซเชตเชพเชฐเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡, เช…เชจเซ‡ เชคเซ‡ เชตเชฟเชถเซเชตเชจเซ‡ เชฅเซ‹เชกเซเช‚ เชตเชงเซ เช…เชจเซเช•เซ‚เชณ เช…เชจเซ‡ เชธเซเชฐเช•เซเชทเชฟเชค เชฌเชจเชพเชตเชตเชพ เชฎเชพเช‚เช—เซ‡ เช›เซ‡.

เชตเซ‡เชฌเชธเซ‹เช•เซ‡เชŸเซเชธเชจเซ‹ เช‡เชคเชฟเชนเชพเชธ เชฒเช—เชญเช— 8 เชตเชฐเซเชท เชชเชนเซ‡เชฒเชพเช‚ เชถเชฐเซ‚ เชฅเชฏเซ‹ เชนเชคเซ‹. เชชเชนเซ‡เชฒเชพเช‚, เชชเชฆเซเชงเชคเชฟเช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฒเชพเช‚เชฌเซ€ HTTP เชตเชฟเชจเช‚เชคเซ€เช“ (เช–เชฐเซ‡เช–เชฐ เชชเซเชฐเชคเชฟเชธเชพเชฆเซ‹) เชจเชพ เชฐเซ‚เชชเชฎเชพเช‚ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชคเซ‹ เชนเชคเซ‹: เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเชพ เชฌเซเชฐเชพเช‰เชเชฐ เชธเชฐเซเชตเชฐเชจเซ‡ เชตเชฟเชจเช‚เชคเซ€ เชฎเซ‹เช•เชฒเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡ เช•เช‚เชˆเช• เชœเชตเชพเชฌ เช†เชชเซ‡ เชคเซ‡เชจเซ€ เชฐเชพเชน เชœเซ‹เชคเชพ เชนเชคเชพ, เชชเซเชฐเชคเชฟเชธเชพเชฆ เชชเช›เซ€ เชคเซ‡ เชซเชฐเซ€เชฅเซ€ เช•เชจเซ‡เช•เซเชŸ เชฅเชพเชฏ เช›เซ‡ เช…เชจเซ‡ เชฐเชพเชน เชœเซเช เช›เซ‡. เชชเชฐเช‚เชคเซ เชชเช›เซ€ เชตเซ‡เชฌเชธเซ‹เช•เซ‡เชŸเซเชธ เชฆเซ‡เช–เชพเชฏเชพ.

ZeroTech เชชเชฐ เช…เชฎเซ‡ Apple Safari เช…เชจเซ‡ เช•เซเชฒเชพเชฏเชจเซเชŸ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹เชจเซ‡ เชตเซ‡เชฌเชธเซ‹เช•เซ‡เชŸเซเชธ เชธเชพเชฅเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเซเชฏเชพ

เชฅเซ‹เชกเชพ เชตเชฐเซเชทเซ‹ เชชเชนเซ‡เชฒเชพ, เช…เชฎเซ‡ เชถเซเชฆเซเชง PHP เชฎเชพเช‚ เช…เชฎเชพเชฐเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เช…เชฎเชฒเซ€เช•เชฐเชฃ เชตเชฟเช•เชธเชพเชตเซเชฏเซเช‚ เชนเชคเซเช‚, เชœเซ‡ https เชตเชฟเชจเช‚เชคเซ€เช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เชคเซเช‚ เชจเชฅเซ€, เช•เชพเชฐเชฃ เช•เซ‡ เช† เชฒเชฟเช‚เช• เชธเซเชคเชฐ เช›เซ‡. เชฅเซ‹เชกเชพ เชธเชฎเชฏ เชชเชนเซ‡เชฒเชพ, เชฒเช—เชญเช— เชคเชฎเชพเชฎ เชตเซ‡เชฌ เชธเชฐเซเชตเชฐเซเชธเซ‡ https เช…เชจเซ‡ เชธเชชเซ‹เชฐเซเชŸ เช•เชจเซ‡เช•เซเชถเชจ:เช…เชชเช—เซเชฐเซ‡เชก เชชเชฐ เชชเซเชฐเซ‹เช•เซเชธเซ€ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเชตเชพเชจเซเช‚ เชถเซ€เช–เซเชฏเชพ.

เชœเซเชฏเชพเชฐเซ‡ เช† เชฌเชจเซเชฏเซเช‚, เชคเซเชฏเชพเชฐเซ‡ SPA เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ เชฎเชพเชŸเซ‡ เชตเซ‡เชฌเชธเซ‹เช•เซ‡เชŸเซเชธ เชฒเช—เชญเช— เชกเชฟเชซเซ‹เชฒเซเชŸ เชธเซ‡เชตเชพ เชฌเชจเซ€ เช—เชˆ, เช•เชพเชฐเชฃ เช•เซ‡ เชธเชฐเซเชตเชฐเชจเซ€ เชชเชนเซ‡เชฒ เชชเชฐ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเซ‡ เชธเชพเชฎเช—เซเชฐเซ€ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเซ€ เช•เซ‡เชŸเชฒเซเช‚ เช…เชจเซเช•เซ‚เชณ เช›เซ‡ (เชฌเซ€เชœเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชคเชฐเชซเชฅเซ€ เชธเช‚เชฆเซ‡เชถ เชฎเซ‹เช•เชฒเซ‹ เช…เชฅเชตเชพ เช›เชฌเซ€, เชฆเชธเซเชคเชพเชตเซ‡เชœ, เชชเซเชฐเชธเซเชคเซเชคเชฟเชจเซเช‚ เชจเชตเซเช‚ เชธเช‚เชธเซเช•เชฐเชฃ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเซ‹. เช•เซ‡ เช…เชจเซเชฏ เช•เซ‹เชˆ เชนเชพเชฒเชฎเชพเช‚ เชธเช‚เชชเชพเชฆเชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡).

เช•เซเชฒเชพเชˆเชจเซเชŸ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เช›เซ‡เชฒเซเชฒเชพ เช˜เชฃเชพ เชธเชฎเชฏเชฅเซ€ เช›เซ‡, เชคเซ‡เชฎ เช›เชคเชพเช‚, เชคเซ‡ เชนเชœเซ€ เชชเชฃ เชจเชฌเชณเซ€ เชฐเซ€เชคเซ‡ เชธเชฎเชฐเซเชฅเชฟเชค เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เชœเซเชฏเชพเชฐเซ‡ เชคเซ‡เชจเซ‡ เชฌเชพเชฏเชชเชพเชธ เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡ เช˜เชฃเซ€ เชธเชฎเชธเซเชฏเชพเช“ เชŠเชญเซ€ เช•เชฐเซ‡ เช›เซ‡. เช…เชจเซ‡ (เชธเช‚เชญเชตเชคเชƒ :slightly_smiling_face: ) เชคเซ‡เชฅเซ€ เชœ IOS เชฌเซเชฐเชพเช‰เชเชฐเซเชธ (เชธเชซเชพเชฐเซ€ เชธเชฟเชตเชพเชฏเชจเชพ เชฌเชงเชพ) เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเช‚เช—เชคเชพ เชจเชฅเซ€ เช…เชจเซ‡ เชธเซเชฅเชพเชจเชฟเช• เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชธเซเชŸเซ‹เชฐเชฎเชพเช‚เชฅเซ€ เชคเซ‡เชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เชคเชพ เชจเชฅเซ€. เชฒเซ‹เช—เชฟเชจ/เชชเชพเชธ เช…เชฅเชตเชพ ssh เช•เซ€ เช…เชฅเชตเชพ เชซเชพเชฏเชฐเชตเซ‹เชฒ เชฆเซเชตเชพเชฐเชพ เชœเชฐเซ‚เชฐเซ€ เชชเซ‹เชฐเซเชŸ เชฌเช‚เชง เช•เชฐเชตเชพเชจเซ€ เชธเชฐเช–เชพเชฎเชฃเซ€เชฎเชพเช‚ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹เชจเชพ เช˜เชฃเชพ เชซเชพเชฏเชฆเชพ เช›เซ‡. เชชเชฐเช‚เชคเซ เชคเซ‡ เช† เชตเชฟเชถเซ‡ เชจเชฅเซ€.

iOS เชชเชฐ, เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชเช•เชฆเชฎ เชธเชฐเชณ เช›เซ‡ (เชตเชฟเชถเชฟเชทเซเชŸเชคเชพ เชตเชฟเชจเชพ เชจเชนเซ€เช‚), เชชเชฐเช‚เชคเซ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชคเซ‡ เชธเซ‚เชšเชจเชพเช“ เช…เชจเซเชธเชพเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชœเซ‡เชฎเชพเช‚เชฅเซ€ เช‡เชจเซเชŸเชฐเชจเซ‡เชŸ เชชเชฐ เช˜เชฃเซเช‚ เชฌเชงเซเช‚ เช›เซ‡ เช…เชจเซ‡ เชœเซ‡ เชซเช•เซเชค เชธเชซเชพเชฐเซ€ เชฌเซเชฐเชพเช‰เชเชฐ เชฎเชพเชŸเซ‡ เช‰เชชเชฒเชฌเซเชง เช›เซ‡. เช•เชฎเชจเชธเซ€เชฌเซ‡, เชธเชซเชพเชฐเซ€ เชตเซ‡เชฌ เชธเซ‹เช•เซ‡เชŸเซเชธ เชฎเชพเชŸเซ‡ เช•เซเชฒเชพเชฏเช‚เชŸ ะกert เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเชตเซ‹ เชคเซ‡ เชœเชพเชฃเชคเซเช‚ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เช†เชตเชพ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฌเชจเชพเชตเชตเซเช‚ เชคเซ‡ เช…เช‚เช—เซ‡ เช‡เชจเซเชŸเชฐเชจเซ‡เชŸ เชชเชฐ เช˜เชฃเซ€ เชธเซ‚เชšเชจเชพเช“ เช›เซ‡, เชชเชฐเช‚เชคเซ เชตเซเชฏเชตเชนเชพเชฐเชฎเชพเช‚ เช† เช…เช—เชฎเซเชฏ เช›เซ‡.

ZeroTech เชชเชฐ เช…เชฎเซ‡ Apple Safari เช…เชจเซ‡ เช•เซเชฒเชพเชฏเชจเซเชŸ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹เชจเซ‡ เชตเซ‡เชฌเชธเซ‹เช•เซ‡เชŸเซเชธ เชธเชพเชฅเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเซเชฏเชพ

เชตเซ‡เชฌเชธเซ‹เช•เซ‡เชŸเซเชธเชจเซ‡ เชธเชฎเชœเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชจเซ€เชšเซ‡เชจเซ€ เชฏเซ‹เชœเชจเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹: เชธเชฎเชธเซเชฏเชพ/เชงเชพเชฐเชฃเชพ/เช‰เช•เซ‡เชฒ.

เชธเชฎเชธเซเชฏเชพ: IOS เชฎเชพเชŸเซ‡ เชธเชซเชพเชฐเซ€ เชฎเซ‹เชฌเชพเช‡เชฒ เชฌเซเชฐเชพเช‰เชเชฐ เชชเชฐ เช•เซเชฒเชพเชฏเช‚เชŸ เชธเชฐเซเชŸเชฟเชซเชฟเช•เซ‡เชŸ เชฆเซเชตเชพเชฐเชพ เชธเซเชฐเช•เซเชทเชฟเชค เชนเซ‹เชฏ เชคเซ‡เชตเชพ เชธเช‚เชธเชพเชงเชจเซ‹เชจเซ€ เชตเชฟเชจเช‚เชคเซ€เช“ เชชเซเชฐเซ‹เช•เซเชธเซ€ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชตเซ‡เชฌ เชธเซ‹เช•เซ‡เชŸเซเชธ เชฎเชพเชŸเซ‡ เช•เซ‹เชˆ เชธเชชเซ‹เชฐเซเชŸ เชจเชฅเซ€ เช…เชจเซ‡ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชธเชชเซ‹เชฐเซเชŸ เชธเช•เซเชทเชฎ เช•เชฐเซ‡เชฒ เชนเซ‹เชฏ เชคเซ‡เชตเซ€ เช…เชจเซเชฏ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹.

เชชเซ‚เชฐเซเชตเชงเชพเชฐเชฃเชพเช“:

  1. เช†เช‚เชคเชฐเชฟเช•/เชฌเชพเชนเซเชฏ เชชเซเชฐเซ‹เช•เซเชธเซ€เชก เชธเช‚เชธเชพเชงเชจเซ‹เชจเชพ เชตเซ‡เชฌเชธเซ‹เช•เซ‡เชŸเซเชธเชฎเชพเช‚ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹ (เช เชœเชพเชฃเซ€เชจเซ‡ เช•เซ‡ เชคเซเชฏเชพเช‚ เช•เซ‹เชˆ เชจเชนเซ€เช‚ เชนเซ‹เชฏ) เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช†เชตเชพ เช…เชชเชตเชพเชฆเชจเซ‡ เช—เซ‹เช เชตเชตเชพเชจเซเช‚ เชถเช•เซเชฏ เช›เซ‡.
  2. เชตเซ‡เชฌเชธเซ‹เช•เซ‡เชŸเซเชธ เชฎเชพเชŸเซ‡, เชคเชฎเซ‡ เชธเชพเชฎเชพเชจเซเชฏ (เชฌเชฟเชจ-เชตเซ‡เชฌเชธเซ‹เช•เซ‡เชŸ) เชฌเซเชฐเชพเช‰เชเชฐ เชตเชฟเชจเช‚เชคเซ€ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชœเชจเชฐเซ‡เชŸ เชฅเชคเชพ เช…เชธเซเชฅเชพเชฏเซ€ เชธเชคเซเชฐเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชเช• เช…เชจเชจเซเชฏ, เชธเซเชฐเช•เซเชทเชฟเชค เช…เชจเซ‡ เชธเช‚เชฐเช•เซเชทเชฃเช•เซเชทเชฎ เช•เชจเซ‡เช•เซเชถเชจ เชฌเชจเชพเชตเซ€ เชถเช•เซ‹ เช›เซ‹.
  3. เช…เชธเซเชฅเชพเชฏเซ€ เชธเชคเซเชฐเซ‹ เชเช• เชชเซเชฐเซ‹เช•เซเชธเซ€ เชตเซ‡เชฌ เชธเชฐเซเชตเชฐ (เชฌเชฟเชฒเซเชŸ-เช‡เชจ เชฎเซ‹เชกเซเชฏเซเชฒเซเชธ เช…เชจเซ‡ เชซเช‚เช•เซเชถเชจเซเชธ) เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เซ€ เชถเช•เชพเชฏ เช›เซ‡.
  4. เช…เชธเซเชฅเชพเชฏเซ€ เชธเชคเซเชฐ เชŸเซ‹เช•เชจเซเชธ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชคเซˆเชฏเชพเชฐ เช…เชชเชพเชšเซ‡ เชฎเซ‹เชกเซเชฏเซเชฒเซ‹ เชคเชฐเซ€เช•เซ‡ เชฒเชพเช—เซ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡.
  5. เช…เชธเซเชฅเชพเชฏเซ€ เชธเชคเซเชฐ เชŸเซ‹เช•เชจเซเชธ เชคเชพเชฐเซเช•เชฟเช• เชฐเซ€เชคเซ‡ เช•เซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เชฎเชพเชณเช–เซเช‚ เชกเชฟเชเชพเช‡เชจ เช•เชฐเซ€เชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เซ€ เชถเช•เชพเชฏ เช›เซ‡.

เช…เชฎเชฒเซ€เช•เชฐเชฃ เชชเช›เซ€ เชฆเซƒเชถเซเชฏเชฎเชพเชจ เชธเซเชฅเชฟเชคเชฟ.

เช•เชพเชฐเซเชฏเชจเซเช‚ เชฒเช•เซเชทเซเชฏ: เชธเซ‡เชตเชพเช“ เช…เชจเซ‡ เช‡เชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐเชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ IOS เชชเชฐ เชฎเซ‹เชฌเชพเช‡เชฒ เชซเซ‹เชจเชฅเซ€ เชตเชงเชพเชฐเชพเชจเชพ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเซเชธ (เชœเซ‡เชฎ เช•เซ‡ VPN), เชเช•เซ€เช•เซƒเชค เช…เชจเซ‡ เชธเซเชฐเช•เซเชทเชฟเชค เชตเชฟเชจเชพ เชธเซเชฒเชญ เชนเซ‹เชตเซเช‚ เชœเซ‹เชˆเช.

เชตเชงเชพเชฐเชพเชจเซเช‚ เชฒเช•เซเชทเซเชฏ: เชฎเซ‹เชฌเชพเชˆเชฒ เชˆเชจเซเชŸเชฐเชจเซ‡เชŸ เชชเชฐ เชธเชพเชฎเช—เซเชฐเซ€เชจเซ€ เชเชกเชชเซ€ เชกเชฟเชฒเชฟเชตเชฐเซ€ เชธเชพเชฅเซ‡ เชธเชฎเชฏ เช…เชจเซ‡ เชธเช‚เชธเชพเชงเชจเซ‹/เชซเซ‹เชจ เชŸเซเชฐเชพเชซเชฟเช• (เชตเซ‡เชฌ เชธเซ‹เช•เซ‡เชŸ เชตเชฟเชจเชพเชจเซ€ เช•เซ‡เชŸเชฒเซ€เช• เชธเซ‡เชตเชพเช“ เชฌเชฟเชจเชœเชฐเซ‚เชฐเซ€ เชตเชฟเชจเช‚เชคเซ€เช“ เชชเซ‡เชฆเชพ เช•เชฐเซ‡ เช›เซ‡) เชฌเชšเชพเชตเซ‡ เช›เซ‡.

เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชคเชชเชพเชธเชตเซเช‚?

1. เช“เชชเชจเชฟเช‚เช— เชชเซ‡เชœ:

โ€” ะฝะฐะฟั€ะธะผะตั€, https://teamcity.yourdomain.com ะฒ ะผะพะฑะธะปัŒะฝะพะผ ะฑั€ะฐัƒะทะตั€ะต Safari (ะดะพัั‚ัƒะฟะตะฝ ั‚ะฐะบะถะต ะฒ ะดะตัะบั‚ะพะฟะฝะพะน ะฒะตั€ัะธะธ) โ€” ะฒั‹ะทั‹ะฒะฐะตั‚ ัƒัะฟะตัˆะฝะพะต ะฟะพะดะบะปัŽั‡ะตะฝะธะต ะบ ะฒะตะฑ-ัะพะบะตั‚ะฐะผ.
โ€” ะฝะฐะฟั€ะธะผะตั€, https://teamcity.yourdomain.com/admin/admin.html?item=diagnostics&tab=webSโ€ฆโ€” ะฟะพะบะฐะทั‹ะฒะฐะตั‚ ping/pong.
โ€” ะฝะฐะฟั€ะธะผะตั€, https://rancher.yourdomain.com/p/c-84bnv:p-vkszd/workload/deployment:danidb:phโ€ฆ-> viewlogs โ€” ะฟะพะบะฐะทั‹ะฒะฐะตั‚ ะปะพะณะธ ะบะพะฝั‚ะตะนะฝะตั€ะฐ.

2. เช…เชฅเชตเชพ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพ เช•เชจเซเชธเซ‹เชฒเชฎเชพเช‚:

ZeroTech เชชเชฐ เช…เชฎเซ‡ Apple Safari เช…เชจเซ‡ เช•เซเชฒเชพเชฏเชจเซเชŸ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹เชจเซ‡ เชตเซ‡เชฌเชธเซ‹เช•เซ‡เชŸเซเชธ เชธเชพเชฅเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเซเชฏเชพ

เชชเซ‚เชฐเซเชตเชงเชพเชฐเชฃเชพ เชชเชฐเซ€เช•เซเชทเชฃ:

1. เช†เช‚เชคเชฐเชฟเช•/เชฌเชพเชนเซเชฏ เชชเซเชฐเซ‹เช•เซเชธเซ€เชก เชธเช‚เชธเชพเชงเชจเซ‹เชจเชพ เชตเซ‡เชฌ เชธเซ‹เช•เซ‡เชŸเซเชธ เชฎเชพเชŸเซ‡ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹ (เช เชœเชพเชฃเซ€เชจเซ‡ เช•เซ‡ เชคเซเชฏเชพเช‚ เช•เซ‹เชˆ เชจเชนเซ€เช‚ เชนเซ‹เชฏ) เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช†เชตเชพ เช…เชชเชตเชพเชฆเชจเซ‡ เช—เซ‹เช เชตเชตเชพเชจเซเช‚ เชถเช•เซเชฏ เช›เซ‡.

2 เช‰เช•เซ‡เชฒเซ‹ เช…เชนเซ€เช‚ เชฎเชณเซ€ เช†เชตเซเชฏเชพ เชนเชคเชพ:

เช) เชธเซเชคเชฐเซ‡

<Location sock*> SSLVerifyClient optional </Location>
<Location /> SSLVerifyClient require </Location>

เชเช•เซเชธเซ‡เชธ เชธเซเชคเชฐ เชฌเชฆเชฒเซ‹.

เช† เชชเชฆเซเชงเชคเชฟเชฎเชพเช‚ เชจเซ€เชšเซ‡เชจเซ€ เช˜เซ‹เช‚เช˜เชพเชŸ เช›เซ‡:

  • เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเชจเซ€ เชšเช•เชพเชธเชฃเซ€ เชชเซเชฐเซ‹เช•เซเชธเซ€เชก เชฐเชฟเชธเซ‹เชฐเซเชธเชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เชชเช›เซ€ เชฅเชพเชฏ เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡, เชตเชฟเชจเช‚เชคเซ€ เชชเช›เซ€ เชนเซ‡เชจเซเชกเชถเซ‡เช•. เช†เชจเซ‹ เช…เชฐเซเชฅ เช เช›เซ‡ เช•เซ‡ เชชเซเชฐเซ‹เช•เซเชธเซ€ เชชเชนเซ‡เชฒเชพ เชฒเซ‹เชก เชฅเชถเซ‡ เช…เชจเซ‡ เชชเช›เซ€ เชธเซเชฐเช•เซเชทเชฟเชค เชธเซ‡เชตเชพเชจเซ€ เชตเชฟเชจเช‚เชคเซ€เชจเซ‡ เช•เชพเชชเซ€ เชจเชพเช–เชถเซ‡. เช† เช–เชฐเชพเชฌ เช›เซ‡, เชชเชฐเช‚เชคเซ เชœเชŸเชฟเชฒ เชจเชฅเซ€;
  • http2 เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒเชฎเชพเช‚. เชคเซ‡ เชนเชœเซ€ เชชเชฃ เชกเซเชฐเชพเชซเซเชŸเชฎเชพเช‚ เช›เซ‡, เช…เชจเซ‡ เชฌเซเชฐเชพเช‰เชเชฐ เช‰เชคเซเชชเชพเชฆเช•เซ‹ เชœเชพเชฃเชคเชพ เชจเชฅเซ€ เช•เซ‡ เชคเซ‡เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเซเช‚ #info เชตเชฟเชถเซ‡ tls1.3 http2 เชชเซ‹เชธเซเชŸ เชนเซ‡เชจเซเชกเชถเซ‡เช• (เชนเชตเซ‡ เช•เชพเชฎ เช•เชฐเชคเซเช‚ เชจเชฅเซ€) RFC 8740 "HTTP/1.3 เชธเชพเชฅเซ‡ TLS 2 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡" เชฒเชพเช—เซ เช•เชฐเซ‹;
  • เช† เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซ€ เชคเซ‡ เชธเซเชชเชทเซเชŸ เชจเชฅเซ€.

b) เชฎเซ‚เชณเชญเซ‚เชค เชธเซเชคเชฐเซ‡, เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชตเชฟเชจเชพ ssl เชจเซ‡ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‹.

SSLVerifyClient เชจเซ‡ เชœเชฐเซ‚เชฐเซ€ => SSLVerifyClient เชตเซˆเช•เชฒเซเชชเชฟเช•, เชชเชฐเช‚เชคเซ เช† เชชเซเชฐเซ‹เช•เซเชธเซ€ เชธเชฐเซเชตเชฐเชจเซเช‚ เชธเซเชฐเช•เซเชทเชพ เชธเซเชคเชฐ เช˜เชŸเชพเชกเซ‡ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เช†เชตเชพ เชœเซ‹เชกเชพเชฃเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชตเชฟเชจเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เชœเซ‹ เช•เซ‡, เชคเชฎเซ‡ เชจเซ€เชšเซ‡เชจเชพ เชจเชฟเชฐเซเชฆเซ‡เชถเซ‹ เชธเชพเชฅเซ‡ เชชเซเชฐเซ‹เช•เซเชธเซ€ เชธเซ‡เชตเชพเช“เชจเซ€ เชเช•เซเชธเซ‡เชธเชจเซ‡ เชตเชงเซ เชจเช•เชพเชฐเซ€ เชถเช•เซ‹ เช›เซ‹:

RewriteEngine        on
RewriteCond     %{SSL:SSL_CLIENT_VERIFY} !=SUCCESS
RewriteRule     .? - [F]
ErrorDocument 403 "You need a client side certificate issued by CAcert to access this site"

เชตเชงเซ เชตเชฟเช—เชคเชตเชพเชฐ เชฎเชพเชนเชฟเชคเซ€ ssl เชตเชฟเชถเซ‡เชจเชพ เชฒเซ‡เช–เชฎเชพเช‚ เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡: เช…เชชเชพเชšเซ‡ เชธเชฐเซเชตเชฐ เช•เซเชฒเชพเชฏเช‚เชŸ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ

เชฌเช‚เชจเซ‡ เชตเชฟเช•เชฒเซเชชเซ‹เชจเซเช‚ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚, http2 เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒ เชธเชพเชฅเซ‡ เชคเซ‡เชจเซ€ เชตเซˆเชตเชฟเชงเซเชฏเชคเชพ เช…เชจเซ‡ เชธเซเชธเช‚เช—เชคเชคเชพ เชฎเชพเชŸเซ‡ เชตเชฟเช•เชฒเซเชช "b" เชชเชธเช‚เชฆ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹.

เช† เชชเซ‚เชฐเซเชตเชงเชพเชฐเชฃเชพเชจเซ€ เชšเช•เชพเชธเชฃเซ€ เชชเซ‚เชฐเซเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชธเชพเชฅเซ‡ เช˜เชฃเชพ เชชเซเชฐเชฏเซ‹เช—เซ‹ เช•เชฐเซเชฏเชพ; เชจเซ€เชšเซ‡เชจเซ€ เชกเชฟเชเชพเช‡เชจเชจเซเช‚ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚:

เชœเซ‹ = เชœเชฐเซ‚เชฐเซ€ = เชซเชฐเซ€เชฅเซ€ เชฒเช–เซ‹

เชชเชฐเชฟเชฃเชพเชฎ เชจเซ€เชšเซ‡เชจเซ€ เชฎเซ‚เชณเชญเซ‚เชค เชกเชฟเชเชพเช‡เชจ เช›เซ‡:

SSLVerifyClient optional
RewriteEngine on
RewriteCond %{SSL:SSL_CLIENT_VERIFY} !=SUCCESS
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule     .? - [F]
#ErrorDocument 403 "You need a client side certificate issued by CAcert to access this site"

#websocket for safari without cert auth
<If "%{SSL:SSL_CLIENT_VERIFY} != 'SUCCESS'">
<If "%{HTTP:Upgrade} = 'websocket'">
...
    #ะทะฐะผะตั‰ะฐะตะผ ะฐะฒั‚ะพั€ะธะทะฐั†ะธัŽ ะฟะพ ะฒะปะฐะดะตะปัŒั†ัƒ ัะตั€ั‚ะธั„ะธะบะฐั‚ะฐ ะฝะฐ ะฐะฒั‚ะพั€ะธะทะฐั†ะธัŽ ะฟะพ ะฝะพะผะตั€ัƒ ะฟั€ะพั‚ะพะบะพะปะฐ
    SSLUserName SSl_PROTOCOL
</If>
</If>

เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชฎเชพเชฒเชฟเช• เชฆเซเชตเชพเชฐเชพ เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เช›เซ‡ เชคเซ‡ เช…เชงเชฟเช•เซƒเชคเชคเชพเชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ‡เชคเชพ, เชชเชฐเช‚เชคเซ เช—เซเชฎ เชฅเชฏเซ‡เชฒ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชธเชพเชฅเซ‡, เชฎเชพเชฐเซ‡ เช‰เชชเชฒเชฌเซเชง เชšเชฒเซ‹เชฎเชพเช‚เชจเชพ เชเช• SSl_PROTOCOL (SSL_CLIENT_S_DN_CN เชจเซ‡ เชฌเชฆเชฒเซ‡) เชจเชพ เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚ เชฌเชฟเชจ-เช…เชธเซเชคเชฟเชคเซเชต เชงเชฐเชพเชตเชคเชพ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชฎเชพเชฒเชฟเช•เชจเซ‡ เช‰เชฎเซ‡เชฐเชตเซ‹ เชชเชกเซเชฏเซ‹ เชนเชคเซ‹, เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃเชฎเชพเช‚ เชตเชงเซ เชตเชฟเช—เชคเซ‹:

เช…เชชเชพเชšเซ‡ เชฎเซ‹เชกเซเชฏเซเชฒ mod_ssl

ZeroTech เชชเชฐ เช…เชฎเซ‡ Apple Safari เช…เชจเซ‡ เช•เซเชฒเชพเชฏเชจเซเชŸ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹เชจเซ‡ เชตเซ‡เชฌเชธเซ‹เช•เซ‡เชŸเซเชธ เชธเชพเชฅเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเซเชฏเชพ

2. เชตเซ‡เชฌเชธเซ‹เช•เซ‡เชŸเซเชธ เชฎเชพเชŸเซ‡, เชคเชฎเซ‡ เช…เชธเซเชฅเชพเชฏเซ€ เชธเชคเซเชฐเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช…เชจเชจเซเชฏ, เชธเซเชฐเช•เซเชทเชฟเชค เช…เชจเซ‡ เชธเซเชฐเช•เซเชทเชฟเชค เช•เชจเซ‡เช•เซเชถเชจ เชฌเชจเชพเชตเซ€ เชถเช•เซ‹ เช›เซ‹ เชœเซ‡ เชธเชพเชฎเชพเชจเซเชฏ (เชฌเชฟเชจ-เชตเซ‡เชฌเชธเซ‹เช•เซ‡เชŸ) เชฌเซเชฐเชพเช‰เชเชฐ เชตเชฟเชจเช‚เชคเซ€ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชœเชจเชฐเซ‡เชŸ เชฅเชพเชฏ เช›เซ‡.

เช…เช—เชพเช‰เชจเชพ เช…เชจเซเชญเชตเชจเชพ เช†เชงเชพเชฐเซ‡, เชคเชฎเชพเชฐเซ‡ เชจเชฟเชฏเชฎเชฟเชค (เชฌเชฟเชจ-เชตเซ‡เชฌ เชธเซ‹เช•เซ‡เชŸ) เชตเชฟเชจเช‚เชคเซ€ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชตเซ‡เชฌ เชธเซ‹เช•เซ‡เชŸ เช•เชจเซ‡เช•เซเชถเชจเซเชธ เชฎเชพเชŸเซ‡ เช•เชพเชฎเชšเชฒเชพเช‰ เชŸเซ‹เช•เชจเซเชธ เชคเซˆเชฏเชพเชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชฎเชพเช‚ เชตเชงเชพเชฐเชพเชจเซ‹ เชตเชฟเชญเชพเช— เช‰เชฎเซ‡เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

#ะฟะพะดะณะพั‚ะพะฒะบะฐ ะฟะตั€ะตะดะฐั‡ะฐ ัะตะฑะต ะกookie ั‡ะตั€ะตะท ะฟะพะปัŒะทะพะฒะฐั‚ะตะปัŒัะบะธะน ะฑั€ะฐัƒะทะตั€
<If "%{SSL:SSL_CLIENT_VERIFY} = 'SUCCESS'">
<If "%{HTTP:Upgrade} != 'websocket'">
Header set Set-Cookie "websocket-allowed=true; path=/; Max-Age=100"
</If>
</If>

#ะฟั€ะพะฒะตั€ะบะฐ Cookie ะดะปั ัƒัั‚ะฐะฝะพะฒะปะตะฝะธั ะฒะตะฑ-ัะพะบะตั‚ ัะพะตะดะธะฝะตะฝะธั
<source lang="javascript">
<If "%{SSL:SSL_CLIENT_VERIFY} != 'SUCCESS'">
<If "%{HTTP:Upgrade} = 'websocket'">
#check for exists cookie

#get and check
SetEnvIf Cookie "websocket-allowed=(.*)" env-var-name=$1

#or rewrite rule
RewriteCond %{HTTP_COOKIE} !^.*mycookie.*$

#or if
<If "%{HTTP_COOKIE} =~ /(^|; )cookie-names*=s*some-val(;|$)/ >
</If

</If>
</If>

เชชเชฐเซ€เช•เซเชทเชฃ เชฆเชฐเซเชถเชพเชตเซ‡ เช›เซ‡ เช•เซ‡ เชคเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡. เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเชพ เชฌเซเชฐเชพเช‰เชเชฐ เชฆเซเชตเชพเชฐเชพ เช•เซ‚เช•เซ€เชเชจเซ‡ เชคเชฎเชพเชฐเชพเชฎเชพเช‚ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชตเซเช‚ เชถเช•เซเชฏ เช›เซ‡.

3. เชเช• เชชเซเชฐเซ‹เช•เซเชธเซ€ เชตเซ‡เชฌ เชธเชฐเซเชตเชฐ (เชฎเชพเชคเซเชฐ เชฌเชฟเชฒเซเชŸ-เช‡เชจ เชฎเซ‹เชกเซเชฏเซเชฒเซ‹ เช…เชจเซ‡ เช•เชพเชฐเซเชฏเซ‹) เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช…เชธเซเชฅเชพเชฏเซ€ เชธเชคเซเชฐเซ‹เชจเซ‹ เช…เชฎเชฒ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เชœเซ‡เชฎ เช†เชชเชฃเซ‡ เช…เช—เชพเช‰ เชœเชพเชฃเซเชฏเซเช‚ เชคเซ‡เชฎ, เช…เชชเชพเชšเซ‡เชฎเชพเช‚ เช˜เชฃเซ€ เชฌเชงเซ€ เชฎเซเช–เซเชฏ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพ เช›เซ‡ เชœเซ‡ เชคเชฎเชจเซ‡ เชถเชฐเชคเซ€ เชฐเชšเชจเชพเช“ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชชเชฐเชตเชพเชจเช—เซ€ เช†เชชเซ‡ เช›เซ‡. เชœเซ‹ เช•เซ‡, เช…เชฎเชพเชฐเซ€ เชฎเชพเชนเชฟเชคเซ€ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเชพ เชฌเซเชฐเชพเช‰เชเชฐเชฎเชพเช‚ เชนเซ‹เชฏ เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡เชจเซ‡ เชธเซเชฐเช•เซเชทเชฟเชค เชฐเชพเช–เชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเชจเซ‡ เชธเชพเชงเชจเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชคเซ‡เชฅเซ€ เช…เชฎเซ‡ เชธเซเชฅเชพเชชเชฟเชค เช•เชฐเซ€เช เช›เซ€เช เช•เซ‡ เชถเซเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเชตเซเช‚ เช…เชจเซ‡ เชถเชพ เชฎเชพเชŸเซ‡, เช…เชจเซ‡ เช…เชฎเซ‡ เช•เชฏเชพ เชฌเชฟเชฒเซเชŸ-เช‡เชจ เช•เชพเชฐเซเชฏเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚:

  • เช…เชฎเชจเซ‡ เชเช• เชŸเซ‹เช•เชจเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชœเซ‡ เชธเชฐเชณเชคเชพเชฅเซ€ เชกเซ€เช•เซ‹เชก เช•เชฐเซ€ เชถเช•เชพเชคเซ€ เชจเชฅเซ€.
  • เช…เชฎเชจเซ‡ เชเช• เชŸเซ‹เช•เชจเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชœเซ‡เชฎเชพเช‚ เช…เชชเซเชฐเชšเชฒเชฟเชคเชคเชพ เชถเชพเชฎเซ‡เชฒ เชนเซ‹เชฏ เช…เชจเซ‡ เชธเชฐเซเชตเชฐ เชชเชฐ เช…เชชเซเชฐเชšเชฒเชฟเชคเชคเชพ เชคเชชเชพเชธเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ เชนเซ‹เชฏ.
  • เช…เชฎเชจเซ‡ เชเช• เชŸเซ‹เช•เชจเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชœเซ‡ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเชจเชพ เชฎเชพเชฒเชฟเช• เชธเชพเชฅเซ‡ เชธเช‚เช•เชณเชพเชฏเซ‡เชฒ เชนเชถเซ‡.

เช† เชฎเชพเชŸเซ‡ เชนเซ‡เชถเชฟเช‚เช— เชซเช‚เช•เซเชถเชจ, เชฎเซ€เช เซเช‚ เช…เชจเซ‡ เชŸเซ‹เช•เชจเชจเซ€ เช‰เช‚เชฎเชฐ เชฎเชพเชŸเซ‡ เชคเชพเชฐเซ€เช–เชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เช›เซ‡ เช…เชชเชพเชšเซ‡ HTTP เชธเชฐเซเชตเชฐเชฎเชพเช‚ เช…เชญเชฟเชตเซเชฏเช•เซเชคเชฟเช“ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชคเซ‡ เชฌเชงเซ เชฌเซ‰เช•เซเชธเชจเซ€ เชฌเชนเชพเชฐ sha1 เช…เชจเซ‡ %{TIME} เช›เซ‡.

เชชเชฐเชฟเชฃเชพเชฎ เช† เชกเชฟเชเชพเช‡เชจ เชนเชคเซเช‚:

#ะฝะตั‚ ัะตั€ั‚ะธั„ะธะบะฐั‚ะฐ, ะธ ะพะฑั€ะฐั‰ะตะฝะธะต ะบ websocket
<If "%{SSL:SSL_CLIENT_VERIFY} != 'SUCCESS'">
<If "%{HTTP:Upgrade} = 'websocket'">
    SetEnvIf Cookie "zt-cert-sha1=([^;]+)" zt-cert-sha1=$1
    SetEnvIf Cookie "zt-cert-uid=([^;]+)" zt-cert-uid=$1
    SetEnvIf Cookie "zt-cert-date=([^;]+)" zt-cert-date=$1

#ั‚ะพะปัŒะบะพ ั‚ะฐะบ ะผะพะถะฝะพ ั€ะฐะฑะพั‚ะฐั‚ัŒ ั ะฟะตั€ะตะผะตะฝะฝั‹ะผะธ, ะฟะพะปัƒั‡ะตะฝะฝั‹ะผะธ ะฒ env-ะฐั… ะฒ ัั‚ะพั‚ ะผะพะผะตะฝั‚ ะฒั€ะตะผะตะฝะธ, ะฑะพะปะตะต ะพะฝะธ ะฝะธะณะดะต ะฝะต ะดะพัั‚ัƒะฟะฝั‹ ะดะปั ั„ัƒะฝะบั†ะธะธ ั…ะตัˆะธั€ะพะฒะฐะฝะธั (ะฟะพ ะพั‚ะดะตะปัŒะฝะพัั‚ะธ ะผะพะถะฝะพ, ะฝะพ ะฝะต ะฒะผะตัั‚ะต, ะดะฐ ะธ ะตั‰ั‘ ั ั…ะตัˆะธั€ะพะฒะฐะฝะธะตะผ)
    <RequireAll>
        Require expr %{sha1:salt1%{env:zt-cert-date}salt3%{env:zt-cert-uid}salt2} == %{env:zt-cert-sha1}
        Require expr %{env:zt-cert-sha1} =~ /^.{40}$/
    </RequireAll>
</If>
</If>

#ะตัั‚ัŒ ัะตั€ั‚ะธั„ะธะบะฐั‚, ะทะฐะฟั€ะฐัˆะธะฒะฐะตั‚ัั ะฝะต websocket
<If "%{SSL:SSL_CLIENT_VERIFY} = 'SUCCESS'">
<If "%{HTTP:Upgrade} != 'websocket'">
    SetEnvIf Cookie "zt-cert-sha1=([^;]+)" HAVE_zt-cert-sha1=$1

    SetEnv zt_cert "path=/; HttpOnly;Secure;SameSite=Strict"
#ะะพะฒั‹ะต ะบัƒะบะธ ัั‚ะฐะฒัั‚ัั, ะตัะปะธ ัั‚ะฐั€ั‹ั… ะฝะตั‚
    Header add Set-Cookie "expr=zt-cert-sha1=%{sha1:salt1%{TIME}salt3%{SSL_CLIENT_S_DN_CN}salt2};%{env:zt_cert}" env=!HAVE_zt-cert-sha1
    Header add Set-Cookie "expr=zt-cert-uid=%{SSL_CLIENT_S_DN_CN};%{env:zt_cert}" env=!HAVE_zt-cert-sha1
    Header add Set-Cookie "expr=zt-cert-date=%{TIME};%{env:zt_cert}" env=!HAVE_zt-cert-sha1
</If>
</If>

เชงเซเชฏเซ‡เชฏ เชนเชพเช‚เชธเชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เช›เซ‡, เชชเชฐเช‚เชคเซ เชธเชฐเซเชตเชฐ เช…เชชเซเชฐเชšเชฒเชฟเชคเชคเชพ เชธเชพเชฅเซ‡ เชธเชฎเชธเซเชฏเชพเช“ เช›เซ‡ (เชคเชฎเซ‡ เชเช• เชตเชฐเซเชท เชœเซ‚เชจเซ€ เช•เซ‚เช•เซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹), เชœเซ‡เชจเซ‹ เช…เชฐเซเชฅ เช›เซ‡ เช•เซ‡ เชŸเซ‹เช•เชจเซเชธ, เช†เช‚เชคเชฐเชฟเช• เช‰เชชเชฏเซ‹เช— เชฎเชพเชŸเซ‡ เชธเชฒเชพเชฎเชค เชนเซ‹เชตเชพ เช›เชคเชพเช‚, เช”เชฆเซเชฏเซ‹เช—เชฟเช• (เชธเชพเชฎเซ‚เชนเชฟเช•) เช‰เชชเชฏเซ‹เช— เชฎเชพเชŸเซ‡ เช…เชธเซเชฐเช•เซเชทเชฟเชค เช›เซ‡.

ZeroTech เชชเชฐ เช…เชฎเซ‡ Apple Safari เช…เชจเซ‡ เช•เซเชฒเชพเชฏเชจเซเชŸ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹เชจเซ‡ เชตเซ‡เชฌเชธเซ‹เช•เซ‡เชŸเซเชธ เชธเชพเชฅเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเซเชฏเชพ

4. เช…เชธเซเชฅเชพเชฏเซ€ เชธเชคเซเชฐ เชŸเซ‹เช•เชจเซเชธ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชคเซˆเชฏเชพเชฐ เช…เชชเชพเชšเซ‡ เชฎเซ‹เชกเซเชฏเซเชฒเซ‹ เชคเชฐเซ€เช•เซ‡ เชฒเชพเช—เซ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡.

เช…เช—เชพเช‰เชจเชพ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชจเชฎเชพเช‚เชฅเซ€ เชเช• เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชธเชฎเชธเซเชฏเชพ เชฐเชนเซ€ เชนเชคเซ€ - เชŸเซ‹เช•เชจ เชตเซƒเชฆเซเชงเชคเซเชตเชจเซ‡ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช…เชธเชฎเชฐเซเชฅเชคเชพ.

เช…เชฎเซ‡ เชเช• เชคเซˆเชฏเชพเชฐ เชฎเซ‹เชกเซเชฏเซเชฒ เชถเซ‹เชงเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช เชœเซ‡ เช† เช•เชฐเซ‡ เช›เซ‡, เชถเชฌเซเชฆเซ‹ เช…เชจเซเชธเชพเชฐ: apache token json two factor auth

เชนเชพ, เชคเซเชฏเชพเช‚ เชคเซˆเชฏเชพเชฐ เชฎเซ‹เชกเซเชฏเซเชฒเซ‹ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡ เชฌเชงเชพ เชšเซ‹เช•เซเช•เชธ เช•เซเชฐเชฟเชฏเชพเช“ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฏเซ‡เชฒเชพ เช›เซ‡ เช…เชจเซ‡ เชธเชคเซเชฐ เช…เชจเซ‡ เชตเชงเชพเชฐเชพเชจเซ€ เช•เซ‚เช•เซ€เช เชถเชฐเซ‚ เช•เชฐเชตเชพเชจเชพ เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚ เช•เชฒเชพเช•เซƒเชคเชฟเช“ เชงเชฐเชพเชตเซ‡ เช›เซ‡. เชเชŸเชฒเซ‡ เช•เซ‡ เชฅเซ‹เชกเชพ เชธเชฎเชฏ เชฎเชพเชŸเซ‡ เชจเชนเซ€เช‚.
เช…เชฎเชจเซ‡ เชถเซ‹เชงเชตเชพเชฎเชพเช‚ เชชเชพเช‚เชš เช•เชฒเชพเช• เชฒเชพเช—เซเชฏเชพ, เชœเซ‡เชจเชพเชฅเซ€ เช•เซ‹เชˆ เชจเช•เซเช•เชฐ เชชเชฐเชฟเชฃเชพเชฎ เชฎเชณเซเชฏเซเช‚ เชจเชนเซ€เช‚.

5. เช…เชธเซเชฅเชพเชฏเซ€ เชธเชคเซเชฐ เชŸเซ‹เช•เชจเซเชธ เชคเชพเชฐเซเช•เชฟเช• เชฐเซ€เชคเซ‡ เช•เซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพเช“เชจเซ€ เชฐเชšเชจเชพเชจเซ‡ เชกเชฟเชเชพเช‡เชจ เช•เชฐเซ€เชจเซ‡ เชฒเชพเช—เซ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เชคเซˆเชฏเชพเชฐ เชฎเซ‹เชกเซเชฏเซเชฒเซเชธ เช–เซ‚เชฌ เชœเชŸเชฟเชฒ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เช…เชฎเชจเซ‡ เชซเช•เซเชค เชฅเซ‹เชกเชพ เช•เชพเชฐเซเชฏเซ‹เชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เชเชตเซเช‚ เช•เชนเซ‡เชตเชพเชฏ เช›เซ‡ เช•เซ‡, เชคเชพเชฐเซ€เช–เชจเซ€ เชธเชฎเชธเซเชฏเชพ เช เช›เซ‡ เช•เซ‡ เช…เชชเชพเชšเซ‡เชจเชพ เชฌเชฟเชฒเซเชŸ-เช‡เชจ เชซเช‚เช•เซเชถเชจเซเชธ เชญเชตเชฟเชทเซเชฏเชฎเชพเช‚เชฅเซ€ เชคเชพเชฐเซ€เช– เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเชคเชพ เชจเชฅเซ€, เช…เชจเซ‡ เช…เชชเซเชฐเชšเชฒเชฟเชคเชคเชพเชจเซ€ เชคเชชเชพเชธ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชฌเชฟเชฒเซเชŸ-เช‡เชจ เชซเช‚เช•เซเชถเชจเซเชธเชฎเชพเช‚ เช•เซ‹เชˆ เช—เชพเชฃเชฟเชคเชฟเช• เชธเชฐเชตเชพเชณเซ‹/เชฌเชพเชฆเชฌเชพเช•เซ€ เชจเชฅเซ€.

เชเชŸเชฒเซ‡ เช•เซ‡, เชคเชฎเซ‡ เชฒเช–เซ€ เชถเช•เชคเชพ เชจเชฅเซ€:

(%{env:zt-cert-date} + 30) > %{DATE}

เชคเชฎเซ‡ เชซเช•เซเชค เชฌเซ‡ เชธเช‚เช–เซเชฏเชพเช“เชจเซ€ เชคเซเชฒเชจเชพ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹.

เชธเชซเชพเชฐเซ€ เชธเชฎเชธเซเชฏเชพ เชฎเชพเชŸเซ‡ เช‰เช•เซ‡เชฒ เชถเซ‹เชงเชคเซ€ เชตเช–เชคเซ‡, เชฎเชจเซ‡ เชเช• เชฐเชธเชชเซเชฐเชฆ เชฒเซ‡เช– เชฎเชณเซเชฏเซ‹: เช•เซเชฒเชพเชฏเช‚เชŸ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹ เชธเชพเชฅเซ‡ เชนเซ‹เชฎเช†เชธเชฟเชธเซเชŸเชจเซเชŸเชจเซ‡ เชธเซเชฐเช•เซเชทเชฟเชค เช•เชฐเชตเซเช‚ (เชธเชซเชพเชฐเซ€/iOS เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡)
เชคเซ‡ Nginx เชฎเชพเชŸเซ‡ เชฒเซเช†เชฎเชพเช‚ เช•เซ‹เชกเชจเชพ เช‰เชฆเชพเชนเชฐเชฃเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ‡ เช›เซ‡, เช…เชจเซ‡ เชœเซ‡ เชคเซ‡ เชฌเชนเชพเชฐ เช†เชตเซเชฏเซเช‚ เชคเซ‡เชฎ, เชนเซ‡เชถเชฟเช‚เช— เชฎเชพเชŸเซ‡ hmac เชธเซ‰เชฒเซเชŸเชฟเช‚เช— เชชเชฆเซเชงเชคเชฟเชจเชพ เช‰เชชเชฏเซ‹เช—เชจเชพ เช…เชชเชตเชพเชฆ เชธเชฟเชตเชพเชฏ, เช…เชฎเซ‡ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เซ‡เชฒเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเชพ เชคเซ‡ เชญเชพเช—เชจเชพ เชคเชฐเซเช•เชจเซ‡ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เช•เชฐเซ‡ เช›เซ‡ ( เช† เช…เชชเชพเชšเซ‡เชฎเชพเช‚ เชœเซ‹เชตเชพ เชฎเชณเซเชฏเซเช‚ เชจเชฅเซ€).

เชคเซ‡ เชธเซเชชเชทเซเชŸ เชฅเชˆ เช—เชฏเซเช‚ เช•เซ‡ เชฒเซเช† เชธเซเชชเชทเซเชŸ เชคเชฐเซเช• เชธเชพเชฅเซ‡เชจเซ€ เชญเชพเชทเชพ เช›เซ‡, เช…เชจเซ‡ เช…เชชเชพเชšเซ‡ เชฎเชพเชŸเซ‡ เช•เช‚เชˆเช• เชธเชฐเชณ เช•เชฐเชตเซเช‚ เชถเช•เซเชฏ เช›เซ‡:

Nginx เช…เชจเซ‡ Apache เชธเชพเชฅเซ‡เชจเชพ เชคเชซเชพเชตเชคเชจเซ‹ เช…เชญเซเชฏเชพเชธ เช•เชฐเซเชฏเชพ เชชเช›เซ€:

เช…เชจเซ‡ เชฒเซเช† เชญเชพเชทเชพ เช‰เชคเซเชชเชพเชฆเช• เชชเชพเชธเซ‡เชฅเซ€ เช‰เชชเชฒเชฌเซเชง เช•เชพเชฐเซเชฏเซ‹:
22.1 - เชคเชพเชฐเซ€เช– เช…เชจเซ‡ เชธเชฎเชฏ

เชตเชฐเซเชคเชฎเชพเชจ เชธเชพเชฅเซ‡ เชธเชฐเช–เชพเชฎเชฃเซ€ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชญเชตเชฟเชทเซเชฏเชจเซ€ เชคเชพเชฐเซ€เช– เชธเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเชจเซ‡ เชจเชพเชจเซ€ เชฒเซเช† เชซเชพเช‡เชฒเชฎเชพเช‚ env เชตเซ‡เชฐเชฟเชฏเซ‡เชฌเชฒ เชธเซ‡เชŸ เช•เชฐเชตเชพเชจเซ€ เชฐเซ€เชค เชฎเชณเซ€.

เชธเชฐเชณ เชฒเซเช† เชธเซเช•เซเชฐเชฟเชชเซเชŸ เช†เชจเชพ เชœเซ‡เชตเซ€ เชฆเซ‡เช–เชพเชฏ เช›เซ‡:

require 'apache2'

function handler(r)
    local fmt = '%Y%m%d%H%M%S'
    local timeout = 3600 -- 1 hour

    r.notes['zt-cert-timeout'] = timeout
    r.notes['zt-cert-date-next'] = os.date(fmt,os.time()+timeout)
    r.notes['zt-cert-date-halfnext'] = os.date(fmt,os.time()+ (timeout/2))
    r.notes['zt-cert-date-now'] = os.date(fmt,os.time())

    return apache2.OK
end

เช…เชจเซ‡ เช† เชฐเซ€เชคเซ‡ เช•เซ‚เช•เซ€เชเชจเซ€ เชธเช‚เช–เซเชฏเชพเชจเชพ เช‘เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ เชธเชพเชฅเซ‡ เช…เชจเซ‡ เชœเซ‚เชจเซ€ เช•เซ‚เช•เซ€ (เชŸเซ‹เช•เชจ) เชธเชฎเชพเชชเซเชค เชฅเชพเชฏ เชคเซ‡ เชชเชนเซ‡เชฒเชพเช‚ เช…เชกเชงเซ‹ เชธเชฎเชฏ เช†เชตเซ‡ เชคเซเชฏเชพเชฐเซ‡ เชŸเซ‹เช•เชจ เชฌเชฆเชฒเชตเชพเชจเซ€ เชธเชพเชฅเซ‡ เช† เชฐเซ€เชคเซ‡ เชฌเชงเซเช‚ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡:

SSLVerifyClient optional

#LuaScope thread
#generate event variables zt-cert-date-next
LuaHookAccessChecker /usr/local/etc/apache24/sslincludes/websocket_token.lua handler early

#ะทะฐะฟั€ะตั‰ะฐะตะผ ะฑะตะท ัะตั€ั‚ะธั„ะธะบะฐั‚ะฐ ั‡ั‚ะพ-ั‚ะพ ะตั‰ั‘, ะบั€ะพะผะต webscoket
RewriteEngine on
RewriteCond %{SSL:SSL_CLIENT_VERIFY} !=SUCCESS
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule     .? - [F]
#ErrorDocument 403 "You need a client side certificate issued by CAcert to access this site"

#websocket for safari without certauth
<If "%{SSL:SSL_CLIENT_VERIFY} != 'SUCCESS'">
<If "%{HTTP:Upgrade} = 'websocket'">
    SetEnvIf Cookie "zt-cert=([^,;]+),([^,;]+),[^,;]+,([^,;]+)" zt-cert-sha1=$1 zt-cert-date=$2 zt-cert-uid=$3

    <RequireAll>
        Require expr %{sha1:salt1%{env:zt-cert-date}salt3%{env:zt-cert-uid}salt2} == %{env:zt-cert-sha1}
        Require expr %{env:zt-cert-sha1} =~ /^.{40}$/
        Require expr %{env:zt-cert-date} -ge %{env:zt-cert-date-now}
    </RequireAll>
   
    #ะทะฐะผะตั‰ะฐะตะผ ะฐะฒั‚ะพั€ะธะทะฐั†ะธัŽ ะฟะพ ะฒะปะฐะดะตะปัŒั†ัƒ ัะตั€ั‚ะธั„ะธะบะฐั‚ะฐ ะฝะฐ ะฐะฒั‚ะพั€ะธะทะฐั†ะธัŽ ะฟะพ ะฝะพะผะตั€ัƒ ะฟั€ะพั‚ะพะบะพะปะฐ
    SSLUserName SSl_PROTOCOL
    SSLOptions -FakeBasicAuth
</If>
</If>

<If "%{SSL:SSL_CLIENT_VERIFY} = 'SUCCESS'">
<If "%{HTTP:Upgrade} != 'websocket'">
    SetEnvIf Cookie "zt-cert=([^,;]+),[^,;]+,([^,;]+)" HAVE_zt-cert-sha1=$1 HAVE_zt-cert-date-halfnow=$2
    SetEnvIfExpr "env('HAVE_zt-cert-date-halfnow') -ge %{TIME} && env('HAVE_zt-cert-sha1')=~/.{40}/" HAVE_zt-cert-sha1-found=1

    Define zt-cert "path=/;Max-Age=%{env:zt-cert-timeout};HttpOnly;Secure;SameSite=Strict"
    Define dates_user "%{env:zt-cert-date-next},%{env:zt-cert-date-halfnext},%{SSL_CLIENT_S_DN_CN}"
    Header set Set-Cookie "expr=zt-cert=%{sha1:salt1%{env:zt-cert-date-next}sal3%{SSL_CLIENT_S_DN_CN}salt2},${dates_user};${zt-cert}" env=!HAVE_zt-cert-sha1-found
</If>
</If>

SetEnvIfExpr "env('HAVE_zt-cert-date-halfnow') -ge %{TIME} && env('HAVE_zt-cert-sha1')=~/.{40}/" HAVE_zt-cert-sha1-found=1
ั€ะฐะฑะพั‚ะฐะตั‚,

ะฐ ั‚ะฐะบ ั€ะฐะฑะพั‚ะฐั‚ัŒ ะฝะต ะฑัƒะดะตั‚
SetEnvIfExpr "env('HAVE_zt-cert-date-halfnow') -ge  env('zt-cert-date-now') && env('HAVE_zt-cert-sha1')=~/.{40}/" HAVE_zt-cert-sha1-found=1 

เช•เชพเชฐเชฃ เช•เซ‡ LuaHookAccessChecker Nginx เชจเซ€ เช† เชฎเชพเชนเชฟเชคเซ€เชจเชพ เช†เชงเชพเชฐเซ‡ เชเช•เซเชธเซ‡เชธ เชšเซ‡เช• เช•เชฐเซเชฏเชพ เชชเช›เซ€ เชœ เชธเช•เซเชฐเชฟเชฏ เชฅเชถเซ‡.

ZeroTech เชชเชฐ เช…เชฎเซ‡ Apple Safari เช…เชจเซ‡ เช•เซเชฒเชพเชฏเชจเซเชŸ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹เชจเซ‡ เชตเซ‡เชฌเชธเซ‹เช•เซ‡เชŸเซเชธ เชธเชพเชฅเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเซเชฏเชพ

เชธเซเชคเซเชฐเซ‹เชคเชจเซ€ เชฒเชฟเช‚เช• เช›เชฌเซ€.

เชฌเซ€เชœเซ€ เชเช• เชตเชพเชค.

เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, เช…เชชเชพเชšเซ‡ (เช•เชฆเชพเชš Nginx เชชเชฃ) เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชฎเชพเช‚ เชจเชฟเชฐเซเชฆเซ‡เชถเซ‹ เช•เชฏเชพ เช•เซเชฐเชฎเชฎเชพเช‚ เชฒเช–เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชคเซ‡เชจเชพเชฅเซ€ เช•เซ‹เชˆ เชซเชฐเช• เชชเชกเชคเซ‹ เชจเชฅเซ€, เช•เชพเชฐเชฃ เช•เซ‡ เช…เช‚เชคเซ‡ เชฌเชงเซเช‚ เชœ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเซ€ เชตเชฟเชจเช‚เชคเซ€เชจเชพ เช•เซเชฐเชฎเชจเชพ เช†เชงเชพเชฐเซ‡ เชธเซ‰เชฐเซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡, เชœเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชฏเซ‹เชœเชจเชพเชจเซ‡ เช…เชจเซเชฐเซ‚เชช เช›เซ‡. เชฒเซเช† เชธเซเช•เซเชฐเชฟเชชเซเชŸเซ‹.

เชชเซ‚เชฐเซเชฃเชคเชพ:

เช…เชฎเชฒเซ€เช•เชฐเชฃ เชชเช›เซ€ เชฆเซƒเชถเซเชฏเชฎเชพเชจ เชธเซเชฅเชฟเชคเชฟ (เชงเซเชฏเซ‡เชฏ):
เชธเซ‡เชตเชพเช“ เช…เชจเซ‡ เช‡เชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐเชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ IOS เชชเชฐ เชฎเซ‹เชฌเชพเช‡เชฒ เชซเซ‹เชจเชฅเซ€ เชตเชงเชพเชฐเชพเชจเชพ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเซเชธ (VPN) เชตเชฟเชจเชพ เช‰เชชเชฒเชฌเซเชง เช›เซ‡, เชเช•เซ€เช•เซƒเชค เช…เชจเซ‡ เชธเซเชฐเช•เซเชทเชฟเชค.

เชงเซเชฏเซ‡เชฏ เชนเชพเช‚เชธเชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เช›เซ‡, เชตเซ‡เชฌ เชธเซ‹เช•เซ‡เชŸเซเชธ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ€ เชธเซเชฐเช•เซเชทเชพเชจเซเช‚ เชธเซเชคเชฐ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เช•เชฐเชคเชพเช‚ เช“เช›เซเช‚ เชจเชฅเซ€.

ZeroTech เชชเชฐ เช…เชฎเซ‡ Apple Safari เช…เชจเซ‡ เช•เซเชฒเชพเชฏเชจเซเชŸ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹เชจเซ‡ เชตเซ‡เชฌเชธเซ‹เช•เซ‡เชŸเซเชธ เชธเชพเชฅเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเซเชฏเชพ

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹