เจ…เจธเฉ€เจ‚ ZeroTech 'เจคเฉ‡ Apple Safari เจ…เจคเฉ‡ เจ•เจฒเจพเจ‡เฉฐเจŸ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸเจพเจ‚ เจจเฉ‚เฉฐ เจตเฉˆเจฌเจธเจพเจ•เฉ‡เจŸ เจจเจพเจฒ เจ•เจฟเจตเฉ‡เจ‚ เจ•เจจเฉˆเจ•เจŸ เจ•เฉ€เจคเจพ

เจฒเฉ‡เจ– เจ‰เจนเจจเจพเจ‚ เจฒเจˆ เจฒเจพเจญเจฆเจพเจ‡เจ• เจนเฉ‹เจตเฉ‡เจ—เจพ เจœเฉ‹:

  • เจ‡เจน เจœเจพเจฃเจฆเจพ เจนเฉˆ เจ•เจฟ เจ•เจฒเจพเจ‡เฉฐเจŸ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจ•เฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจธเจฎเจเจฆเจพ เจนเฉˆ เจ•เจฟ เจ‡เจธเจจเฉ‚เฉฐ เจฎเฉ‹เจฌเจพเจˆเจฒ เจธเจซเจพเจฐเฉ€ 'เจคเฉ‡ เจตเฉˆเจฌเจธเจพเจ•เจŸ เจฆเฉ€ เจฒเฉ‹เฉœ เจ•เจฟเจ‰เจ‚ เจนเฉˆ;
  • เจฎเฉˆเจ‚ เจตเฉˆเจฌ เจธเฉ‡เจตเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจฒเฉ‹เจ•เจพเจ‚ เจฆเฉ‡ เจ‡เฉฑเจ• เจธเฉ€เจฎเจค เจฆเจพเจ‡เจฐเฉ‡ เจœเจพเจ‚ เจธเจฟเจฐเจซเจผ เจ†เจชเจฃเฉ‡ เจฒเจˆ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐเจจเจพ เจšเจพเจนเจพเจ‚เจ—เจพ;
  • เจธเฉ‹เจšเจฆเจพ เจนเฉˆ เจ•เจฟ เจธเจญ เจ•เฉเจ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ•เจฟเจธเฉ‡ เจฆเฉเจ†เจฐเจพ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ, เจ…เจคเฉ‡ เจธเฉฐเจธเจพเจฐ เจจเฉ‚เฉฐ เจฅเฉ‹เฉœเจพ เจนเฉ‹เจฐ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจ…เจคเฉ‡ เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจฌเจฃเจพเจ‰เจฃเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจนเฉˆ.

เจตเฉˆเจฌเจธเจพเจ•เฉ‡เจŸ เจฆเจพ เจ‡เจคเจฟเจนเจพเจธ เจฒเจ—เจญเจ— 8 เจธเจพเจฒ เจชเจนเจฟเจฒเจพเจ‚ เจธเจผเฉเจฐเฉ‚ เจนเฉ‹เจ‡เจ† เจธเฉ€เฅค เจชเจนเจฟเจฒเจพเจ‚, เจฒเฉฐเจฌเฉ‡ HTTP เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ (เจ…เจธเจฒ เจตเจฟเฉฑเจš เจœเจตเจพเจฌเจพเจ‚) เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจตเจฟเจงเฉ€เจ†เจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจธเฉ€: เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฆเฉ‡ เจฌเฉเจฐเจพเจ‰เจœเจผเจฐ เจจเฉ‡ เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจฌเฉ‡เจจเจคเฉ€ เจญเฉ‡เจœเฉ€ เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ‡ เจ•เฉเจ เจœเจตเจพเจฌ เจฆเฉ‡เจฃ เจฆเฉ€ เจ‰เจกเฉ€เจ• เจ•เฉ€เจคเฉ€, เจœเจตเจพเจฌ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจ‡เจน เจฆเฉเจฌเจพเจฐเจพ เจœเฉเฉœเจฟเจ† เจ…เจคเฉ‡ เจ‰เจกเฉ€เจ• เจ•เฉ€เจคเฉ€เฅค เจชเจฐ เจซเจฟเจฐ เจตเฉˆเจฌเจธเจพเจ•เฉ‡เจŸ เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฑเจคเฉ‡.

