เชฒเซเช เชคเซ เชฒเซเชเซ เชฎเชพเชเซ เชเชชเชฏเซเชเซ เชฅเชถเซ เชเซเช:
- เชเซเชฒเชพเชเชจเซเช เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชถเซเช เชเซ เชคเซ เชเชพเชฃเซ เชเซ เช เชจเซ เชธเชฎเชเซ เชเซ เชเซ เชคเซเชจเซ เชฎเซเชฌเชพเชเชฒ เชธเชซเชพเชฐเซ เชชเชฐ เชตเซเชฌเชธเซเชเซเชเซเชธเชจเซ เชเชฐเซเชฐ เชเซเชฎ เชเซ;
- เชนเซเช เชตเซเชฌ เชธเซเชตเชพเชเชจเซ เชฒเซเชเซเชจเชพ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชตเชฐเซเชคเซเชณเชฎเชพเช เช เชฅเชตเชพ เชซเชเซเชค เชฎเชพเชฐเชพ เชฎเชพเชเซ เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเชเซ เชเซเช;
- เชตเชฟเชเชพเชฐเซ เชเซ เชเซ เชฌเชงเซเช เชชเชนเซเชฒเซเชฅเซ เช เชเซเช เชตเซเชฏเชเซเชคเชฟ เชฆเซเชตเชพเชฐเชพ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชเซ, เช เชจเซ เชคเซ เชตเชฟเชถเซเชตเชจเซ เชฅเซเชกเซเช เชตเชงเซ เช เชจเซเชเซเชณ เช เชจเซ เชธเซเชฐเชเซเชทเชฟเชค เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเชเซ เชเซ.
เชตเซเชฌเชธเซเชเซเชเซเชธเชจเซ เชเชคเชฟเชนเชพเชธ เชฒเชเชญเช 8 เชตเชฐเซเชท เชชเชนเซเชฒเชพเช เชถเชฐเซ เชฅเชฏเซ เชนเชคเซ. เชชเชนเซเชฒเชพเช, เชชเชฆเซเชงเชคเชฟเชเชจเซ เชเชชเชฏเซเช เชฒเชพเชเชฌเซ HTTP เชตเชฟเชจเชเชคเซเช (เชเชฐเซเชเชฐ เชชเซเชฐเชคเชฟเชธเชพเชฆเซ) เชจเชพ เชฐเซเชชเชฎเชพเช เชเชฐเชตเชพเชฎเชพเช เชเชตเชคเซ เชนเชคเซ: เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเชพ เชฌเซเชฐเชพเชเชเชฐ เชธเชฐเซเชตเชฐเชจเซ เชตเชฟเชจเชเชคเซ เชฎเซเชเชฒเซ เชเซ เช
เชจเซ เชคเซ เชเชเชเช เชเชตเชพเชฌ เชเชชเซ เชคเซเชจเซ เชฐเชพเชน เชเซเชคเชพ เชนเชคเชพ, เชชเซเชฐเชคเชฟเชธเชพเชฆ เชชเชเซ เชคเซ เชซเชฐเซเชฅเซ เชเชจเซเชเซเช เชฅเชพเชฏ เชเซ เช
เชจเซ เชฐเชพเชน เชเซเช เชเซ. เชชเชฐเชเชคเซ เชชเชเซ เชตเซเชฌเชธเซเชเซเชเซเชธ เชฆเซเชเชพเชฏเชพ.
เชฅเซเชกเชพ เชตเชฐเซเชทเซ เชชเชนเซเชฒเชพ, เช
เชฎเซ เชถเซเชฆเซเชง PHP เชฎเชพเช เช
เชฎเชพเชฐเซเช เชชเซเชคเชพเชจเซเช เช
เชฎเชฒเซเชเชฐเชฃ เชตเชฟเชเชธเชพเชตเซเชฏเซเช เชนเชคเซเช, เชเซ https เชตเชฟเชจเชเชคเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเชคเซเช เชจเชฅเซ, เชเชพเชฐเชฃ เชเซ เช เชฒเชฟเชเช เชธเซเชคเชฐ เชเซ. เชฅเซเชกเชพ เชธเชฎเชฏ เชชเชนเซเชฒเชพ, เชฒเชเชญเช เชคเชฎเชพเชฎ เชตเซเชฌ เชธเชฐเซเชตเชฐเซเชธเซ https เช
เชจเซ เชธเชชเซเชฐเซเช เชเชจเซเชเซเชถเชจ:เช
เชชเชเซเชฐเซเชก เชชเชฐ เชชเซเชฐเซเชเซเชธเซ เชตเชฟเชจเชเชคเซ เชเชฐเชตเชพเชจเซเช เชถเซเชเซเชฏเชพ.
เชเซเชฏเชพเชฐเซ เช เชฌเชจเซเชฏเซเช, เชคเซเชฏเชพเชฐเซ SPA เชเชชเซเชฒเชฟเชเซเชถเชจเซเชธ เชฎเชพเชเซ เชตเซเชฌเชธเซเชเซเชเซเชธ เชฒเชเชญเช เชกเชฟเชซเซเชฒเซเช เชธเซเชตเชพ เชฌเชจเซ เชเช, เชเชพเชฐเชฃ เชเซ เชธเชฐเซเชตเชฐเชจเซ เชชเชนเซเชฒ เชชเชฐ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเซ เชธเชพเชฎเชเซเชฐเซ เชชเซเชฐเชฆเชพเชจ เชเชฐเชตเซ เชเซเชเชฒเซเช เช เชจเซเชเซเชณ เชเซ (เชฌเซเชเชพ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชคเชฐเชซเชฅเซ เชธเชเชฆเซเชถ เชฎเซเชเชฒเซ เช เชฅเชตเชพ เชเชฌเซ, เชฆเชธเซเชคเชพเชตเซเช, เชชเซเชฐเชธเซเชคเซเชคเชฟเชจเซเช เชจเชตเซเช เชธเชเชธเซเชเชฐเชฃ เชกเชพเชเชจเชฒเซเชก เชเชฐเซ. เชเซ เช เชจเซเชฏ เชเซเช เชนเชพเชฒเชฎเชพเช เชธเชเชชเชพเชฆเชฟเชค เชเชฐเซ เชฐเชนเซเชฏเซเช เชเซ).
เชเซเชฒเชพเชเชจเซเช เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชเซเชฒเซเชฒเชพ เชเชฃเชพ เชธเชฎเชฏเชฅเซ เชเซ, เชคเซเชฎ เชเชคเชพเช, เชคเซ เชนเชเซ เชชเชฃ เชจเชฌเชณเซ เชฐเซเชคเซ เชธเชฎเชฐเซเชฅเชฟเชค เชเซ, เชเชพเชฐเชฃ เชเซ เชเซเชฏเชพเชฐเซ เชคเซเชจเซ เชฌเชพเชฏเชชเชพเชธ เชเชฐเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ เชคเซเชฏเชพเชฐเซ เชคเซ เชเชฃเซ เชธเชฎเชธเซเชฏเชพเช เชเชญเซ เชเชฐเซ เชเซ. เช เชจเซ (เชธเชเชญเชตเชคเช :slightly_smiling_face: ) เชคเซเชฅเซ เช IOS เชฌเซเชฐเชพเชเชเชฐเซเชธ (เชธเชซเชพเชฐเซ เชธเชฟเชตเชพเชฏเชจเชพ เชฌเชงเชพ) เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพ เชฎเชพเชเชเชคเชพ เชจเชฅเซ เช เชจเซ เชธเซเชฅเชพเชจเชฟเช เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชธเซเชเซเชฐเชฎเชพเชเชฅเซ เชคเซเชจเซ เชตเชฟเชจเชเชคเซ เชเชฐเชตเชพ เชฎเชพเชเชเชคเชพ เชจเชฅเซ. เชฒเซเชเชฟเชจ/เชชเชพเชธ เช เชฅเชตเชพ ssh เชเซ เช เชฅเชตเชพ เชซเชพเชฏเชฐเชตเซเชฒ เชฆเซเชตเชพเชฐเชพ เชเชฐเซเชฐเซ เชชเซเชฐเซเช เชฌเชเชง เชเชฐเชตเชพเชจเซ เชธเชฐเชเชพเชฎเชฃเซเชฎเชพเช เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซเชจเชพ เชเชฃเชพ เชซเชพเชฏเชฆเชพ เชเซ. เชชเชฐเชเชคเซ เชคเซ เช เชตเชฟเชถเซ เชจเชฅเซ.
iOS เชชเชฐ, เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพเชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชเชฆเชฎ เชธเชฐเชณ เชเซ (เชตเชฟเชถเชฟเชทเซเชเชคเชพ เชตเชฟเชจเชพ เชจเชนเซเช), เชชเชฐเชเชคเซ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เชคเซ เชธเซเชเชจเชพเช เช เชจเซเชธเชพเชฐ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชเซเชฎเชพเชเชฅเซ เชเชจเซเชเชฐเชจเซเช เชชเชฐ เชเชฃเซเช เชฌเชงเซเช เชเซ เช เชจเซ เชเซ เชซเชเซเชค เชธเชซเชพเชฐเซ เชฌเซเชฐเชพเชเชเชฐ เชฎเชพเชเซ เชเชชเชฒเชฌเซเชง เชเซ. เชเชฎเชจเชธเซเชฌเซ, เชธเชซเชพเชฐเซ เชตเซเชฌ เชธเซเชเซเชเซเชธ เชฎเชพเชเซ เชเซเชฒเชพเชฏเชเช ะกert เชจเซ เชเชชเชฏเซเช เชเซเชตเซ เชฐเซเชคเซ เชเชฐเชตเซ เชคเซ เชเชพเชฃเชคเซเช เชจเชฅเซ, เชชเชฐเชเชคเซ เชเชตเชพ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชเซเชตเซ เชฐเซเชคเซ เชฌเชจเชพเชตเชตเซเช เชคเซ เช เชเชเซ เชเชจเซเชเชฐเชจเซเช เชชเชฐ เชเชฃเซ เชธเซเชเชจเชพเช เชเซ, เชชเชฐเชเชคเซ เชตเซเชฏเชตเชนเชพเชฐเชฎเชพเช เช เช เชเชฎเซเชฏ เชเซ.
เชตเซเชฌเชธเซเชเซเชเซเชธเชจเซ เชธเชฎเชเชตเชพ เชฎเชพเชเซ, เช
เชฎเซ เชจเซเชเซเชจเซ เชฏเซเชเชจเชพเชจเซ เชเชชเชฏเซเช เชเชฐเซเชฏเซ: เชธเชฎเชธเซเชฏเชพ/เชงเชพเชฐเชฃเชพ/เชเชเซเชฒ.
เชธเชฎเชธเซเชฏเชพ: IOS เชฎเชพเชเซ เชธเชซเชพเชฐเซ เชฎเซเชฌเชพเชเชฒ เชฌเซเชฐเชพเชเชเชฐ เชชเชฐ เชเซเชฒเชพเชฏเชเช เชธเชฐเซเชเชฟเชซเชฟเชเซเช เชฆเซเชตเชพเชฐเชพ เชธเซเชฐเชเซเชทเชฟเชค เชนเซเชฏ เชคเซเชตเชพ เชธเชเชธเชพเชงเชจเซเชจเซ เชตเชฟเชจเชเชคเซเช เชชเซเชฐเซเชเซเชธเซ เชเชฐเชคเซ เชตเชเชคเซ เชตเซเชฌ เชธเซเชเซเชเซเชธ เชฎเชพเชเซ เชเซเช เชธเชชเซเชฐเซเช เชจเชฅเซ เช เชจเซ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชธเชชเซเชฐเซเช เชธเชเซเชทเชฎ เชเชฐเซเชฒ เชนเซเชฏ เชคเซเชตเซ เช เชจเซเชฏ เชเชชเซเชฒเชฟเชเซเชถเชจเซ.
เชชเซเชฐเซเชตเชงเชพเชฐเชฃเชพเช:
- เชเชเชคเชฐเชฟเช/เชฌเชพเชนเซเชฏ เชชเซเชฐเซเชเซเชธเซเชก เชธเชเชธเชพเชงเชจเซเชจเชพ เชตเซเชฌเชธเซเชเซเชเซเชธเชฎเชพเช เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ (เช เชเชพเชฃเซเชจเซ เชเซ เชคเซเชฏเชพเช เชเซเช เชจเชนเซเช เชนเซเชฏ) เชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชเชตเชพ เช เชชเชตเชพเชฆเชจเซ เชเซเช เชตเชตเชพเชจเซเช เชถเชเซเชฏ เชเซ.
- เชตเซเชฌเชธเซเชเซเชเซเชธ เชฎเชพเชเซ, เชคเชฎเซ เชธเชพเชฎเชพเชจเซเชฏ (เชฌเชฟเชจ-เชตเซเชฌเชธเซเชเซเช) เชฌเซเชฐเชพเชเชเชฐ เชตเชฟเชจเชเชคเซ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชเชจเชฐเซเช เชฅเชคเชพ เช เชธเซเชฅเชพเชฏเซ เชธเชคเซเชฐเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเช เช เชจเชจเซเชฏ, เชธเซเชฐเชเซเชทเชฟเชค เช เชจเซ เชธเชเชฐเชเซเชทเชฃเชเซเชทเชฎ เชเชจเซเชเซเชถเชจ เชฌเชจเชพเชตเซ เชถเชเซ เชเซ.
- เช เชธเซเชฅเชพเชฏเซ เชธเชคเซเชฐเซ เชเช เชชเซเชฐเซเชเซเชธเซ เชตเซเชฌ เชธเชฐเซเชตเชฐ (เชฌเชฟเชฒเซเช-เชเชจ เชฎเซเชกเซเชฏเซเชฒเซเชธ เช เชจเซ เชซเชเชเซเชถเชจเซเชธ) เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เช เชฎเชฒเชฎเชพเช เชฎเซเชเซ เชถเชเชพเชฏ เชเซ.
- เช เชธเซเชฅเชพเชฏเซ เชธเชคเซเชฐ เชเซเชเชจเซเชธ เชชเชนเซเชฒเซเชฅเซ เช เชคเซเชฏเชพเชฐ เช เชชเชพเชเซ เชฎเซเชกเซเชฏเซเชฒเซ เชคเชฐเซเชเซ เชฒเชพเชเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเชพ เชเซ.
- เช เชธเซเชฅเชพเชฏเซ เชธเชคเซเชฐ เชเซเชเชจเซเชธ เชคเชพเชฐเซเชเชฟเช เชฐเซเชคเซ เชเซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพ เชฎเชพเชณเชเซเช เชกเชฟเชเชพเชเชจ เชเชฐเซเชจเซ เช เชฎเชฒเชฎเชพเช เชฎเซเชเซ เชถเชเชพเชฏ เชเซ.
เช เชฎเชฒเซเชเชฐเชฃ เชชเชเซ เชฆเซเชถเซเชฏเชฎเชพเชจ เชธเซเชฅเชฟเชคเชฟ.
เชเชพเชฐเซเชฏเชจเซเช เชฒเชเซเชทเซเชฏ: เชธเซเชตเชพเช เช เชจเซ เชเชจเซเชซเซเชฐเชพเชธเซเชเซเชฐเชเซเชเชฐเชจเซเช เชธเชเชเชพเชฒเชจ IOS เชชเชฐ เชฎเซเชฌเชพเชเชฒ เชซเซเชจเชฅเซ เชตเชงเชพเชฐเชพเชจเชพ เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ (เชเซเชฎ เชเซ VPN), เชเชเซเชเซเชค เช เชจเซ เชธเซเชฐเชเซเชทเชฟเชค เชตเชฟเชจเชพ เชธเซเชฒเชญ เชนเซเชตเซเช เชเซเชเช.
เชตเชงเชพเชฐเชพเชจเซเช เชฒเชเซเชทเซเชฏ: เชฎเซเชฌเชพเชเชฒ เชเชจเซเชเชฐเชจเซเช เชชเชฐ เชธเชพเชฎเชเซเชฐเซเชจเซ เชเชกเชชเซ เชกเชฟเชฒเชฟเชตเชฐเซ เชธเชพเชฅเซ เชธเชฎเชฏ เช เชจเซ เชธเชเชธเชพเชงเชจเซ/เชซเซเชจ เชเซเชฐเชพเชซเชฟเช (เชตเซเชฌ เชธเซเชเซเช เชตเชฟเชจเชพเชจเซ เชเซเชเชฒเซเช เชธเซเชตเชพเช เชฌเชฟเชจเชเชฐเซเชฐเซ เชตเชฟเชจเชเชคเซเช เชชเซเชฆเชพ เชเชฐเซ เชเซ) เชฌเชเชพเชตเซ เชเซ.
เชเซเชตเซ เชฐเซเชคเซ เชคเชชเชพเชธเชตเซเช?
1. เชเชชเชจเชฟเชเช เชชเซเช:
โ ะฝะฐะฟัะธะผะตั, https://teamcity.yourdomain.com ะฒ ะผะพะฑะธะปัะฝะพะผ ะฑัะฐัะทะตัะต Safari (ะดะพัััะฟะตะฝ ัะฐะบะถะต ะฒ ะดะตัะบัะพะฟะฝะพะน ะฒะตััะธะธ) โ ะฒัะทัะฒะฐะตั ััะฟะตัะฝะพะต ะฟะพะดะบะปััะตะฝะธะต ะบ ะฒะตะฑ-ัะพะบะตัะฐะผ.
โ ะฝะฐะฟัะธะผะตั, https://teamcity.yourdomain.com/admin/admin.html?item=diagnostics&tab=webSโฆโ ะฟะพะบะฐะทัะฒะฐะตั ping/pong.
โ ะฝะฐะฟัะธะผะตั, https://rancher.yourdomain.com/p/c-84bnv:p-vkszd/workload/deployment:danidb:phโฆ-> viewlogs โ ะฟะพะบะฐะทัะฒะฐะตั ะปะพะณะธ ะบะพะฝัะตะนะฝะตัะฐ.
2. เช เชฅเชตเชพ เชตเชฟเชเชพเชธเชเชฐเซเชคเชพ เชเชจเซเชธเซเชฒเชฎเชพเช:
เชชเซเชฐเซเชตเชงเชพเชฐเชฃเชพ เชชเชฐเซเชเซเชทเชฃ:
1. เชเชเชคเชฐเชฟเช/เชฌเชพเชนเซเชฏ เชชเซเชฐเซเชเซเชธเซเชก เชธเชเชธเชพเชงเชจเซเชจเชพ เชตเซเชฌ เชธเซเชเซเชเซเชธ เชฎเชพเชเซ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ (เช เชเชพเชฃเซเชจเซ เชเซ เชคเซเชฏเชพเช เชเซเช เชจเชนเซเช เชนเซเชฏ) เชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชเชตเชพ เช เชชเชตเชพเชฆเชจเซ เชเซเช เชตเชตเชพเชจเซเช เชถเชเซเชฏ เชเซ.
2 เชเชเซเชฒเซ เช เชนเซเช เชฎเชณเซ เชเชตเซเชฏเชพ เชนเชคเชพ:
เช) เชธเซเชคเชฐเซ
<Location sock*> SSLVerifyClient optional </Location>
<Location /> SSLVerifyClient require </Location>
เชเชเซเชธเซเชธ เชธเซเชคเชฐ เชฌเชฆเชฒเซ.
เช เชชเชฆเซเชงเชคเชฟเชฎเชพเช เชจเซเชเซเชจเซ เชเซเชเชเชพเช เชเซ:
- เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเชจเซ เชเชเชพเชธเชฃเซ เชชเซเชฐเซเชเซเชธเซเชก เชฐเชฟเชธเซเชฐเซเชธเชจเซ เชตเชฟเชจเชเชคเซ เชชเชเซ เชฅเชพเชฏ เชเซ, เชเชเชฒเซ เชเซ, เชตเชฟเชจเชเชคเซ เชชเชเซ เชนเซเชจเซเชกเชถเซเช. เชเชจเซ เช เชฐเซเชฅ เช เชเซ เชเซ เชชเซเชฐเซเชเซเชธเซ เชชเชนเซเชฒเชพ เชฒเซเชก เชฅเชถเซ เช เชจเซ เชชเชเซ เชธเซเชฐเชเซเชทเชฟเชค เชธเซเชตเชพเชจเซ เชตเชฟเชจเชเชคเซเชจเซ เชเชพเชชเซ เชจเชพเชเชถเซ. เช เชเชฐเชพเชฌ เชเซ, เชชเชฐเชเชคเซ เชเชเชฟเชฒ เชจเชฅเซ;
- http2 เชชเซเชฐเซเชเซเชเซเชฒเชฎเชพเช. เชคเซ เชนเชเซ เชชเชฃ เชกเซเชฐเชพเชซเซเชเชฎเชพเช เชเซ, เช
เชจเซ เชฌเซเชฐเชพเชเชเชฐ เชเชคเซเชชเชพเชฆเชเซ เชเชพเชฃเชคเชพ เชจเชฅเซ เชเซ เชคเซเชจเซ เชเซเชตเซ เชฐเซเชคเซ เช
เชฎเชฒเชฎเชพเช เชฎเซเชเชตเซเช #info เชตเชฟเชถเซ tls1.3 http2 เชชเซเชธเซเช เชนเซเชจเซเชกเชถเซเช (เชนเชตเซ เชเชพเชฎ เชเชฐเชคเซเช เชจเชฅเซ)
RFC 8740 "HTTP/1.3 เชธเชพเชฅเซ TLS 2 เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ" เชฒเชพเชเซ เชเชฐเซ ; - เช เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชเซเชตเซ เชฐเซเชคเซ เชเชเซเชเซเชค เชเชฐเชตเซ เชคเซ เชธเซเชชเชทเซเช เชจเชฅเซ.
b) เชฎเซเชณเชญเซเชค เชธเซเชคเชฐเซ, เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชตเชฟเชจเชพ ssl เชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ.
SSLVerifyClient เชจเซ เชเชฐเซเชฐเซ => SSLVerifyClient เชตเซเชเชฒเซเชชเชฟเช, เชชเชฐเชเชคเซ เช เชชเซเชฐเซเชเซเชธเซ เชธเชฐเซเชตเชฐเชจเซเช เชธเซเชฐเชเซเชทเชพ เชธเซเชคเชฐ เชเชเชพเชกเซ เชเซ, เชเชพเชฐเชฃ เชเซ เชเชตเชพ เชเซเชกเชพเชฃเชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชตเชฟเชจเชพ เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ. เชเซ เชเซ, เชคเชฎเซ เชจเซเชเซเชจเชพ เชจเชฟเชฐเซเชฆเซเชถเซ เชธเชพเชฅเซ เชชเซเชฐเซเชเซเชธเซ เชธเซเชตเชพเชเชจเซ เชเชเซเชธเซเชธเชจเซ เชตเชงเซ เชจเชเชพเชฐเซ เชถเชเซ เชเซ:
RewriteEngine on
RewriteCond %{SSL:SSL_CLIENT_VERIFY} !=SUCCESS
RewriteRule .? - [F]
ErrorDocument 403 "You need a client side certificate issued by CAcert to access this site"
เชตเชงเซ เชตเชฟเชเชคเชตเชพเชฐ เชฎเชพเชนเชฟเชคเซ ssl เชตเชฟเชถเซเชจเชพ เชฒเซเชเชฎเชพเช เชฎเชณเซ เชถเชเซ เชเซ:
เชฌเชเชจเซ เชตเชฟเชเชฒเซเชชเซเชจเซเช เชชเชฐเซเชเซเชทเชฃ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเชคเซเช, http2 เชชเซเชฐเซเชเซเชเซเชฒ เชธเชพเชฅเซ เชคเซเชจเซ เชตเซเชตเชฟเชงเซเชฏเชคเชพ เช เชจเซ เชธเซเชธเชเชเชคเชคเชพ เชฎเชพเชเซ เชตเชฟเชเชฒเซเชช "b" เชชเชธเชเชฆ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชนเชคเซ.
เช เชชเซเชฐเซเชตเชงเชพเชฐเชฃเชพเชจเซ เชเชเชพเชธเชฃเซ เชชเซเชฐเซเชฃ เชเชฐเชตเชพ เชฎเชพเชเซ, เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชธเชพเชฅเซ เชเชฃเชพ เชชเซเชฐเชฏเซเชเซ เชเชฐเซเชฏเชพ; เชจเซเชเซเชจเซ เชกเชฟเชเชพเชเชจเชจเซเช เชชเชฐเซเชเซเชทเชฃ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช:
เชเซ = เชเชฐเซเชฐเซ = เชซเชฐเซเชฅเซ เชฒเชเซ
เช เชชเชพเชเซ เชเซเชฐ เชซเซเชเชฐเซเชธ เช เชชเชพเชเซ 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
เชเชพเชฐเชฃ เชเซ LuaHookAccessChecker Nginx เชจเซ เช เชฎเชพเชนเชฟเชคเซเชจเชพ เชเชงเชพเชฐเซ เชเชเซเชธเซเชธ เชเซเช เชเชฐเซเชฏเชพ เชชเชเซ เช เชธเชเซเชฐเชฟเชฏ เชฅเชถเซ.
เชธเซเชคเซเชฐเซเชคเชจเซ เชฒเชฟเชเช
เชฌเซเชเซ เชเช เชตเชพเชค.
เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ, เช เชชเชพเชเซ (เชเชฆเชพเช Nginx เชชเชฃ) เชฐเซเชชเชฐเซเชเชพเชเชเชจเชฎเชพเช เชจเชฟเชฐเซเชฆเซเชถเซ เชเชฏเชพ เชเซเชฐเชฎเชฎเชพเช เชฒเชเชตเชพเชฎเชพเช เชเชตเซ เชเซ เชคเซเชจเชพเชฅเซ เชเซเช เชซเชฐเช เชชเชกเชคเซ เชจเชฅเซ, เชเชพเชฐเชฃ เชเซ เช เชเชคเซ เชฌเชงเซเช เช เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเซ เชตเชฟเชจเชเชคเซเชจเชพ เชเซเชฐเชฎเชจเชพ เชเชงเชพเชฐเซ เชธเซเชฐเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ, เชเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชฎเชพเชเซเชจเซ เชฏเซเชเชจเชพเชจเซ เช เชจเซเชฐเซเชช เชเซ. เชฒเซเช เชธเซเชเซเชฐเชฟเชชเซเชเซ.
เชชเซเชฐเซเชฃเชคเชพ:
เช
เชฎเชฒเซเชเชฐเชฃ เชชเชเซ เชฆเซเชถเซเชฏเชฎเชพเชจ เชธเซเชฅเชฟเชคเชฟ (เชงเซเชฏเซเชฏ):
เชธเซเชตเชพเช เช
เชจเซ เชเชจเซเชซเซเชฐเชพเชธเซเชเซเชฐเชเซเชเชฐเชจเซเช เชธเชเชเชพเชฒเชจ IOS เชชเชฐ เชฎเซเชฌเชพเชเชฒ เชซเซเชจเชฅเซ เชตเชงเชพเชฐเชพเชจเชพ เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ (VPN) เชตเชฟเชจเชพ เชเชชเชฒเชฌเซเชง เชเซ, เชเชเซเชเซเชค เช
เชจเซ เชธเซเชฐเชเซเชทเชฟเชค.
เชงเซเชฏเซเชฏ เชนเชพเชเชธเชฒ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชเซ, เชตเซเชฌ เชธเซเชเซเชเซเชธ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ เช เชจเซ เชคเซเชจเซ เชธเซเชฐเชเซเชทเชพเชจเซเช เชธเซเชคเชฐ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชเชฐเชคเชพเช เชเชเซเช เชจเชฅเซ.
เชธเซเชฐเซเชธ: www.habr.com