เดŽเด™เตเด™เดจเต†เดฏเดพเดฃเต เดžเด™เตเด™เตพ ZeroTech-เตฝ Apple Safari, เด•เตเดฒเดฏเดจเตเดฑเต เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเตเด•เตพ เดŽเดจเตเดจเดฟเดต เดตเต†เดฌเตโ€Œเดธเต‹เด•เตเด•เดฑเตเดฑเตเด•เดณเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดšเตเดšเดคเต

เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดตเตผเด•เตเด•เต เดฒเต‡เด–เดจเด‚ เด‰เดชเดฏเต‹เด—เดชเตเดฐเดฆเดฎเดพเด•เตเด‚:

  • เด•เตเดฒเดฏเดจเตเดฑเต เดธเต†เตผเดŸเตเดŸเต เดŽเดจเตเดคเดพเดฃเต†เดจเตเดจเต เด…เดฑเดฟเดฏเตเด•เดฏเตเด‚ เด…เดคเดฟเดจเต เดฎเตŠเดฌเตˆเตฝ เดธเดซเดพเดฐเดฟเดฏเดฟเตฝ เดตเต†เดฌเตโ€Œเดธเต‹เด•เตเด•เดฑเตเดฑเตเด•เตพ เด†เดตเดถเตเดฏเดฎเดพเดฏเดฟ เดตเดฐเตเดจเตเดจเดคเต เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเดพเดฃเต†เดจเตเดจเต เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต;
  • เดชเดฐเดฟเดฎเดฟเดคเดฎเดพเดฏ เด†เดณเตเด•เตพเด•เตเด•เต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดŽเดจเดฟเด•เตเด•เต เดฎเดพเดคเตเดฐเดฎเดพเดฏเดฟ เดตเต†เดฌเต เดธเต‡เดตเดจเด™เตเด™เตพ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเด•เตเด•เดพเตป เดžเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต;
  • เดŽเดฒเตเดฒเดพเด‚ เด‡เดคเดฟเดจเด•เด‚ เด†เดฐเต†เด™เตเด•เดฟเดฒเตเด‚ เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เดจเตเดจเต เด•เดฐเตเดคเตเดจเตเดจเต, เดฒเต‹เด•เดคเตเดคเต† เด•เตเดฑเดšเตเดšเตเด•เต‚เดŸเดฟ เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดตเตเด‚ เดธเตเดฐเด•เตเดทเดฟเดคเดตเตเดฎเดพเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต.

เดตเต†เดฌเตโ€Œเดธเต‹เด•เตเด•เดฑเตเดฑเตเด•เดณเตเดŸเต† เดšเดฐเดฟเดคเตเดฐเด‚ เด†เดฐเด‚เดญเดฟเดšเตเดšเดคเต เดเด•เดฆเต‡เดถเด‚ 8 เดตเตผเดทเด‚ เดฎเตเดฎเตเดชเดพเดฃเต. เดฎเตเดฎเตเดชเต, เดฆเตˆเตผเด˜เตเดฏเดฎเต‡เดฑเดฟเดฏ http เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต† เดฐเต‚เดชเดคเตเดคเดฟเดฒเดพเดฃเต เดฐเต€เดคเดฟเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดฟเดฐเตเดจเตเดจเดคเต (เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดชเตเดฐเดคเดฟเด•เดฐเดฃเด™เตเด™เตพ): เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเตเดฑเต† เดฌเตเดฐเต—เดธเตผ เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เด…เดญเตเดฏเตผเดคเตเดฅเดจ เด…เดฏเดฏเตเด•เตเด•เตเด•เดฏเตเด‚ เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เด‰เดคเตเดคเดฐเด‚ เดจเตฝเด•เตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต, เดชเตเดฐเดคเดฟเด•เดฐเดฃเดคเตเดคเดฟเดจเต เดถเต‡เดทเด‚ เด…เดคเต เดตเต€เดฃเตเดŸเตเด‚ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดšเตเดšเต เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดŽเดจเตเดจเดพเตฝ เดชเดฟเดจเตเดจเต€เดŸเต เดตเต†เดฌเตโ€Œเดธเต‹เด•เตเด•เดฑเตเดฑเตเด•เตพ เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเตเดŸเต.