เจ…เจธเฉ€เจ‚ ZeroTech 'เจคเฉ‡ Apple Safari เจ…เจคเฉ‡ เจ•เจฒเจพเจ‡เฉฐเจŸ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸเจพเจ‚ เจจเฉ‚เฉฐ เจตเฉˆเจฌเจธเจพเจ•เฉ‡เจŸ เจจเจพเจฒ เจ•เจฟเจตเฉ‡เจ‚ เจ•เจจเฉˆเจ•เจŸ เจ•เฉ€เจคเจพ

เจ•เฉเจ เจธเจพเจฒ เจชเจนเจฟเจฒเจพเจ‚, เจ…เจธเฉ€เจ‚ เจธเจผเฉเฉฑเจง PHP เจตเจฟเฉฑเจš เจ†เจชเจฃเจพ เจ–เฉเจฆ เจฆเจพ เจฒเจพเจ—เฉ‚เจ•เจฐเจจ เจตเจฟเจ•เจธเจฟเจค เจ•เฉ€เจคเจพ เจนเฉˆ, เจœเฉ‹ เจ•เจฟ https เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจจเจนเฉ€เจ‚ เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจน เจฒเจฟเฉฐเจ• เจฒเฉ‡เจ…เจฐ เจนเฉˆเฅค เจ•เฉเจ เจธเจฎเจพเจ‚ เจชเจนเจฟเจฒเจพเจ‚, เจฒเจ—เจญเจ— เจธเจพเจฐเฉ‡ เจตเฉˆเจฌ เจธเจฐเจตเจฐเจพเจ‚ เจจเฉ‡ https เจ…เจคเฉ‡ เจธเจนเจพเจ‡เจคเจพ เจ•เฉเจจเฉˆเจ•เจธเจผเจจ: เจ…เฉฑเจชเจ—เฉเจฐเฉ‡เจก 'เจคเฉ‡ เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจธเจฟเฉฑเจ– เจฒเจˆเจ†เจ‚ เจนเจจเฅค

เจœเจฆเฉ‹เจ‚ เจ‡เจน เจตเจพเจชเจฐเจฟเจ†, เจตเฉˆเจฌเจธเจพเจ•เฉ‡เจŸ เจเจธเจชเฉ€เจ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจฒเจˆ เจฒเจ—เจญเจ— เจกเจฟเจซเฉŒเจฒเจŸ เจธเฉ‡เจตเจพ เจฌเจฃ เจ—เจˆ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจธเจฐเจตเจฐ เจฆเฉ€ เจชเจนเจฟเจฒเจ•เจฆเจฎเฉ€ 'เจคเฉ‡ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจจเฉ‚เฉฐ เจธเจฎเฉฑเจ—เจฐเฉ€ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจเจพ เจ•เจฟเฉฐเจจเจพ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจนเฉˆ (เจ•เจฟเจธเฉ‡ เจนเฉ‹เจฐ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจคเฉ‹เจ‚ เจธเฉเจจเฉ‡เจนเจพ เจญเฉ‡เจœเจฃเจพ เจœเจพเจ‚ เจšเจฟเฉฑเจคเจฐ, เจฆเจธเจคเจพเจตเฉ‡เจœเจผ, เจชเฉ‡เจธเจผเจ•เจพเจฐเฉ€ เจฆเจพ เจจเจตเจพเจ‚ เจธเฉฐเจธเจ•เจฐเจฃ เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เจฐเจจเจพ เจ•เจฟ เจ•เฉ‹เจˆ เจนเฉ‹เจฐ เจ‡เจธ เจตเฉ‡เจฒเฉ‡ เจธเฉฐเจชเจพเจฆเจจ เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ)เฅค

