เดเดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดตเตผเดเตเดเต เดฒเตเดเดจเด เดเดชเดฏเตเดเดชเตเดฐเดฆเดฎเดพเดเตเด:
- เดเตเดฒเดฏเดจเตเดฑเต เดธเตเตผเดเตเดเต เดเดจเตเดคเดพเดฃเตเดจเตเดจเต เด เดฑเดฟเดฏเตเดเดฏเตเด เด เดคเดฟเดจเต เดฎเตเดฌเตเตฝ เดธเดซเดพเดฐเดฟเดฏเดฟเตฝ เดตเตเดฌเตโเดธเตเดเตเดเดฑเตเดฑเตเดเตพ เดเดตเดถเตเดฏเดฎเดพเดฏเดฟ เดตเดฐเตเดจเตเดจเดคเต เดเดจเตเดคเตเดเตเดฃเตเดเดพเดฃเตเดจเตเดจเต เดฎเดจเดธเตเดธเดฟเดฒเดพเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต;
- เดชเดฐเดฟเดฎเดฟเดคเดฎเดพเดฏ เดเดณเตเดเตพเดเตเดเต เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เดเดจเดฟเดเตเดเต เดฎเดพเดคเตเดฐเดฎเดพเดฏเดฟ เดตเตเดฌเต เดธเตเดตเดจเดเตเดเตพ เดชเตเดฐเดธเดฟเดฆเตเดงเตเดเดฐเดฟเดเตเดเดพเตป เดเดพเตป เดเดเตเดฐเดนเดฟเดเตเดเตเดจเตเดจเต;
- เดเดฒเตเดฒเดพเด เดเดคเดฟเดจเดเด เดเดฐเตเดเตเดเดฟเดฒเตเด เดเตเดฏเตเดคเดฟเดเตเดเตเดฃเตเดเตเดจเตเดจเต เดเดฐเตเดคเตเดจเตเดจเต, เดฒเตเดเดคเตเดคเต เดเตเดฑเดเตเดเตเดเตเดเดฟ เดธเตเดเดฐเตเดฏเดชเตเดฐเดฆเดตเตเด เดธเตเดฐเดเตเดทเดฟเดคเดตเตเดฎเดพเดเตเดเดพเตป เดเดเตเดฐเดนเดฟเดเตเดเตเดจเตเดจเต.
เดตเตเดฌเตโเดธเตเดเตเดเดฑเตเดฑเตเดเดณเตเดเต เดเดฐเดฟเดคเตเดฐเด เดเดฐเดเดญเดฟเดเตเดเดคเต เดเดเดฆเตเดถเด 8 เดตเตผเดทเด เดฎเตเดฎเตเดชเดพเดฃเต. เดฎเตเดฎเตเดชเต, เดฆเตเตผเดเตเดฏเดฎเตเดฑเดฟเดฏ http เด
เดญเตเดฏเตผเดคเตเดฅเดจเดเดณเตเดเต เดฐเตเดชเดคเตเดคเดฟเดฒเดพเดฃเต เดฐเตเดคเดฟเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเดฟเดฐเตเดจเตเดจเดคเต (เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดชเตเดฐเดคเดฟเดเดฐเดฃเดเตเดเตพ): เดเดชเดฏเตเดเตเดคเดพเดตเดฟเดจเตเดฑเต เดฌเตเดฐเตเดธเตผ เดธเตเตผเดตเดฑเดฟเดฒเตเดเตเดเต เดเดฐเต เด
เดญเตเดฏเตผเดคเตเดฅเดจ เด
เดฏเดฏเตเดเตเดเตเดเดฏเตเด เดเดจเตเดคเตเดเตเดเดฟเดฒเตเด เดเดคเตเดคเดฐเด เดจเตฝเดเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดเดพเดคเตเดคเดฟเดฐเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดคเต, เดชเตเดฐเดคเดฟเดเดฐเดฃเดคเตเดคเดฟเดจเต เดถเตเดทเด เด
เดคเต เดตเตเดฃเตเดเตเด เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดเตเดเต เดเดพเดคเตเดคเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต. เดเดจเตเดจเดพเตฝ เดชเดฟเดจเตเดจเตเดเต เดตเตเดฌเตโเดธเตเดเตเดเดฑเตเดฑเตเดเตพ เดชเตเดฐเดคเตเดฏเดเตเดทเดชเตเดชเตเดเตเดเต.
เดเตเดฑเดเตเดเต เดตเตผเดทเดเตเดเตพเดเตเดเต เดฎเตเดฎเตเดชเต, เดเดคเต เดฒเดฟเดเตเดเต เดฒเตเดฏเดฑเดพเดฏเดคเดฟเดจเดพเตฝ https เด
เดญเตเดฏเตผเดคเตเดฅเดจเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเดพเดคเตเดค เดถเตเดฆเตเดงเดฎเดพเดฏ PHP-เดฏเดฟเตฝ เดเดเตเดเตพ เดธเตเดตเดจเตเดคเดฎเดพเดฏเดฟ เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเตฝ เดตเดฟเดเดธเดฟเดชเตเดชเดฟเดเตเดเตเดเตเดคเตเดคเต. เด
เดงเดฟเดเด เดคเดพเดฎเดธเดฟเดฏเดพเดคเต, เดฎเดฟเดเตเดเดตเดพเดฑเตเด เดเดฒเตเดฒเดพ เดตเตเดฌเต เดธเตเตผเดตเดฑเตเดเดณเตเด https เดตเดดเดฟ เด
เดญเตเดฏเตผเดคเตเดฅเดจเดเตพ เดชเตเดฐเตเดเตเดธเดฟ เดเตเดฏเตเดฏเดพเดจเตเด เดชเดฟเดจเตเดคเตเดฃ เดเดฃเดเตเดทเตป:เด
เดชเตเดเตเดฐเตเดกเต เดเตเดฏเตเดฏเดพเดจเตเด เดชเด เดฟเดเตเดเต.
เดเดคเต เดธเดเดญเดตเดฟเดเตเดเตเดฎเตเดชเตเตพ, เดตเตเดฌเตโเดธเตเดเตเดเดฑเตเดฑเตเดเตพ SPA เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเตเดเดณเตเดเต เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟ เดธเตเดตเดจเดฎเดพเดฏเดฟ เดฎเดพเดฑเดฟ, เดเดพเดฐเดฃเด เดธเตเตผเดตเดฑเดฟเดจเตเดฑเต เดฎเตเตปเดเตเดฏเดฟเตฝ เดเดชเดฏเตเดเตเดคเดพเดตเดฟเดจเต เดเดณเตเดณเดเดเตเดเด เดจเตฝเดเตเดจเตเดจเดคเต เดเดคเตเดฐ เดธเตเดเดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฃเต (เดฎเดฑเตเดฑเตเดฐเต เดเดชเดฏเตเดเตเดคเดพเดตเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดฐเต เดธเดจเตเดฆเตเดถเด เดเตเดฎเดพเดฑเตเด เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เดเดฐเต เดเดฟเดคเตเดฐเด, เดชเตเดฐเดฎเดพเดฃเด, เด เดตเดคเดฐเดฃเด เดเดจเตเดจเดฟเดตเดฏเตเดเต เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเต เดกเตเตบเดฒเตเดกเต เดเตเดฏเตเดฏเตเด เดฎเดฑเตเดฑเตเดฐเดพเตพ เดจเดฟเดฒเดตเดฟเตฝ เดเดกเดฟเดฑเตเดฑเต เดเตเดฏเตเดฏเตเดจเตเดจเต) .
เดเตเดฒเดฏเดจเตเดฑเต เดธเตผเดเตเดเดฟเดซเดฟเดเตเดเดฑเตเดฑเต เดตเดณเดฐเตเดเตเดเดพเดฒเดฎเดพเดฏเดฟ เดจเดฟเดฒเดตเดฟเดฒเตเดฃเตเดเตเดเตเดเดฟเดฒเตเด, เด เดคเต เดเดชเตเดชเตเดดเตเด เดฎเตเดถเดฎเดพเดฏเดฟ เดชเดฟเดจเตเดคเตเดฃเดฏเตเดเตเดเตเดจเตเดจเต, เดเดพเดฐเดฃเด เด เดคเต เดฎเดฑเดฟเดเดเดเตเดเดพเตป เดถเตเดฐเดฎเดฟเดเตเดเตเดฎเตเดชเตเตพ เดเดคเต เดงเดพเดฐเดพเดณเด เดชเตเดฐเดถเตเดจเดเตเดเตพ เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเต. เดเตเดเดพเดคเต (เดเดฐเตเดชเดเตเดทเต :slightly_smiling_face: ) เด เดคเตเดเตเดฃเตเดเดพเดฃเต IOS เดฌเตเดฐเตเดธเดฑเตเดเตพ (เดธเดซเดพเดฐเดฟ เดเดดเดฟเดเตเดฏเตเดณเตเดณเดต) เดเดคเต เดเดชเดฏเตเดเดฟเดเตเดเดพเดจเตเด เดชเตเดฐเดพเดฆเตเดถเดฟเด เดธเตผเดเตเดเดฟเดซเดฟเดเตเดเดฑเตเดฑเต เดธเตเดฑเตเดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เด เดญเตเดฏเตผเดคเตเดฅเดฟเดเตเดเดพเดจเตเด เดเดเตเดฐเดนเดฟเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒ. เดฒเตเดเดฟเตป/เดชเดพเดธเต เด เดฒเตเดฒเตเดเตเดเดฟเตฝ ssh เดเตเดเตพ เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เดซเดฏเตผเดตเดพเตพ เดตเดดเดฟ เดเดตเดถเตเดฏเดฎเดพเดฏ เดชเตเตผเดเตเดเตเดเตพ เด เดเดฏเตเดเตเดเตเดจเตเดจเดคเต เดเดจเตเดจเดฟเดตเดฏเตเดฎเดพเดฏเดฟ เดคเดพเดฐเดคเดฎเตเดฏเดชเตเดชเตเดเตเดคเตเดคเตเดฎเตเดชเตเตพ เดธเตผเดเตเดเดฟเดซเดฟเดเตเดเดฑเตเดฑเตเดเตพเดเตเดเต เดงเดพเดฐเดพเดณเด เดเตเดฃเดเตเดเดณเตเดฃเตเดเต. เดเดจเตเดจเดพเตฝ เดเดคเต เด เดคเดฒเตเดฒ.
IOS-เตฝ, เดเดฐเต เดธเตผเดเตเดเดฟเดซเดฟเดเตเดเดฑเตเดฑเต เดเตปเดธเตเดฑเตเดฑเดพเตพ เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดจเดเดชเดเดฟเดเตเดฐเดฎเด เดตเดณเดฐเต เดฒเดณเดฟเดคเดฎเดพเดฃเต (เดชเตเดฐเดคเตเดฏเตเดเดคเดเดณเดฟเดฒเตเดฒเดพเดคเต เด เดฒเตเดฒ), เดเดจเตเดจเดพเตฝ เดชเตเดคเตเดตเต เดเดคเต เดจเดฟเตผเดฆเตเดฆเตเดถเดเตเดเตพเดเตเดเดจเตเดธเตเดคเดฎเดพเดฏเดพเดฃเต เดเตเดฏเตเดฏเตเดจเตเดจเดคเต, เด เดตเดฏเดฟเตฝ เดเดจเตเดฑเตผเดจเตเดฑเตเดฑเดฟเตฝ เดงเดพเดฐเดพเดณเด เดเดฃเตเดเต, เด เดต เดธเดซเดพเดฐเดฟ เดฌเตเดฐเตเดธเดฑเดฟเดจเต เดฎเดพเดคเตเดฐเด เดฒเดญเตเดฏเดฎเดพเดฃเต. เดจเดฟเตผเดญเดพเดเตเดฏเดตเดถเดพเตฝ, เดตเตเดฌเต เดธเตเดเตเดเดฑเตเดฑเตเดเตพเดเตเดเดพเดฏเดฟ เดเตเดฒเดฏเดจเตเดฑเต เดธเตเตผเดเตเดเต เดเดเตเดเดจเต เดเดชเดฏเตเดเดฟเดเตเดเดฃเดฎเตเดจเตเดจเต เดธเดซเดพเดฐเดฟเดเตเดเต เด เดฑเดฟเดฏเดฟเดฒเตเดฒ, เดเดจเตเดจเดพเตฝ เด เดคเตเดคเดฐเดฎเตเดฐเต เดธเตผเดเตเดเดฟเดซเดฟเดเตเดเดฑเตเดฑเต เดเดเตเดเดจเต เดธเตเดทเตเดเดฟเดเตเดเดพเดฎเตเดจเตเดจเต เดเตปเดฑเตผเดจเตเดฑเตเดฑเดฟเตฝ เดจเดฟเดฐเดตเดงเดฟ เดจเดฟเตผเดฆเตเดฆเตเดถเดเตเดเดณเตเดฃเตเดเต, เดชเดเตเดทเต เดชเตเดฐเดพเดฏเตเดเดฟเดเดฎเดพเดฏเดฟ เดเดคเต เดจเตเดเดพเดจเดพเดตเดฟเดฒเตเดฒ.
เดตเตเดฌเตโเดธเตเดเตเดเดฑเตเดฑเตเดเตพ เดฎเดจเดธเดฟเดฒเดพเดเตเดเดพเตป, เดเดเตเดเตพ เดเดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดชเตเดฒเดพเตป เดเดชเดฏเตเดเดฟเดเตเดเต: เดชเตเดฐเดถเตเดจเด / เด
เดจเตเดฎเดพเดจเด / เดชเดฐเดฟเดนเดพเดฐเด.
เดชเตเดฐเดถเตเดจเด: IOS-เดจเตเด เดธเตผเดเตเดเดฟเดซเดฟเดเตเดเดฑเตเดฑเต เดชเดฟเดจเตเดคเตเดฃ เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดทเดฎเดฎเดพเดเตเดเดฟเดฏเดฟเดเตเดเตเดณเตเดณ เดฎเดฑเตเดฑเต เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเตเดเตพเดเตเดเตเดฎเดพเดฏเดฟ Safari เดฎเตเดฌเตเตฝ เดฌเตเดฐเตเดธเดฑเดฟเดฒเต เดเดฐเต เดเตเดฒเดฏเดจเตเดฑเต เดธเตผเดเตเดเดฟเดซเดฟเดเตเดเดฑเตเดฑเต เดเดชเดฏเตเดเดฟเดเตเดเต เดชเดฐเดฟเดฐเดเตเดทเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดเดฑเดตเดฟเดเดเตเดเดณเดฟเดฒเตเดเตเดเต เด เดญเตเดฏเตผเดคเตเดฅเดจเดเตพ เดชเตเดฐเตเดเตโเดธเดฟ เดเตเดฏเตเดฏเตเดฎเตเดชเตเตพ เดตเตเดฌเต เดธเตเดเตเดเดฑเตเดฑเตเดเตพเดเตเดเต เดชเดฟเดจเตเดคเตเดฃเดฏเดฟเดฒเตเดฒ.
เด เดจเตเดฎเดพเดจเดเตเดเตพ:
- เดเดจเตเดคเดฐเดฟเด/เดฌเดพเดนเตเดฏ เดชเตเดฐเตเดเตโเดธเดฟเดกเต เดฑเดฟเดธเตเดดเตโเดธเตเดเดณเตเดเต เดตเตเดฌเตโเดธเตเดเตเดเดฑเตเดฑเตเดเดณเดฟเดฒเตเดเตเดเต เดธเตผเดเตเดเดฟเดซเดฟเดเตเดเดฑเตเดฑเตเดเตพ (เดเดจเตเดจเตเด เดเดฃเตเดเดพเดเดฟเดฒเตเดฒเตเดจเตเดจเต เด เดฑเดฟเดเตเดเตเดเตเดฃเตเดเต) เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เด เดคเตเดคเดฐเดฎเตเดฐเต เดเดดเดฟเดตเดพเดเตเดเตฝ เดเตเตบเดซเดฟเดเตผ เดเตเดฏเตเดฏเดพเตป เดธเดพเดงเดฟเดเตเดเตเด.
- เดตเตเดฌเตโเดธเตเดเตเดเดฑเตเดฑเตเดเตพเดเตเดเดพเดฏเดฟ, เดเดฐเต เดธเดพเดงเดพเดฐเดฃ (เดตเตเดฌเตโเดธเตเดเตเดเดฑเตเดฑเต เดเดคเดฐ) เดฌเตเดฐเตเดธเตผ เด เดญเตเดฏเตผเดคเตเดฅเดจเดฏเตโเดเตเดเดฟเดเต เดเดจเดฑเตเดฑเตเดฑเตเดเตเดฏเตเดฏเตเดจเตเดจ เดคเดพเตฝเดเตเดเดพเดฒเดฟเด เดธเตเดทเดจเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต เดจเดฟเดเตเดเตพเดเตเดเต เด เดฆเตเดตเดฟเดคเตเดฏเดตเตเด เดธเตเดฐเดเตเดทเดฟเดคเดตเตเด เดชเตเดฐเดคเดฟเดฐเตเดงเดฟเดเตเดเดพเดตเตเดจเตเดจเดคเตเดฎเดพเดฏ เดเดฐเต เดเดฃเดเตเดทเตป เดเดฃเตเดเดพเดเตเดเดพเด.
- เดเดฐเต เดชเตเดฐเตเดเตเดธเดฟ เดตเตเดฌเต เดธเตเตผเดตเตผ (เดฌเดฟเตฝเดฑเตเดฑเต-เดเตป เดฎเตเดกเตเดฏเตเดณเตเดเดณเตเด เดซเดเดเตเดทเดจเตเดเดณเตเด เดฎเดพเดคเตเดฐเด) เดเดชเดฏเตเดเดฟเดเตเดเต เดคเดพเตฝเดเตเดเดพเดฒเดฟเด เดธเตเดทเดจเตเดเตพ เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเดพเตป เดเดดเดฟเดฏเตเด.
- เดฑเตเดกเดฟเดฎเตเดฏเตเดกเต เด เดชเตเดชเดพเดเตเดเต เดฎเตเดกเตเดฏเตเดณเตเดเดณเดพเดฏเดฟ เดคเดพเตฝเดเตเดเดพเดฒเดฟเด เดธเตเดทเตป เดเตเดเตเดเดฃเตเดเตพ เดเดคเดฟเดจเดเด เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเดฟเดฏเดฟเดเตเดเตเดฃเตเดเต.
- เดเดจเตเดฑเดฑเดพเดเตเดทเตป เดเดเดจ เดฏเตเดเตเดคเดฟเดธเดนเดฎเดพเดฏเดฟ เดฐเตเดชเดเตฝเดชเตเดชเดจ เดเตเดฏเตเดคเตเดเตเดฃเตเดเต เดคเดพเตฝเดเตเดเดพเดฒเดฟเด เดธเตเดทเตป เดเตเดเตเดเดฃเตเดเตพ เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเดพเตป เดเดดเดฟเดฏเตเด.
เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเดฟเดฏ เดถเตเดทเด เดฆเตเดถเตเดฏเดฎเดพเดเตเดจเตเดจ เด เดตเดธเตเดฅ.
เดเตเดฒเดฟเดฏเตเดเต เดฒเดเตเดทเตเดฏเด: เดธเตเดตเดจเดเตเดเดณเตเดเตเดฏเตเด เด เดเดฟเดธเตเดฅเดพเดจ เดธเตเดเดฐเตเดฏเดเตเดเดณเตเดเตเดฏเตเด เดฎเดพเดจเตเดเตโเดฎเตเดจเตเดฑเต เดเดเดเดธเดฟเตฝ เดเดฐเต เดฎเตเดฌเตเตฝ เดซเตเดฃเดฟเตฝ เดจเดฟเดจเตเดจเต เด เดงเดฟเด เดชเตเดฐเตเดเตเดฐเดพเดฎเตเดเดณเดฟเดฒเตเดฒเดพเดคเต (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. เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เดกเตเดตเดฒเดชเตเดชเตผ เดเตบเดธเตเดณเดฟเตฝ:
เด
เดจเตเดฎเดพเดจ เดชเดฐเดฟเดถเตเดงเดจ:
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 = เดเดตเดถเตเดฏเด = เดคเดฟเดฐเตเดคเตเดคเดฟเดฏเตเดดเตเดคเตเด
เด เดชเตเดชเดพเดเตเดเต เดเตเตผ เดซเตเดเตเดเดฑเตเดเตพ เด เดชเตเดชเดพเดเตเดเต HTTP เดธเตเตผเดตเดฑเดฟเดฒเต เดเดเตเดธเตเดชเตเดฐเดทเดจเตเดเตพ
เดซเดฒเด เดเดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เด เดเดฟเดธเตเดฅเดพเดจ เดฐเตเดชเดเตฝเดชเตเดชเดจเดฏเดพเดฃเต:
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-เดจเต เดชเดเดฐเด), เดกเตเดเตเดฏเตเดฎเตเดจเตเดฑเตเดทเดจเดฟเดฒเต เดเตเดเตเดคเตฝ เดตเดฟเดถเดฆเดพเดเดถเดเตเดเตพ เดฐเตเดชเดคเตเดคเดฟเตฝ เดเดจเดฟเดเตเดเต เดจเดฟเดฒเดตเดฟเดฒเดฟเดฒเตเดฒเดพเดคเตเดค เดเดฐเต เดธเตผเดเตเดเดฟเดซเดฟเดเตเดเดฑเตเดฑเต เดเดเดฎเดฏเต เดเตเตผเดเตเดเตเดฃเตเดเดฟ เดตเดจเตเดจเต:
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. เดเดฐเต เดชเตเดฐเตเดเตเดธเดฟ เดตเตเดฌเต เดธเตเตผเดตเตผ (เดฌเดฟเตฝเดฑเตเดฑเต-เดเตป เดฎเตเดกเตเดฏเตเดณเตเดเดณเตเด เดซเดเดเตเดทเดจเตเดเดณเตเด เดฎเดพเดคเตเดฐเด) เดเดชเดฏเตเดเดฟเดเตเดเต เดคเดพเตฝเดเตเดเดพเดฒเดฟเด เดธเตเดทเดจเตเดเตพ เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเดพเตป เดเดดเดฟเดฏเตเด.
เดเดเตเดเตพ เดจเตเดฐเดคเตเดคเต เดเดฃเตเดเตเดคเตเดคเดฟเดฏเดคเตเดชเตเดฒเต, เดธเตเดชเดพเดงเดฟเดเดฎเดพเดฏ เดจเดฟเตผเดฎเตเดฎเดฟเดคเดฟเดเตพ เดธเตเดทเตเดเดฟเดเตเดเดพเตป เดจเดฟเดเตเดเดณเต เด เดจเตเดตเดฆเดฟเดเตเดเตเดจเตเดจ เดจเดฟเดฐเดตเดงเดฟ เดชเตเดฐเดงเดพเดจ เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดทเดฎเดค เด เดชเตเดชเดพเดเตเดเตเดฏเดฟเดฒเตเดฃเตเดเต. เดเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด, เดเดชเดฏเตเดเตเดคเดพเดตเดฟเดจเตเดฑเต เดฌเตเดฐเตเดธเดฑเดฟเดฒเดพเดฏเดฟเดฐเดฟเดเตเดเตเดฎเตเดชเตเตพ เดเดเตเดเดณเตเดเต เดตเดฟเดตเดฐเดเตเดเตพ เดชเดฐเดฟเดฐเดเตเดทเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดเดเตเดเตพเดเตเดเต เดฎเดพเตผเดเดเตเดเตพ เดเดตเดถเตเดฏเดฎเดพเดฃเต, เด เดคเดฟเดจเดพเตฝ เดเดจเตเดคเดพเดฃเต เดธเดเดญเดฐเดฟเดเตเดเตเดฃเตเดเดคเตเดจเตเดจเตเด เดเดจเตเดคเดฟเดจเต, เดเดจเตเดคเต เดฌเดฟเตฝเดฑเตเดฑเต-เดเตป เดซเดเดเตโเดทเดจเตเดเตพ เดเดเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเตเดฎเตเดจเตเดจเตเด เดเดเตเดเตพ เดธเตเดฅเดพเดชเดฟเดเตเดเตเดจเตเดจเต:
- เดจเดฎเตเดเตเดเต เดเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เดกเตเดเตเดกเต เดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดฏเดพเดคเตเดค เดเดฐเต เดเตเดเตเดเตบ เดเดตเดถเตเดฏเดฎเดพเดฃเต.
- เดเดพเดฒเดนเดฐเดฃเดชเตเดชเตเดเตเดเดคเตเด เดธเตเตผเดตเดฑเดฟเดฒเต เดเดพเดฒเดนเดฐเดฃเดชเตเดชเตเดเตฝ เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเดพเดจเตเดณเตเดณ เดเดดเดฟเดตเตเด เดเดณเตเดณ เดเดฐเต เดเตเดเตเดเตบ เดเดเตเดเตพเดเตเดเต เดเดตเดถเตเดฏเดฎเดพเดฃเต.
- เดธเตผเดเตเดเดฟเดซเดฟเดเตเดเดฑเตเดฑเดฟเดจเตเดฑเต เดเดเดฎเดฏเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเตเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดเดฐเต เดเตเดเตเดเตบ เดเดเตเดเตพเดเตเดเต เดเดตเดถเตเดฏเดฎเดพเดฃเต.
เดเดคเดฟเดจเต เดเดฐเต เดนเดพเดทเดฟเดเดเต เดซเดเดเตโเดทเตป, เดเดฐเต เดเดชเตเดชเต, เดเตเดเตเดเตบ เดชเตเดฐเดพเดฏเดฎเดพเดเตเดจเตเดจเดคเดฟเดจเต เดเดฐเต เดคเตเดฏเดคเดฟ เดเดจเตเดจเดฟเดต เดเดตเดถเตเดฏเดฎเดพเดฃเต. เดกเตเดเตเดฏเตเดฎเตเดจเตเดฑเตเดทเตป เด
เดเดฟเดธเตเดฅเดพเดจเดฎเดพเดเตเดเดฟ
เดซเดฒเด เด เดกเดฟเดธเตเตป เดเดฏเดฟเดฐเตเดจเตเดจเต:
#ะฝะตั ัะตััะธัะธะบะฐัะฐ, ะธ ะพะฑัะฐัะตะฝะธะต ะบ 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>
เดฒเดเตเดทเตเดฏเด เดเตเดตเดฐเดฟเดเตเดเต, เดชเดเตเดทเต เดธเตเตผเดตเตผ เดเดพเดฒเดนเดฐเดฃเดชเตเดชเตเดเตเดจเตเดจเดคเดฟเตฝ เดชเตเดฐเดถเตเดจเดเตเดเดณเตเดฃเตเดเต (เดจเดฟเดเตเดเตพเดเตเดเต เดเดฐเต เดตเตผเดทเด เดชเดดเดเตเดเดฎเตเดณเตเดณ เดเตเดเตเดเดฟ เดเดชเดฏเตเดเดฟเดเตเดเดพเด), เด เดคเดพเดฏเดคเต เดเตเดเตเดเดฃเตเดเตพ, เดเดจเตเดคเดฐเดฟเด เดเดชเดฏเตเดเดคเตเดคเดฟเดจเต เดธเตเดฐเดเตเดทเดฟเดคเดฎเดพเดฃเตเดเตเดเดฟเดฒเตเด, เดตเตเดฏเดพเดตเดธเดพเดฏเดฟเด (เดฌเดนเตเดเดจ) เดเดชเดฏเตเดเดคเตเดคเดฟเดจเต เดธเตเดฐเดเตเดทเดฟเดคเดฎเดฒเตเดฒ.
4. เดฑเตเดกเดฟเดฎเตเดฏเตเดกเต เด
เดชเตเดชเดพเดเตเดเต เดฎเตเดกเตเดฏเตเดณเตเดเดณเดพเดฏเดฟ เดคเดพเตฝเดเตเดเดพเดฒเดฟเด เดธเตเดทเตป เดเตเดเตเดเดฃเตเดเตพ เดเดคเดฟเดจเดเด เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเดฟเดฏเดฟเดเตเดเตเดฃเตเดเต.
เดฎเตเดฎเตเดชเดคเตเดคเต เดเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดฐเต เดชเตเดฐเดงเดพเดจ เดชเตเดฐเดถเตเดจเด เด เดตเดถเตเดทเดฟเดเตเดเตเดจเตเดจเต - เดเตเดเตเดเตบ เดชเตเดฐเดพเดฏเดฎเดพเดเตฝ เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเดเตเดเดพเดจเตเดณเตเดณ เดเดดเดฟเดตเดฟเดฒเตเดฒเดพเดฏเตเดฎ.
เดเดเตเดเตพ เดเดคเต เดเตเดฏเตเดฏเตเดจเตเดจ เดเดฐเต เดฑเตเดกเดฟเดฎเตเดฏเตเดกเต เดฎเตเดกเตเดฏเตเดณเดฟเดจเดพเดฏเดฟ เดคเดฟเดฐเดฏเตเดเดฏเดพเดฃเต, เดตเดพเดเตเดเตเดเตพ เด เดจเตเดธเดฐเดฟเดเตเดเต: apache token json two factor auth
JSON เดตเตเดฌเต เดเตเดเตเดเดฃเตเดเดณเต เด เดเดฟเดธเตเดฅเดพเดจเดฎเดพเดเตเดเดฟเดฏเตเดณเตเดณ เดเตเดเตเดเดฃเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเตเดณเตเดณ เดเตเดฒเดฏเดจเตเดฑเต เดชเตเดฐเดพเดฎเดพเดฃเตเดเดฐเดฃเด เด เดชเตเดชเดพเดเตเดเต เดเต-เดซเดพเดเตเดเตผ (2FA) เดชเตเดฐเดพเดฎเดพเดฃเตเดเดฐเดฃเด เด เดชเตเดชเดพเดเตเดเตเดฏเดฟเดฒเตเดเตเดเต เดเต-เดซเดพเดเตเดเตผ เดเดคเดจเตเดฑเดฟเดเตเดเตเดทเตป เดเดเตเดเดจเต เดเตเตผเดเตเดเดพเด เดเดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดฎเตเดกเตเดฏเตเตพ เดเตปเดธเตเดฑเตเดฑเดพเดณเตเดทเตป เดเดชเดฏเตเดเดฟเดเตเดเต เดจเดฟเดเตเดเดณเตเดเต เด เดชเตเดชเดพเดเตเดเต เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดฒเตเดเตเดเต เดฐเดฃเตเดเต-เดเดเด เดชเตเดฐเดพเดฎเดพเดฃเตเดเดฐเดฃเด เดเตเดฃเตเดเตเดตเดฐเดฟเด
เด
เดคเต, เดฑเตเดกเดฟเดฎเตเดฏเตเดกเต เดฎเตเดกเตเดฏเตเดณเตเดเตพ เดเดฃเตเดเต, เดเดจเตเดจเดพเตฝ เด
เดตเดฏเตเดฒเตเดฒเดพเด เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดเดณเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต, เดเตเดเดพเดคเต เดเดฐเต เดธเตเดทเดจเตเด เด
เดงเดฟเด เดเตเดเตเดเดฟเดเดณเตเด เดเดฐเดเดญเดฟเดเตเดเตเดจเตเดจ เดฐเตเดชเดคเตเดคเดฟเตฝ เดเตผเดเตเดเดฟเดซเดพเดเตเดฑเตเดฑเตเดเตพ เดเดฃเตเดเต. เด
เดคเดพเดฏเดคเต, เดคเตฝเดเตเดเดพเดฒเด เด
เดฒเตเดฒ.
เดเดเตเดเตพ เดคเดฟเดฐเดฏเดพเตป เด
เดเตเดเต เดฎเดฃเดฟเดเตเดเตเตผ เดเดเตเดคเตเดคเต, เด
เดคเต เดตเตเดฏเดเตเดคเดฎเดพเดฏ เดซเดฒเด เดจเตฝเดเดฟเดฏเดฟเดฒเตเดฒ.
5. เดชเดฐเดธเตเดชเดฐ เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดเดณเตเดเต เดเดเดจ เดฏเตเดเตเดคเดฟเดธเดนเดฎเดพเดฏเดฟ เดฐเตเดชเดเตฝเดชเตเดชเดจ เดเตเดฏเตเดคเตเดเตเดฃเตเดเต เดคเดพเตฝเดเตเดเดพเดฒเดฟเด เดธเตเดทเตป เดเตเดเตเดเดฃเตเดเตพ เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเดพเตป เดเดดเดฟเดฏเตเด.
เดฑเตเดกเดฟเดฎเตเดฏเตเดกเต เดฎเตเดกเตเดฏเตเดณเตเดเตพ เดตเดณเดฐเต เดธเดเตเดเตเตผเดฃเตเดฃเดฎเดพเดฃเต, เดเดพเดฐเดฃเด เดเดเตเดเตพเดเตเดเต เดเตเดฑเดเตเดเต เดซเดเดเตเดทเดจเตเดเตพ เดฎเดพเดคเตเดฐเดฎเต เดเดตเดถเตเดฏเดฎเตเดณเตเดณเต.
เด เดชเตเดชเดพเดเตเดเตเดฏเตเดเต เดฌเดฟเตฝเดฑเตเดฑเต-เดเตป เดซเดเดเตโเดทเดจเตเดเตพ เดญเดพเดตเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดฐเต เดคเตเดฏเดคเดฟ เดธเตเดทเตโเดเดฟเดเตเดเดพเตป เด เดจเตเดตเดฆเดฟเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒ เดเดจเตเดจเดคเดพเดฃเต เดคเตเดฏเดคเดฟเดฏเดฟเดฒเต เดชเตเดฐเดถเตโเดจเด, เดเดพเดฒเดนเดฐเดฃเดชเตเดชเตเดเตฝ เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเตเดฎเตเดชเตเตพ เดฌเดฟเตฝเดฑเตเดฑเต-เดเตป เดซเดเดเตโเดทเดจเตเดเดณเดฟเตฝ เดเดฃเดฟเดคเดถเดพเดธเตเดคเตเดฐ เดเตเดเตเดเดฟเดเตเดเตเตผเดเตเดเตฝ / เดเตเดฑเดฏเตเดเตเดเตฝ เดเดฒเตเดฒ เดเดจเตเดจเดคเดพเดฃเต.
เด เดคเดพเดฏเดคเต, เดจเดฟเดเตเดเตพเดเตเดเต เดเดดเตเดคเดพเตป เดเดดเดฟเดฏเดฟเดฒเตเดฒ:
(%{env:zt-cert-date} + 30) > %{DATE}
เดจเดฟเดเตเดเตพเดเตเดเต เดฐเดฃเตเดเต เด เดเตเดเดเตเดเตพ เดฎเดพเดคเตเดฐเดฎเต เดคเดพเดฐเดคเดฎเตเดฏเด เดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดฏเต.
เดธเดซเดพเดฐเดฟ เดชเตเดฐเดถเตโเดจเดคเตเดคเดฟเดจเตเดณเตเดณ เดชเดฐเดฟเดนเดพเดฐเดคเตเดคเดฟเดจเดพเดฏเดฟ เดคเดฟเดฐเดฏเตเดฎเตเดชเตเตพ, เดฐเดธเดเดฐเดฎเดพเดฏ เดเดฐเต เดฒเตเดเดจเด เดเดพเตป เดเดฃเตเดเตเดคเตเดคเดฟ:
เดเดคเต Nginx-เดจเตเดณเตเดณ เดฒเตเดตเดพเดฏเดฟเดฒเต เดเตเดกเดฟเดจเตเดฑเต เดเดฐเต เดเดฆเดพเดนเดฐเดฃเด เดตเดฟเดตเดฐเดฟเดเตเดเตเดจเตเดจเต, เดเตเดเดพเดคเต, เดนเดพเดทเดฟเดเดเดฟเดจเดพเดฏเดฟ hmac เดเดชเตเดชเดฟเดเตฝ เดฐเตเดคเดฟ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเดคเต เดเดดเดฟเดเต, เดเดเตเดเตพ เดเดคเดฟเดจเดเด เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเดฟเดฏ เดเตเตบเดซเดฟเดเดฑเตเดทเดจเตเดฑเต เด เดญเดพเดเดคเตเดคเดฟเดจเตเดฑเต เดฏเตเดเตเดคเดฟ เดตเดณเดฐเต เดเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเต ( เดเดคเต เด
เดชเตเดชเดพเดเตเดเตเดฏเดฟเตฝ เดเดฃเตเดเตเดคเตเดคเดฟเดฏเดฟเดฒเตเดฒ).
เดฒเตเดตเดพ เดตเตเดฏเดเตเดคเดฎเดพเดฏ เดฏเตเดเตเดคเดฟเดฏเตเดณเตเดณ เดเดฐเต เดญเดพเดทเดฏเดพเดฃเตเดจเตเดจเต เดตเตเดฏเดเตเดคเดฎเดพเดฏเดฟ, เด เดชเตเดชเดพเดเตเดเตเดฏเตโเดเตเดเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดเดจเตเดคเตเดเตเดเดฟเดฒเตเด เดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดฏเตเด:
Nginx, Apache เดเดจเตเดจเดฟเดตเดฏเตเดฎเดพเดฏเตเดณเตเดณ เดตเตเดฏเดคเตเดฏเดพเดธเด เดชเด เดฟเดเตเดเต:
เดฒเตเดตเดพ เดญเดพเดทเดพ เดจเดฟเตผเดฎเตเดฎเดพเดคเดพเดตเดฟเตฝ เดจเดฟเดจเตเดจเต เดฒเดญเตเดฏเดฎเดพเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดเดณเตเด:
เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณเดคเตเดฎเดพเดฏเดฟ เดคเดพเดฐเดคเดฎเตเดฏเดชเตเดชเตเดเตเดคเตเดคเตเดจเตเดจเดคเดฟเดจเต เดญเดพเดตเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดฐเต เดคเตเดฏเดคเดฟ เดธเดเตเดเตเดเดฐเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดเดฐเต เดเตเดฑเดฟเดฏ เดฒเตเดตเดพ เดซเดฏเดฒเดฟเตฝ 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 เดธเดเตเดตเดฎเดพเดเต.
เดเดฑเดตเดฟเดเดคเตเดคเดฟเดฒเตเดเตเดเตเดณเตเดณ เดฒเดฟเดเตเดเต
เดเดฐเต เดเดพเดฐเตเดฏเด เดเตเดเดฟ.
เดชเตเดคเตเดตเต, เด เดชเตเดชเดพเดเตเดเต (เดเดฐเตเดชเดเตเดทเต Nginx) เดเตเตบเดซเดฟเดเดฑเตเดทเดจเดฟเตฝ เดเดคเต เดเตเดฐเดฎเดคเตเดคเดฟเดฒเดพเดฃเต เดจเดฟเตผเดฆเตเดฆเตเดถเดเตเดเตพ เดเดดเตเดคเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเดคเต เดเดจเตเดจเดคเต เดชเตเดฐเดถเตเดจเดฎเดฒเตเดฒ, เดเดพเดฐเดฃเด เด เดตเดธเดพเดจเด เดเดฒเตเดฒเดพเด เดเดชเดฏเตเดเตเดคเดพเดตเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด เดญเตเดฏเตผเดคเตเดฅเดจเดฏเตเดเต เดเตเดฐเดฎเดคเตเดคเต เด เดเดฟเดธเตเดฅเดพเดจเดฎเดพเดเตเดเดฟ เด เดเตเดเตเดเตเด, เดเดคเต เดชเตเดฐเตเดธเดธเตเดธเดฟเดเดเดฟเดจเตเดณเตเดณ เดธเตเดเตเดฎเตเดฎเดพเดฏเดฟ เดฏเตเดเดฟเดเตเดเตเดจเตเดจเต. เดฒเตเดตเดพ เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเตเดเตพ.
เดชเตเตผเดคเตเดคเตเดเดฐเดฃเด:
เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเดฟเดฏเดคเดฟเดจเต เดถเตเดทเด เดฆเตเดถเตเดฏเดฎเดพเดเตเดจเตเดจ เด
เดตเดธเตเดฅ (เดฒเดเตเดทเตเดฏเด):
เด
เดงเดฟเด เดชเตเดฐเตเดเตเดฐเดพเดฎเตเดเดณเดฟเดฒเตเดฒเดพเดคเต (VPN), เดเดเตเดเตเดคเดตเตเด เดธเตเดฐเดเตเดทเดฟเดคเดตเตเดฎเดพเดฏ IOS-เตฝ เดเดฐเต เดฎเตเดฌเตเตฝ เดซเตเดฃเดฟเตฝ เดจเดฟเดจเตเดจเต เดธเตเดตเดจเดเตเดเดณเตเดเตเดฏเตเด เด
เดเดฟเดธเตเดฅเดพเดจ เดธเตเดเดฐเตเดฏเดเตเดเดณเตเดเตเดฏเตเด เดฎเดพเดจเตเดเตเดฎเตเดจเตเดฑเต เดฒเดญเตเดฏเดฎเดพเดฃเต.
เดฒเดเตเดทเตเดฏเด เดเตเดตเดฐเดฟเดเตเดเต, เดตเตเดฌเต เดธเตเดเตเดเดฑเตเดฑเตเดเตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเต, เดเตเดเดพเดคเต เดเดฐเต เดธเตผเดเตเดเดฟเดซเดฟเดเตเดเดฑเตเดฑเดฟเตฝ เดเตเดฑเดฏเดพเดคเตเดค เดธเตเดฐเดเตเดทเดฏเตเด เดเดฃเตเดเต.
เด
เดตเดฒเดเดฌเด: www.habr.com