เดŽเด™เตเด™เดจเต†เดฏเดพเดฃเต เดžเด™เตเด™เตพ ZeroTech-เตฝ Apple Safari, เด•เตเดฒเดฏเดจเตเดฑเต เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเตเด•เตพ เดŽเดจเตเดจเดฟเดต เดตเต†เดฌเตโ€Œเดธเต‹เด•เตเด•เดฑเตเดฑเตเด•เดณเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดšเตเดšเดคเต

เด•เตเดฑเดšเตเดšเต เดตเตผเดทเด™เตเด™เตพเด•เตเด•เต เดฎเตเดฎเตเดชเต, เด‡เดคเต เดฒเดฟเด™เตเด•เต เดฒเต†เดฏเดฑเดพเดฏเดคเดฟเดจเดพเตฝ https เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเดพเดคเตเดค เดถเตเดฆเตเดงเดฎเดพเดฏ PHP-เดฏเดฟเตฝ เดžเด™เตเด™เตพ เดธเตเดตเดจเตเดคเดฎเดพเดฏเดฟ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตฝ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเดšเตเดšเต†เดŸเตเดคเตเดคเต. เด…เดงเดฟเด•เด‚ เดคเดพเดฎเดธเดฟเดฏเดพเดคเต†, เดฎเดฟเด•เตเด•เดตเดพเดฑเตเด‚ เดŽเดฒเตเดฒเดพ เดตเต†เดฌเต เดธเต†เตผเดตเดฑเตเด•เดณเตเด‚ https เดตเดดเดฟ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เดชเตเดฐเต‹เด•เตเดธเดฟ เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เดชเดฟเดจเตเดคเตเดฃ เด•เดฃเด•เตเดทเตป:เด…เดชเตเด—เตเดฐเต‡เดกเต เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เดชเด เดฟเดšเตเดšเต.

เด‡เดคเต เดธเด‚เดญเดตเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดตเต†เดฌเตโ€Œเดธเต‹เด•เตเด•เดฑเตเดฑเตเด•เตพ SPA เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเตเดŸเต† เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟ เดธเต‡เดตเดจเดฎเดพเดฏเดฟ เดฎเดพเดฑเดฟ, เด•เดพเดฐเดฃเด‚ เดธเต†เตผเดตเดฑเดฟเดจเตเดฑเต† เดฎเตเตปเด•เตˆเดฏเดฟเตฝ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต เด‰เดณเตเดณเดŸเด•เตเด•เด‚ เดจเตฝเด•เตเดจเตเดจเดคเต เดŽเดคเตเดฐ เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฃเต (เดฎเดฑเตเดฑเตŠเดฐเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเตฝ เดจเดฟเดจเตเดจเต เด’เดฐเต เดธเดจเตเดฆเต‡เดถเด‚ เด•เตˆเดฎเดพเดฑเตเด• เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด’เดฐเต เดšเดฟเดคเตเดฐเด‚, เดชเตเดฐเดฎเดพเดฃเด‚, เด…เดตเดคเดฐเดฃเด‚ เดŽเดจเตเดจเดฟเดตเดฏเตเดŸเต† เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเต เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเด• เดฎเดฑเตเดฑเตŠเดฐเดพเตพ เดจเดฟเดฒเดตเดฟเตฝ เดŽเดกเดฟเดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต) .