เจนเจพเจฒเจพเจ‚เจ•เจฟ เจ•เจฒเจพเจ‡เฉฐเจŸ เจชเฉเจฐเจฎเจพเจฃ-เจชเฉฑเจคเจฐ เจ•เจพเจซเจผเฉ€ เจธเจฎเฉ‡เจ‚ เจคเฉ‹เจ‚ เจ†เจฒเฉ‡-เจฆเฉเจ†เจฒเฉ‡ เจนเฉˆ, เจ‡เจน เจ…เจœเฉ‡ เจตเฉ€ เจฎเจพเฉœเจพ เจธเจนเจฟเจฏเฉ‹เจ—เฉ€ เจฌเจฃเจฟเจ† เจนเฉ‹เจ‡เจ† เจนเฉˆ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจน เจ‡เจธ เจจเฉ‚เฉฐ เจฌเจพเจˆเจชเจพเจธ เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจชเฉˆเจฆเจพ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจ…เจคเฉ‡ (เจธเฉฐเจญเจต เจคเฉŒเจฐ 'เจคเฉ‡ :slightly_smiling_face: ) เจ‡เจธ เจฒเจˆ IOS เจฌเฉเจฐเจพเจŠเจœเจผเจฐ (เจธเจซเจพเจฐเฉ€ เจจเฉ‚เฉฐ เจ›เฉฑเจก เจ•เฉ‡ เจธเจพเจฐเฉ‡) เจ‡เจธเจจเฉ‚เฉฐ เจตเจฐเจคเจฃเจพ เจจเจนเฉ€เจ‚ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจจ เจ…เจคเฉ‡ เจธเจฅเจพเจจเจ• เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจธเจŸเฉ‹เจฐ เจคเฉ‹เจ‚ เจ‡เจธเจฆเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจฒเฉŒเจ—เจ‡เจจ/เจชเจพเจธ เจœเจพเจ‚ ssh เจ•เฉเฉฐเจœเฉ€เจ†เจ‚ เจœเจพเจ‚ เจซเจพเจ‡เจฐเจตเจพเจฒ เจฐเจพเจนเฉ€เจ‚ เจœเจผเจฐเฉ‚เจฐเฉ€ เจชเฉ‹เจฐเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจฌเฉฐเจฆ เจ•เจฐเจจ เจฆเฉ‡ เจฎเฉเจ•เจพเจฌเจฒเฉ‡ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸเจพเจ‚ เจฆเฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจซเจพเจ‡เจฆเฉ‡ เจนเจจเฅค เจชเจฐ เจ‡เจน เจ‡เจธ เจฌเจพเจฐเฉ‡ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค

เจ†เจˆเจ“เจเจธ 'เจคเฉ‡, เจ‡เฉฑเจ• เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจฆเฉ€ เจตเจฟเจงเฉ€ เจ•เจพเจซเจผเฉ€ เจธเจฐเจฒ เจนเฉˆ (เจฌเจฟเจจเจพเจ‚ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจฆเฉ‡ เจจเจนเฉ€เจ‚), เจชเจฐ เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจ‡เจน เจจเจฟเจฐเจฆเฉ‡เจธเจผเจพเจ‚ เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, เจœเจฟเจธ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจ‡เฉฐเจŸเจฐเจจเฉˆเจŸ เจคเฉ‡ เจนเจจ เจ…เจคเฉ‡ เจœเฉ‹ เจธเจฟเจฐเจซ เจธเจซเจพเจฐเฉ€ เจฌเฉเจฐเจพเจŠเจœเจผเจฐ เจฒเจˆ เจ‰เจชเจฒเจฌเจง เจนเจจ. เจฌเจฆเจ•เจฟเจธเจฎเจคเฉ€ เจจเจพเจฒ, Safari เจจเฉ‚เฉฐ เจ‡เจน เจจเจนเฉ€เจ‚ เจชเจคเจพ เจ•เจฟ เจตเฉˆเฉฑเจฌ เจธเจพเจ•เจŸเจพเจ‚ เจฒเจˆ เจ•เจฒเจพเจ‡เฉฐเจŸ ะกert เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐเจจเฉ€ เจนเฉˆ, เจชเจฐ เจ‡เฉฐเจŸเจฐเจจเฉˆเฉฑเจŸ 'เจคเฉ‡ เจ…เจœเจฟเจนเฉ‡ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจ•เจฟเจตเฉ‡เจ‚ เจฌเจฃเจพเจ‰เจฃเฉ‡ เจนเจจ, เจ‡เจธ เจฌเจพเจฐเฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจนเจฆเจพเจ‡เจคเจพเจ‚ เจนเจจ, เจชเจฐ เจ…เจญเจฟเจ†เจธ เจตเจฟเฉฑเจš เจ‡เจน เจชเจนเฉเฉฐเจš เจคเฉ‹เจ‚ เจฌเจพเจนเจฐ เจนเฉˆเฅค

เจ…เจธเฉ€เจ‚ ZeroTech 'เจคเฉ‡ Apple Safari เจ…เจคเฉ‡ เจ•เจฒเจพเจ‡เฉฐเจŸ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸเจพเจ‚ เจจเฉ‚เฉฐ เจตเฉˆเจฌเจธเจพเจ•เฉ‡เจŸ เจจเจพเจฒ เจ•เจฟเจตเฉ‡เจ‚ เจ•เจจเฉˆเจ•เจŸ เจ•เฉ€เจคเจพ

เจตเฉˆเฉฑเจฌเจธเจพเจ•เฉ‡เจŸเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฎเจเจฃ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจนเฉ‡เจ  เจฆเจฟเฉฑเจคเฉ€ เจฏเฉ‹เจœเจจเจพ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€: เจธเจฎเฉฑเจธเจฟเจ†/เจ•เจฒเจชเจจเจพ/เจนเฉฑเจฒเฅค

เจธเจฎเฉฑเจธเจฟเจ†: เจ†เจˆเจ“เจเจธ เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจฒเจˆ เจธเจซเจพเจฐเฉ€ เจฎเฉ‹เจฌเจพเจˆเจฒ เจฌเฉเจฐเจพเจŠเจœเจผเจฐ 'เจคเฉ‡ เจ‡เฉฑเจ• เจ•เจฒเจพเจ‡เฉฐเจŸ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจฆเฉเจ†เจฐเจพ เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจ•เฉ€เจคเฉ‡ เจธเจฐเฉ‹เจคเจพเจ‚ เจฒเจˆ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡ เจตเฉˆเจฌ เจธเจพเจ•เจŸเจพเจ‚ เจฒเจˆ เจ•เฉ‹เจˆ เจธเจฎเจฐเจฅเจจ เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจœเจฟเจจเฉเจนเจพเจ‚ เจจเฉ‡ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจธเจนเจพเจ‡เจคเจพ เจจเฉ‚เฉฐ เจธเจฎเจฐเฉฑเจฅ เจฌเจฃเจพเจ‡เจ† เจนเฉˆเฅค

เจ•เจฒเจชเจจเจพ:

  1. เจ…เจœเจฟเจนเฉ‡ เจ…เจชเจตเจพเจฆ เจจเฉ‚เฉฐ เจ…เฉฐเจฆเจฐเฉ‚เจจเฉ€/เจฌเจพเจนเจฐเฉ€ เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจธเจฐเฉ‹เจคเจพเจ‚ เจฆเฉ‡ เจตเฉˆเจฌเจธเจพเจ•เจŸเจพเจ‚ เจฒเจˆ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ (เจ‡เจน เจœเจพเจฃเจฆเฉ‡ เจนเฉ‹เจ เจ•เจฟ เจ•เฉ‹เจˆ เจจเจนเฉ€เจ‚ เจนเฉ‹เจตเฉ‡เจ—เจพ) เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฒเจˆ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐเจจเจพ เจธเฉฐเจญเจต เจนเฉˆเฅค
  2. เจตเฉˆเจฌเจธเจพเจ•เฉ‡เจŸ เจฒเจˆ, เจคเฉเจธเฉ€เจ‚ เจ…เจธเจฅเจพเจˆ เจธเฉˆเจธเจผเจจเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ‡เฉฑเจ• เจตเจฟเจฒเฉฑเจ–เจฃ, เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจ…เจคเฉ‡ เจฌเจšเจพเจ…เจฏเฉ‹เจ— เจ•เจจเฉˆเจ•เจธเจผเจจ เจฌเจฃเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจœเฉ‹ เจ‡เฉฑเจ• เจ†เจฎ (เจ—เฉˆเจฐ-เจตเฉˆเจฌเจธเจพเจ•เฉ‡เจŸ) เจฌเฉเจฐเจพเจŠเจœเจผเจฐ เจฌเฉ‡เจจเจคเฉ€ เจฆเฉ‡ เจฆเฉŒเจฐเจพเจจ เจ‰เจคเจชเฉฐเจจ เจนเฉเฉฐเจฆเฉ‡ เจนเจจเฅค
  3. เจ…เจธเจฅเจพเจˆ เจธเฉˆเจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจตเฉˆเฉฑเจฌ เจธเจฐเจตเจฐ (เจธเจฟเจฐเจซเจผ เจฌเจฟเจฒเจŸ-เจ‡เจจ เจฎเฉ‹เจกเจฟเจŠเจฒ เจ…เจคเฉ‡ เจซเฉฐเจ•เจธเจผเจจเจพเจ‚) เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค
  4. เจ…เจธเจฅเจพเจˆ เจธเฉˆเจธเจผเจจ เจŸเฉ‹เจ•เจจ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเฉ‡ เจ…เจชเจพเจšเฉ‡ เจฎเฉ‹เจกเฉ€เจŠเจฒ เจตเจœเฉ‹เจ‚ เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเฉ‡ เจœเจพ เจšเฉเฉฑเจ•เฉ‡ เจนเจจเฅค
  5. เจ…เจธเจฅเจพเจˆ เจธเฉˆเจธเจผเจจ เจŸเฉ‹เจ•เจจเจพเจ‚ เจจเฉ‚เฉฐ เจคเจพเจฐเจ•เจฟเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจ‡เฉฐเจŸเจฐเฉˆเจ•เจธเจผเจจ เจขเจพเจ‚เจšเฉ‡ เจจเฉ‚เฉฐ เจกเจฟเจœเจผเจพเจˆเจจ เจ•เจฐเจ•เฉ‡ เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจฒเจพเจ—เฉ‚ เจนเฉ‹เจฃ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจฃ เจตเจพเจฒเฉ€ เจธเจฅเจฟเจคเฉ€เฅค

เจ‰เจฆเฉ‡เจธเจผ: เจธเฉ‡เจตเจพเจตเจพเจ‚ เจ…เจคเฉ‡ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจขเจพเจ‚เจšเฉ‡ เจฆเจพ เจชเฉเจฐเจฌเฉฐเจงเจจ เจฌเจฟเจจเจพเจ‚ เจตเจพเจงเฉ‚ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจพเจ‚ (เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ VPN), เจฏเฉ‚เจจเฉ€เจซเจพเจˆเจก เจ…เจคเฉ‡ เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค IOS 'เจคเฉ‡ เจฎเฉ‹เจฌเจพเจˆเจฒ เจซเจผเฉ‹เจจ เจคเฉ‹เจ‚ เจชเจนเฉเฉฐเจšเจฏเฉ‹เจ— เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค

เจตเจพเจงเฉ‚ เจŸเฉ€เจšเจพ: เจฎเฉ‹เจฌเจพเจˆเจฒ เจ‡เฉฐเจŸเจฐเจจเฉˆเฉฑเจŸ 'เจคเฉ‡ เจธเจฎเฉฑเจ—เจฐเฉ€ เจฆเฉ€ เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ เจกเจฟเจฒเฉ€เจตเจฐเฉ€ เจฆเฉ‡ เจจเจพเจฒ เจธเจฎเฉ‡เจ‚ เจ…เจคเฉ‡ เจธเจฐเฉ‹เจคเจพเจ‚/เจซเจผเฉ‹เจจ เจŸเฉเจฐเฉˆเจซเจฟเจ• เจฆเฉ€ เจฌเจšเจค (เจตเฉˆเฉฑเจฌ เจธเจพเจ•เจŸเจพเจ‚ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚ เจ•เฉเจ เจธเฉ‡เจตเจพเจตเจพเจ‚ เจฌเฉ‡เจฒเฉ‹เฉœเฉ€ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจชเฉˆเจฆเจพ เจ•เจฐเจฆเฉ€เจ†เจ‚ เจนเจจ)เฅค

เจ•เจฟเจตเฉ‡เจ‚ เจšเฉˆเฉฑเจ• เจ•เจฐเจจเจพ เจนเฉˆ?

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 เจนเฉฑเจฒ เจฒเฉฑเจญเฉ‡ เจ—เจ เจนเจจ:

a) เจชเฉฑเจงเจฐ 'เจคเฉ‡

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

เจชเจนเฉเฉฐเจš เจชเฉฑเจงเจฐ เจฌเจฆเจฒเฉ‹.

เจ‡เจธ เจตเจฟเจงเฉ€ เจตเจฟเฉฑเจš เจนเฉ‡เจ  เจฒเจฟเจ–เฉ€เจ†เจ‚ เจธเฉ‚เจ–เจฎเจคเจพเจตเจพเจ‚ เจนเจจ:

  • เจชเฉเจฐเจฎเจพเจฃ-เจชเฉฑเจคเจฐ เจคเจธเจฆเฉ€เจ• เจชเฉเจฐเฉŒเจ•เจธเฉ€เจก เจธเจฐเฉ‹เจค เจฒเจˆ เจฌเฉ‡เจจเจคเฉ€ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจฏเจพเจจเฉ€ เจชเฉ‹เจธเจŸ เจฌเฉ‡เจจเจคเฉ€ เจนเฉˆเจ‚เจกเจธเจผเฉ‡เจ•เฅค เจ‡เจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉˆ เจ•เจฟ เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจชเจนเจฟเจฒเจพเจ‚ เจฒเฉ‹เจก เจ•เจฐเฉ‡เจ—เฉ€ เจ…เจคเฉ‡ เจซเจฟเจฐ เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจธเฉ‡เจตเจพ เจฒเจˆ เจฌเฉ‡เจจเจคเฉ€ เจจเฉ‚เฉฐ เจ•เฉฑเจŸ เจฆเฉ‡เจตเฉ‡เจ—เฉ€เฅค เจ‡เจน เจฌเฉเจฐเจพ เจนเฉˆ, เจชเจฐ เจจเจพเจœเจผเฉเจ• เจจเจนเฉ€เจ‚ เจนเฉˆ;
  • http2 เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจตเจฟเฉฑเจš. เจ‡เจน เจ…เจœเฉ‡ เจตเฉ€ เจกเจฐเจพเจซเจŸ เจตเจฟเฉฑเจš เจนเฉˆ, เจ…เจคเฉ‡ เจฌเฉเจฐเจพเจŠเจœเจผเจฐ เจจเจฟเจฐเจฎเจพเจคเจพ เจจเจนเฉ€เจ‚ เจœเจพเจฃเจฆเฉ‡ เจ•เจฟ เจ‡เจธเจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจเจพ เจนเฉˆ #info about 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 เจฌเจพเจฐเฉ‡ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš เจชเจพเจˆ เจœเจพ เจธเจ•เจฆเฉ€ เจนเฉˆ: เจ…เจชเจพเจšเฉ‡ เจธเจฐเจตเจฐ เจ•เจฒเจพเจ‡เฉฐเจŸ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจชเฉเจฐเจฎเจพเจฃเฉ€เจ•เจฐเจจ