เด•เตเดฒเดฏเดจเตเดฑเต เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเต เดตเดณเดฐเต†เด•เตเด•เดพเดฒเดฎเดพเดฏเดฟ เดจเดฟเดฒเดตเดฟเดฒเตเดฃเตเดŸเต†เด™เตเด•เดฟเดฒเตเด‚, เด…เดคเต เด‡เดชเตเดชเต‹เดดเตเด‚ เดฎเต‹เดถเดฎเดพเดฏเดฟ เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต, เด•เดพเดฐเดฃเด‚ เด…เดคเต เดฎเดฑเดฟเด•เดŸเด•เตเด•เดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เด‡เดคเต เดงเดพเดฐเดพเดณเด‚ เดชเตเดฐเดถเตเดจเด™เตเด™เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต. เด•เต‚เดŸเดพเดคเต† (เด’เดฐเตเดชเด•เตเดทเต‡ :slightly_smiling_face: ) เด…เดคเตเด•เตŠเดฃเตเดŸเดพเดฃเต IOS เดฌเตเดฐเต—เดธเดฑเตเด•เตพ (เดธเดซเดพเดฐเดฟ เด’เดดเดฟเด•เต†เดฏเตเดณเตเดณเดต) เด‡เดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดจเตเด‚ เดชเตเดฐเดพเดฆเต‡เดถเดฟเด• เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเต เดธเตเดฑเตเดฑเต‹เดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เด…เดญเตเดฏเตผเดคเตเดฅเดฟเด•เตเด•เดพเดจเตเด‚ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ. เดฒเต‹เด—เดฟเตป/เดชเดพเดธเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ ssh เด•เต€เด•เตพ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดซเดฏเตผเดตเดพเตพ เดตเดดเดฟ เด†เดตเดถเตเดฏเดฎเดพเดฏ เดชเต‹เตผเดŸเตเดŸเตเด•เตพ เด…เดŸเดฏเตเด•เตเด•เตเดจเตเดจเดคเต เดŽเดจเตเดจเดฟเดตเดฏเตเดฎเดพเดฏเดฟ เดคเดพเดฐเดคเดฎเตเดฏเดชเตเดชเต†เดŸเตเดคเตเดคเตเดฎเตเดชเต‹เตพ เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเตเด•เตพเด•เตเด•เต เดงเดพเดฐเดพเดณเด‚ เด—เตเดฃเด™เตเด™เดณเตเดฃเตเดŸเต. เดŽเดจเตเดจเดพเตฝ เด‡เดคเต เด…เดคเดฒเตเดฒ.

IOS-เตฝ, เด’เดฐเต เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเต เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดจเดŸเดชเดŸเดฟเด•เตเดฐเดฎเด‚ เดตเดณเดฐเต† เดฒเดณเดฟเดคเดฎเดพเดฃเต (เดชเตเดฐเดคเตเดฏเต‡เด•เดคเด•เดณเดฟเดฒเตเดฒเดพเดคเต† เด…เดฒเตเดฒ), เดŽเดจเตเดจเดพเตฝ เดชเตŠเดคเตเดตเต‡ เด‡เดคเต เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เตพเด•เตเด•เดจเตเดธเตƒเดคเดฎเดพเดฏเดพเดฃเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต, เด…เดตเดฏเดฟเตฝ เด‡เดจเตเดฑเตผเดจเต†เดฑเตเดฑเดฟเตฝ เดงเดพเดฐเดพเดณเด‚ เด‰เดฃเตเดŸเต, เด…เดต เดธเดซเดพเดฐเดฟ เดฌเตเดฐเต—เดธเดฑเดฟเดจเต เดฎเดพเดคเตเดฐเด‚ เดฒเดญเตเดฏเดฎเดพเดฃเต. เดจเดฟเตผเดญเดพเด—เตเดฏเดตเดถเดพเตฝ, เดตเต†เดฌเต เดธเต‹เด•เตเด•เดฑเตเดฑเตเด•เตพเด•เตเด•เดพเดฏเดฟ เด•เตเดฒเดฏเดจเตเดฑเต เดธเต†เตผเดŸเตเดŸเต เดŽเด™เตเด™เดจเต† เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดฃเดฎเต†เดจเตเดจเต เดธเดซเดพเดฐเดฟเด•เตเด•เต เด…เดฑเดฟเดฏเดฟเดฒเตเดฒ, เดŽเดจเตเดจเดพเตฝ เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเต เดŽเด™เตเด™เดจเต† เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเต เด‡เตปเดฑเตผเดจเต†เดฑเตเดฑเดฟเตฝ เดจเดฟเดฐเดตเดงเดฟ เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เดณเตเดฃเตเดŸเต, เดชเด•เตเดทเต‡ เดชเตเดฐเดพเดฏเต‹เด—เดฟเด•เดฎเดพเดฏเดฟ เด‡เดคเต เดจเต‡เดŸเดพเดจเดพเดตเดฟเดฒเตเดฒ.

เดŽเด™เตเด™เดจเต†เดฏเดพเดฃเต เดžเด™เตเด™เตพ ZeroTech-เตฝ Apple Safari, เด•เตเดฒเดฏเดจเตเดฑเต เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเตเด•เตพ เดŽเดจเตเดจเดฟเดต เดตเต†เดฌเตโ€Œเดธเต‹เด•เตเด•เดฑเตเดฑเตเด•เดณเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดšเตเดšเดคเต

เดตเต†เดฌเตโ€Œเดธเต‹เด•เตเด•เดฑเตเดฑเตเด•เตพ เดฎเดจเดธเดฟเดฒเดพเด•เตเด•เดพเตป, เดžเด™เตเด™เตพ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดชเตเดฒเดพเตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต: เดชเตเดฐเดถเตเดจเด‚ / เด…เดจเตเดฎเดพเดจเด‚ / เดชเดฐเดฟเดนเดพเดฐเด‚.

เดชเตเดฐเดถเตเดจเด‚: IOS-เดจเตเด‚ เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเต เดชเดฟเดจเตเดคเตเดฃ เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเด•เตเด•เดฟเดฏเดฟเดŸเตเดŸเตเดณเตเดณ เดฎเดฑเตเดฑเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพเด•เตเด•เตเดฎเดพเดฏเดฟ Safari เดฎเตŠเดฌเตˆเตฝ เดฌเตเดฐเต—เดธเดฑเดฟเดฒเต† เด’เดฐเต เด•เตเดฒเดฏเดจเตเดฑเต เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดชเดฐเดฟเดฐเด•เตเดทเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด‰เดฑเดตเดฟเดŸเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เต เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เดชเตเดฐเต‹เด•เตโ€Œเดธเดฟ เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ เดตเต†เดฌเต เดธเต‹เด•เตเด•เดฑเตเดฑเตเด•เตพเด•เตเด•เต เดชเดฟเดจเตเดคเตเดฃเดฏเดฟเดฒเตเดฒ.

เด…เดจเตเดฎเดพเดจเด™เตเด™เตพ:

  1. เด†เดจเตเดคเดฐเดฟเด•/เดฌเดพเดนเตเดฏ เดชเตเดฐเต‹เด•เตโ€Œเดธเดฟเดกเต เดฑเดฟเดธเต‹เดดเตโ€Œเดธเตเด•เดณเตเดŸเต† เดตเต†เดฌเตโ€Œเดธเต‹เด•เตเด•เดฑเตเดฑเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเตเด•เตพ (เด’เดจเตเดจเตเด‚ เด‰เดฃเตเดŸเดพเด•เดฟเดฒเตเดฒเต†เดจเตเดจเต เด…เดฑเดฟเดžเตเดžเตเด•เตŠเดฃเตเดŸเต) เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เด’เดดเดฟเดตเดพเด•เตเด•เตฝ เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเดพเตป เดธเดพเดงเดฟเด•เตเด•เตเด‚.
  2. เดตเต†เดฌเตโ€Œเดธเต‹เด•เตเด•เดฑเตเดฑเตเด•เตพเด•เตเด•เดพเดฏเดฟ, เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ (เดตเต†เดฌเตโ€Œเดธเต‹เด•เตเด•เดฑเตเดฑเต เด‡เดคเดฐ) เดฌเตเดฐเต—เดธเตผ เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเตโ€Œเด•เตเด•เดฟเดŸเต† เดœเดจเดฑเต‡เดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเดจเตเดจ เดคเดพเตฝเด•เตเด•เดพเดฒเดฟเด• เดธเต†เดทเดจเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดฆเตเดตเดฟเดคเต€เดฏเดตเตเด‚ เดธเตเดฐเด•เตเดทเดฟเดคเดตเตเด‚ เดชเตเดฐเดคเดฟเดฐเต‹เดงเดฟเด•เตเด•เดพเดตเตเดจเตเดจเดคเตเดฎเดพเดฏ เด’เดฐเต เด•เดฃเด•เตเดทเตป เด‰เดฃเตเดŸเดพเด•เตเด•เดพเด‚.
  3. เด’เดฐเต เดชเตเดฐเต‹เด•เตเดธเดฟ เดตเต†เดฌเต เดธเต†เตผเดตเตผ (เดฌเดฟเตฝเดฑเตเดฑเต-เด‡เตป เดฎเตŠเดกเตเดฏเต‚เดณเตเด•เดณเตเด‚ เดซเด‚เด—เตเดทเดจเตเด•เดณเตเด‚ เดฎเดพเดคเตเดฐเด‚) เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดคเดพเตฝเด•เตเด•เดพเดฒเดฟเด• เดธเต†เดทเดจเตเด•เตพ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚.
  4. เดฑเต†เดกเดฟเดฎเต†เดฏเตเดกเต เด…เดชเตเดชเดพเดšเตเดšเต† เดฎเตŠเดกเตเดฏเต‚เดณเตเด•เดณเดพเดฏเดฟ เดคเดพเตฝเด•เตเด•เดพเดฒเดฟเด• เดธเต†เดทเตป เดŸเต‹เด•เตเด•เดฃเตเด•เตพ เด‡เดคเดฟเดจเด•เด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต.
  5. เด‡เดจเตเดฑเดฑเดพเด•เตเดทเตป เด˜เดŸเดจ เดฏเตเด•เตเดคเดฟเดธเดนเดฎเดพเดฏเดฟ เดฐเต‚เดชเด•เตฝเดชเตเดชเดจ เดšเต†เดฏเตเดคเตเด•เตŠเดฃเตเดŸเต เดคเดพเตฝเด•เตเด•เดพเดฒเดฟเด• เดธเต†เดทเตป เดŸเต‹เด•เตเด•เดฃเตเด•เตพ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚.

เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฟเดฏ เดถเต‡เดทเด‚ เดฆเตƒเดถเตเดฏเดฎเดพเด•เตเดจเตเดจ เด…เดตเดธเตเดฅ.

เดœเต‹เดฒเดฟเดฏเตเดŸเต† เดฒเด•เตเดทเตเดฏเด‚: เดธเต‡เดตเดจเด™เตเด™เดณเตเดŸเต†เดฏเตเด‚ เด…เดŸเดฟเดธเตเดฅเดพเดจ เดธเต—เด•เดฐเตเดฏเด™เตเด™เดณเตเดŸเต†เดฏเตเด‚ เดฎเดพเดจเต‡เดœเตโ€Œเดฎเต†เดจเตเดฑเต เดเด’เดŽเดธเดฟเตฝ เด’เดฐเต เดฎเตŠเดฌเตˆเตฝ เดซเต‹เดฃเดฟเตฝ เดจเดฟเดจเตเดจเต เด…เดงเดฟเด• เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เดณเดฟเดฒเตเดฒเดพเดคเต† (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 เดชเดฐเดฟเดนเดพเดฐเด™เตเด™เตพ เด‡เดตเดฟเดŸเต† เด•เดฃเตเดŸเต†เดคเตเดคเดฟ:

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 เดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏ เดตเดฟเดตเดฐเด™เตเด™เตพ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ เด•เดพเดฃเดพเด‚: เด…เดชเตเดชเดพเดšเตเดšเต† เดธเต†เตผเดตเตผ เด•เตเดฒเดฏเดจเตเดฑเต เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเต เดชเตเดฐเดพเดฎเดพเดฃเต€เด•เดฐเดฃเด‚

เดฐเดฃเตเดŸเต เด“เดชเตเดทเดจเตเด•เดณเตเด‚ เดชเดฐเต€เด•เตเดทเดฟเดšเตเดšเต, http2 เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เดณเตเดฎเดพเดฏเตเดณเตเดณ เดตเตˆเดตเดฟเดงเตเดฏเดคเตเดคเดฟเดจเตเด‚ เด…เดจเตเดฏเต‹เดœเตเดฏเดคเดฏเตเด•เตเด•เตเด‚ "b" เด“เดชเตเดทเตป เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดคเต.

เดˆ เดธเดฟเดฆเตเดงเดพเดจเตเดคเดคเตเดคเดฟเดจเตเดฑเต† เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฃเด‚ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เดพเตป, เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเดฎเดพเดฏเดฟ เดงเดพเดฐเดพเดณเด‚ เดชเดฐเต€เด•เตเดทเดฃเด™เตเด™เตพ เดจเดŸเดคเตเดคเดฟ; เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดกเดฟเดธเตˆเดจเตเด•เตพ เดชเดฐเต€เด•เตเดทเดฟเดšเตเดšเต:

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 เดธเต†เตผเดตเดฑเดฟเดฒเต† เดŽเด•เตเดธเตเดชเตเดฐเดทเดจเตเด•เตพ เดทเดพ1, %{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 

เด•เดพเดฐเดฃเด‚ Nginx-เตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดˆ เดตเดฟเดตเดฐเด™เตเด™เดณเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเตเดณเตเดณ เด†เด•เตโ€Œเดธเดธเต เดชเดฐเดฟเดถเต‹เดงเดจเด•เตพเด•เตเด•เต เดถเต‡เดทเด‚ เดฎเดพเดคเตเดฐเดฎเต‡ LuaHookAccessChecker เดธเดœเต€เดตเดฎเดพเด•เต‚.

เดŽเด™เตเด™เดจเต†เดฏเดพเดฃเต เดžเด™เตเด™เตพ ZeroTech-เตฝ Apple Safari, เด•เตเดฒเดฏเดจเตเดฑเต เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเตเด•เตพ เดŽเดจเตเดจเดฟเดต เดตเต†เดฌเตโ€Œเดธเต‹เด•เตเด•เดฑเตเดฑเตเด•เดณเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดšเตเดšเดคเต

เด‰เดฑเดตเดฟเดŸเดคเตเดคเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดฒเดฟเด™เตเด•เต เดšเดฟเดคเตเดฐเด‚.

เด’เดฐเต เด•เดพเดฐเตเดฏเด‚ เด•เต‚เดŸเดฟ.

เดชเตŠเดคเตเดตเต‡, เด…เดชเตเดชเดพเดšเตเดšเต† (เด’เดฐเตเดชเด•เตเดทเต‡ Nginx) เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเตฝ เดเดคเต เด•เตเดฐเดฎเดคเตเดคเดฟเดฒเดพเดฃเต เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เตพ เดŽเดดเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดŽเดจเตเดจเดคเต เดชเตเดฐเดถเตเดจเดฎเดฒเตเดฒ, เด•เดพเดฐเดฃเด‚ เด…เดตเดธเดพเดจเด‚ เดŽเดฒเตเดฒเดพเด‚ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเตเดŸเต† เด•เตเดฐเดฎเดคเตเดคเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ เด…เดŸเตเด•เตเด•เตเด‚, เด‡เดคเต เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เดฟเดจเตเดณเตเดณ เดธเตเด•เต€เดฎเตเดฎเดพเดฏเดฟ เดฏเต‹เดœเดฟเด•เตเด•เตเดจเตเดจเต. เดฒเตเดตเดพ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เตพ.

เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฃเด‚:

เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฟเดฏเดคเดฟเดจเต เดถเต‡เดทเด‚ เดฆเตƒเดถเตเดฏเดฎเดพเด•เตเดจเตเดจ เด…เดตเดธเตเดฅ (เดฒเด•เตเดทเตเดฏเด‚):
เด…เดงเดฟเด• เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เดณเดฟเดฒเตเดฒเดพเดคเต† (VPN), เดเด•เต€เด•เตƒเดคเดตเตเด‚ เดธเตเดฐเด•เตเดทเดฟเดคเดตเตเดฎเดพเดฏ IOS-เตฝ เด’เดฐเต เดฎเตŠเดฌเตˆเตฝ เดซเต‹เดฃเดฟเตฝ เดจเดฟเดจเตเดจเต เดธเต‡เดตเดจเด™เตเด™เดณเตเดŸเต†เดฏเตเด‚ เด…เดŸเดฟเดธเตเดฅเดพเดจ เดธเต—เด•เดฐเตเดฏเด™เตเด™เดณเตเดŸเต†เดฏเตเด‚ เดฎเดพเดจเต‡เดœเตเดฎเต†เดจเตเดฑเต เดฒเดญเตเดฏเดฎเดพเดฃเต.

เดฒเด•เตเดทเตเดฏเด‚ เด•เตˆเดตเดฐเดฟเดšเตเดšเต, เดตเต†เดฌเต เดธเต‹เด•เตเด•เดฑเตเดฑเตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เด’เดฐเต เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเดฟเตฝ เด•เตเดฑเดฏเดพเดคเตเดค เดธเตเดฐเด•เตเดทเดฏเตเด‚ เด‰เดฃเตเดŸเต.

เดŽเด™เตเด™เดจเต†เดฏเดพเดฃเต เดžเด™เตเด™เตพ ZeroTech-เตฝ Apple Safari, เด•เตเดฒเดฏเดจเตเดฑเต เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเตเด•เตพ เดŽเดจเตเดจเดฟเดต เดตเต†เดฌเตโ€Œเดธเต‹เด•เตเด•เดฑเตเดฑเตเด•เดณเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดšเตเดšเดคเต

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•