เจฆเฉ‹เจตเจพเจ‚ เจตเจฟเจ•เจฒเจชเจพเจ‚ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจ—เจˆ, เจตเจฟเจ•เจฒเจช "b" เจจเฉ‚เฉฐ เจ‡เจธเจฆเฉ€ เจฌเจนเฉเจชเฉฑเจ–เฉ€เจคเจพ เจ…เจคเฉ‡ http2 เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจจเจพเจฒ เจ…เจจเฉเจ•เฉ‚เจฒเจคเจพ เจฒเจˆ เจšเฉเจฃเจฟเจ† เจ—เจฟเจ† เจธเฉ€เฅค

เจ‡เจธ เจชเจฐเจฟเจ•เจฒเจชเจจเจพ เจฆเฉ€ เจคเจธเจฆเฉ€เจ• เจจเฉ‚เฉฐ เจชเฉ‚เจฐเจพ เจ•เจฐเจจ เจฒเจˆ, เจ‡เจธ เจจเฉ‡ เจธเฉฐเจฐเจšเจจเจพ เจฆเฉ‡ เจจเจพเจฒ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจชเฉเจฐเจฏเฉ‹เจ— เจ•เฉ€เจคเฉ‡; เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจกเจฟเจœเจผเจพเจˆเจจ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจ—เจˆ:

if = เจฒเฉ‹เฉœ = เจฎเฉเฉœ เจฒเจฟเจ–เฉ‹

เจจเจคเฉ€เจœเจพ เจนเฉ‡เจ  เจฆเจฟเฉฑเจคเฉ‡ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจกเจฟเจœเจผเจพเจˆเจจ เจนเฉˆ:

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}

เจคเฉเจธเฉ€เจ‚ เจธเจฟเจฐเจซเจผ เจฆเฉ‹ เจจเฉฐเจฌเจฐเจพเจ‚ เจฆเฉ€ เจคเฉเจฒเจจเจพ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

เจธเจซเจพเจฐเฉ€ เจธเจฎเฉฑเจธเจฟเจ† เจฒเจˆ เจนเฉฑเจฒ เจฒเฉฑเจญเจฆเฉ‡ เจนเฉ‹เจ, เจฎเฉˆเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจฆเจฟเจฒเจšเจธเจช เจฒเฉ‡เจ– เจฎเจฟเจฒเจฟเจ†: เจ•เจฒเจพเจ‡เฉฐเจŸ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจจเจพเจฒ เจนเฉ‹เจฎ เจ…เจธเจฟเจธเจŸเฉˆเจ‚เจŸ เจจเฉ‚เฉฐ เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจ•เจฐเจจเจพ (เจธเจซเจพเจฐเฉ€/เจ†เจˆเจ“เจเจธ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ)
เจ‡เจน 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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