āύāĻŋāĻŦāύā§āϧāĻāĻŋ āϤāĻžāĻĻā§āϰ āĻāύā§āϝ āĻĻāϰāĻāĻžāϰ⧠āĻšāĻŦā§ āϝāĻžāϰāĻž:
- āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ āĻļāĻāϏāĻžāĻĒāϤā§āϰ āĻā§ āϤāĻž āĻāĻžāύ⧠āĻāĻŦāĻ āĻā§āύ āĻŽā§āĻŦāĻžāĻāϞ āϏāĻžāĻĢāĻžāϰāĻŋāϤ⧠āĻāϝāĻŧā§āĻŦāϏāĻā§āĻā§āϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āϤāĻž āĻŦā§āĻā§;
- āĻāĻŽāĻŋ āĻāĻāĻāĻŋ āϏā§āĻŽāĻŋāϤ āĻŦā§āϤā§āϤā§āϰ āĻāĻžāĻā§ āĻŦāĻž āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āύāĻŋāĻā§āϰ āĻāĻžāĻā§ āĻāϝāĻŧā§āĻŦ āĻĒāϰāĻŋāώā§āĻŦāĻž āĻĒā§āϰāĻāĻžāĻļ āĻāϰāϤ⧠āĻāĻžāĻ;
- āĻŽāύ⧠āĻāϰ⧠āϝ⧠āϏāĻŦāĻāĻŋāĻā§ āĻāϤāĻŋāĻŽāϧā§āϝā§āĻ āĻā§āĻ āĻāϰā§āĻā§, āĻāĻŦāĻ āĻŦāĻŋāĻļā§āĻŦāĻā§ āĻāĻāĻā§ āĻŦā§āĻļāĻŋ āϏā§āĻŦāĻŋāϧāĻžāĻāύāĻ āĻāĻŦāĻ āύāĻŋāϰāĻžāĻĒāĻĻ āĻāϰāϤ⧠āĻāĻžāϝāĻŧāĨ¤
āĻāϝāĻŧā§āĻŦāϏāĻā§āĻā§āϰ āĻāϤāĻŋāĻšāĻžāϏ āĻĒā§āϰāĻžāϝāĻŧ 8 āĻŦāĻāϰ āĻāĻā§ āĻļā§āϰ⧠āĻšāϝāĻŧā§āĻāĻŋāϞāĨ¤ āĻĒā§āϰā§āĻŦā§, āĻĒāĻĻā§āϧāϤāĻŋāĻā§āϞāĻŋ āĻĻā§āϰā§āĻ HTTP āĻ
āύā§āϰā§āϧā§āϰ āĻāĻāĻžāϰ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧā§āĻāĻŋāϞ (āĻāϏāϞ⧠āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž): āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻŦā§āϰāĻžāĻāĻāĻžāϰ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻāĻāĻāĻŋ āĻ
āύā§āϰā§āϧ āĻĒāĻžāĻ āĻŋāϝāĻŧā§āĻāĻŋāϞ āĻāĻŦāĻ āĻāĻŋāĻā§ āĻāϤā§āϤāϰ āĻĻā§āĻāϝāĻŧāĻžāϰ āĻāύā§āϝ āĻ
āĻĒā§āĻā§āώāĻž āĻāϰā§āĻāĻŋāϞ, āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻžāϰ āĻĒāϰ⧠āĻāĻāĻŋ āĻāĻŦāĻžāϰ āϏāĻāϝā§āĻā§āϤ āĻšāϝāĻŧā§āĻāĻŋāϞ āĻāĻŦāĻ āĻ
āĻĒā§āĻā§āώāĻž āĻāϰā§āĻāĻŋāϞāĨ¤ āĻāĻŋāύā§āϤ⧠āϤāĻžāϰāĻĒāϰ āĻāϝāĻŧā§āĻŦāϏāĻā§āĻ āĻšāĻžāĻāĻŋāϰāĨ¤

āĻāϝāĻŧā§āĻ āĻŦāĻāϰ āĻāĻā§, āĻāĻŽāϰāĻž āĻŦāĻŋāĻļā§āĻĻā§āϧ āĻĒāĻŋāĻāĻāĻāĻĒāĻŋ-āϤ⧠āĻāĻŽāĻžāĻĻā§āϰ āύāĻŋāĻāϏā§āĻŦ āĻŦāĻžāϏā§āϤāĻŦāĻžāϝāĻŧāύ āϤā§āϰāĻŋ āĻāϰā§āĻāĻŋ, āϝāĻž https āĻ
āύā§āϰā§āϧāĻā§āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āύāĻž, āϝā§āĻšā§āϤ⧠āĻāĻāĻŋ āϞāĻŋāĻā§āĻ āϏā§āϤāϰāĨ¤ āĻā§āĻŦ āĻŦā§āĻļāĻŋāĻĻāĻŋāύ āĻāĻā§, āĻĒā§āϰāĻžāϝāĻŧ āϏāĻŦ āĻāϝāĻŧā§āĻŦ āϏāĻžāϰā§āĻāĻžāϰ https āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻĒā§āϰāĻā§āϏāĻŋ āϰāĻŋāĻā§āϝāĻŧā§āϏā§āĻ āĻāĻŦāĻ āĻāĻžāύā§āĻāĻļāύ āϏāĻŽāϰā§āĻĨāύ āĻāϰāϤ⧠āĻļāĻŋāĻā§āĻā§:āĻāĻĒāĻā§āϰā§āĻĄāĨ¤
āϝāĻāύ āĻāĻāĻŋ āĻāĻā§āĻāĻŋāϞ, āĻāϝāĻŧā§āĻŦāϏāĻā§āĻāĻā§āϞāĻŋ āĻāϏāĻĒāĻŋāĻ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻā§āϞāĻŋāϰ āĻāύā§āϝ āĻĒā§āϰāĻžāϝāĻŧ āĻĄāĻŋāĻĢāϞā§āĻ āĻĒāϰāĻŋāώā§āĻŦāĻž āĻšāϝāĻŧā§ āĻāĻ ā§, āĻāĻžāϰāĻŖ āϏāĻžāϰā§āĻāĻžāϰā§āϰ āĻāĻĻā§āϝā§āĻā§ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻā§ āϏāĻžāĻŽāĻā§āϰ⧠āϏāϰāĻŦāϰāĻžāĻš āĻāϰāĻž āĻāϤāĻāĻž āϏā§āĻŦāĻŋāϧāĻžāĻāύāĻ (āĻ āύā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻāĻžāĻ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻŦāĻžāϰā§āϤāĻž āĻĒā§āϰā§āϰāĻŖ āĻŦāĻž āĻāĻāĻāĻŋ āĻāĻŋāϤā§āϰ, āύāĻĨāĻŋ, āĻāĻĒāϏā§āĻĨāĻžāĻĒāύāĻžāϰ āĻāĻāĻāĻŋ āύāϤā§āύ āϏāĻāϏā§āĻāϰāĻŖ āĻĄāĻžāĻāύāϞā§āĻĄ āĻāϰā§āύ āϝ⧠āĻ āύā§āϝ āĻā§āĻ āĻŦāϰā§āϤāĻŽāĻžāύ⧠āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž āĻāϰāĻā§)āĨ¤
āϝāĻĻāĻŋāĻ āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ āĻļāĻāϏāĻžāĻĒāϤā§āϰāĻāĻŋ āĻŦā§āĻļ āĻāĻŋāĻā§āĻĻāĻŋāύ āϧāϰ⧠āĻāĻā§, āϤāĻŦā§āĻ āĻāĻāĻŋ āĻāĻāύāĻ āĻāĻžāϰāĻžāĻĒāĻāĻžāĻŦā§ āϏāĻŽāϰā§āĻĨāĻŋāϤ āϰāϝāĻŧā§ āĻā§āĻā§, āĻāĻžāϰāĻŖ āĻāĻāĻŋ āĻŦāĻžāĻāĻĒāĻžāϏ āĻāϰāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻāĻāĻŋ āĻ āύā§āĻ āϏāĻŽāϏā§āϝāĻž āϤā§āϰāĻŋ āĻāϰā§āĨ¤ āĻāĻŦāĻ (āϏāĻŽā§āĻāĻŦāϤ :slightly_smiling_face: ) āϏā§āĻ āĻāĻžāϰāĻŖā§āĻ IOS āĻŦā§āϰāĻžāĻāĻāĻžāϰāĻā§āϞāĻŋ (āϏāĻžāĻĢāĻžāϰāĻŋ āĻāĻžāĻĄāĻŧāĻž) āĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻāĻžāϝāĻŧ āύāĻž āĻāĻŦāĻ āϏā§āĻĨāĻžāύā§āϝāĻŧ āĻļāĻāϏāĻžāĻĒāϤā§āϰā§āϰ āĻĻā§āĻāĻžāύ āĻĨā§āĻā§ āĻāĻāĻŋāϰ āĻāύā§āϝ āĻ āύā§āϰā§āϧ āĻāϰā§āĨ¤ āϞāĻāĻāύ/āĻĒāĻžāϏ āĻŦāĻž ssh āĻā§ āĻŦāĻž āĻĢāĻžāϝāĻŧāĻžāϰāĻāϝāĻŧāĻžāϞā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āĻĒā§āϰā§āĻ āĻŦāύā§āϧ āĻāϰāĻžāϰ āϤā§āϞāύāĻžāϝāĻŧ āϏāĻžāϰā§āĻāĻŋāĻĢāĻŋāĻā§āĻā§āϰ āĻ āύā§āĻ āϏā§āĻŦāĻŋāϧāĻž āϰāϝāĻŧā§āĻā§āĨ¤ āĻāĻŋāύā§āϤ⧠āϝ⧠āĻāĻ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻŋ āύāĻž.
āĻāĻāĻāĻāϏ-āĻ, āĻāĻāĻāĻŋ āĻļāĻāϏāĻžāĻĒāϤā§āϰ āĻāύāϏā§āĻāϞ āĻāϰāĻžāϰ āĻĒāĻĻā§āϧāϤāĻŋāĻāĻŋ āĻŦā§āĻļ āϏāĻšāĻ (āύāĻŋāϰā§āĻĻāĻŋāώā§āĻāĻāĻžāĻŦā§ āύāϝāĻŧ), āϤāĻŦā§ āϏāĻžāϧāĻžāϰāĻŖāĻāĻžāĻŦā§ āĻāĻāĻŋ āύāĻŋāϰā§āĻĻā§āĻļāĻžāĻŦāϞ⧠āĻ āύā§āϏāĻžāϰ⧠āĻāϰāĻž āĻšāϝāĻŧ, āϝāĻžāϰ āĻŽāϧā§āϝ⧠āĻāύā§āĻāĻžāϰāύā§āĻā§ āĻ āύā§āĻāĻā§āϞāĻŋ āϰāϝāĻŧā§āĻā§ āĻāĻŦāĻ āϝāĻž āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āϏāĻžāĻĢāĻžāϰāĻŋ āĻŦā§āϰāĻžāĻāĻāĻžāϰā§āϰ āĻāύā§āϝ āĻāĻĒāϞāĻŦā§āϧāĨ¤ āĻĻā§āϰā§āĻāĻžāĻā§āϝāĻŦāĻļāϤ, Safari āĻāϝāĻŧā§āĻŦ āϏāĻā§āĻā§āϰ āĻāύā§āϝ āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ ĐĄert āĻā§āĻāĻžāĻŦā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻšāϝāĻŧ āϤāĻž āĻāĻžāύ⧠āύāĻž, āϤāĻŦā§ āĻā§āĻāĻžāĻŦā§ āĻāĻ āϧāϰāύā§āϰ āĻļāĻāϏāĻžāĻĒāϤā§āϰ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻšāϝāĻŧ āϏ⧠āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāύā§āĻāĻžāϰāύā§āĻā§ āĻ āύā§āĻ āύāĻŋāϰā§āĻĻā§āĻļāĻžāĻŦāϞ⧠āϰāϝāĻŧā§āĻā§, āĻāĻŋāύā§āϤ⧠āĻŦāĻžāϏā§āϤāĻŦā§ āĻāĻāĻŋ āĻ āĻĒā§āϰāĻžāĻĒā§āϝāĨ¤

āĻāϝāĻŧā§āĻŦāϏāĻā§āĻ āĻŦā§āĻāĻžāϰ āĻāύā§āϝ, āĻāĻŽāϰāĻž āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻĒāϰāĻŋāĻāϞā§āĻĒāύāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĻāĻŋ: āϏāĻŽāϏā§āϝāĻž/āĻ
āύā§āĻŽāĻžāύ/āϏāĻŽāĻžāϧāĻžāύāĨ¤
āϏāĻŽāϏā§āϝāĻž: IOS āĻāϰ āĻāύā§āϝ Safari āĻŽā§āĻŦāĻžāĻāϞ āĻŦā§āϰāĻžāĻāĻāĻžāϰ⧠āĻāĻāĻāĻŋ āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ āĻļāĻāϏāĻžāĻĒāϤā§āϰ āĻĻā§āĻŦāĻžāϰāĻž āϏā§āϰāĻā§āώāĻŋāϤ āϏāĻāϏā§āĻĨāĻžāύāĻā§āϞāĻŋāϰ āĻ āύā§āϰā§āϧ āĻĒā§āϰāĻā§āϏāĻŋ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻāϝāĻŧā§āĻŦ āϏāĻā§āĻāĻā§āϞāĻŋāϰ āĻāύā§āϝ āĻā§āύāĻ āϏāĻŽāϰā§āĻĨāύ āύā§āĻ āĻāĻŦāĻ āĻļāĻāϏāĻžāĻĒāϤā§āϰ āϏāĻŽāϰā§āĻĨāύ āϏāĻā§āώāĻŽ āĻāϰāĻž āĻ āύā§āϝāĻžāύā§āϝ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻā§āϞāĻŋāϰ āĻāύā§āϝāĨ¤
āĻ āύā§āĻŽāĻžāύ:
- āĻ āĻā§āϝāύā§āϤāϰā§āĻŖ/āĻŦāĻžāĻšā§āϝāĻŋāĻ āĻĒā§āϰāĻā§āϏāĻŋ āϰāĻŋāϏā§āϰā§āϏā§āϰ āĻāϝāĻŧā§āĻŦāϏāĻā§āĻāĻā§āϞāĻŋāϤ⧠āϏāĻžāϰā§āĻāĻŋāĻĢāĻŋāĻā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āĻāύā§āϝ (āĻā§āύā§āĻāĻŋāĻ āĻĨāĻžāĻāĻŦā§ āύāĻž āĻā§āύā§) āĻāĻ āϧāϰāύā§āϰ āĻŦā§āϝāϤāĻŋāĻā§āϰāĻŽ āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāĻž āϏāĻŽā§āĻāĻŦāĨ¤
- āĻāϝāĻŧā§āĻŦāϏāĻā§āĻā§āϰ āĻāύā§āϝ, āĻāĻĒāύāĻŋ āĻ āϏā§āĻĨāĻžāϝāĻŧā§ āϏā§āĻļāύāĻā§āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻāĻāĻŋ āĻ āύāύā§āϝ, āϏā§āϰāĻā§āώāĻŋāϤ āĻāĻŦāĻ āĻĒā§āϰāϤāĻŋāϰāĻā§āώāĻžāϝā§āĻā§āϝ āϏāĻāϝā§āĻ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ āϝāĻž āĻāĻāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖ (āύāύ-āĻāϝāĻŧā§āĻŦāϏāĻā§āĻ) āĻŦā§āϰāĻžāĻāĻāĻžāϰ āĻ āύā§āϰā§āϧā§āϰ āϏāĻŽāϝāĻŧ āϤā§āϰāĻŋ āĻšāϝāĻŧāĨ¤
- āĻāĻāĻāĻŋ āĻĒā§āϰāĻā§āϏāĻŋ āĻāϝāĻŧā§āĻŦ āϏāĻžāϰā§āĻāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻ āϏā§āĻĨāĻžāϝāĻŧā§ āϏā§āĻļāύ āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰ⧠(āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻ āύā§āϤāϰā§āύāĻŋāϰā§āĻŽāĻŋāϤ āĻŽāĻĄāĻŋāĻāϞ āĻāĻŦāĻ āĻĢāĻžāĻāĻļāύ)āĨ¤
- āĻ āϏā§āĻĨāĻžāϝāĻŧā§ āϏā§āĻļāύ āĻā§āĻā§āύāĻā§āϞāĻŋ āĻāϤāĻŋāĻŽāϧā§āϝ⧠āĻĒā§āϰāϏā§āϤā§āϤ-āϤā§āϰāĻŋ Apache āĻŽāĻĄāĻŋāĻāϞ āĻšāĻŋāϏāĻžāĻŦā§ āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§ā§ˇ
- āĻ āϏā§āĻĨāĻžāϝāĻŧā§ āϏā§āĻļāύ āĻā§āĻā§āύāĻā§āϞāĻŋ āϝā§āĻā§āϤāĻŋāϝā§āĻā§āϤāĻāĻžāĻŦā§ āĻŽāĻŋāĻĨāϏā§āĻā§āϰāĻŋāϝāĻŧāĻž āĻāĻžāĻ āĻžāĻŽā§ āĻĄāĻŋāĻāĻžāĻāύ āĻāϰ⧠āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤
āĻŦāĻžāϏā§āϤāĻŦāĻžāϝāĻŧāύā§āϰ āĻĒāϰ āĻĻā§āĻļā§āϝāĻŽāĻžāύ āĻ āĻŦāϏā§āĻĨāĻžāĨ¤
āĻāĻžāĻā§āϰ āϞāĻā§āώā§āϝ: āĻĒāϰāĻŋāώā§āĻŦāĻž āĻāĻŦāĻ āĻĒāϰāĻŋāĻāĻžāĻ āĻžāĻŽā§āϰ āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻž āĻ āϤāĻŋāϰāĻŋāĻā§āϤ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ (āϝā§āĻŽāύ VPN), āĻāĻāύāĻŋāĻĢāĻžāĻāĻĄ āĻāĻŦāĻ āϏā§āϰāĻā§āώāĻŋāϤ āĻāĻžāĻĄāĻŧāĻž IOS-āĻ āĻŽā§āĻŦāĻžāĻāϞ āĻĢā§āύ āĻĨā§āĻā§ āĻ ā§āϝāĻžāĻā§āϏā§āϏāϝā§āĻā§āϝ āĻšāĻāϝāĻŧāĻž āĻāĻāĻŋāϤāĨ¤
āĻ āϤāĻŋāϰāĻŋāĻā§āϤ āϞāĻā§āώā§āϝ: āĻŽā§āĻŦāĻžāĻāϞ āĻāύā§āĻāĻžāϰāύā§āĻā§ āĻĻā§āϰā§āϤ āϏāĻžāĻŽāĻā§āϰ⧠āϏāϰāĻŦāϰāĻžāĻšā§āϰ āϏāĻžāĻĨā§ āϏāĻŽāϝāĻŧ āĻāĻŦāĻ āϏāĻāϏā§āĻĨāĻžāύ/āĻĢā§āύ āĻā§āϰāĻžāĻĢāĻŋāĻ (āĻāϝāĻŧā§āĻŦ āϏāĻā§āĻ āĻāĻžāĻĄāĻŧāĻž āĻāĻŋāĻā§ āĻĒāϰāĻŋāώā§āĻŦāĻž āĻ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āĻ āύā§āϰā§āϧ āϤā§āϰāĻŋ āĻāϰā§) āϏāĻžāĻļā§āϰāϝāĻŧ āĻāϰā§āĨ¤
āĻāĻŋāĻāĻžāĻŦā§ āĻā§āĻ āĻāϰāĻŦā§āύ?
1. āĻā§āϞāĻž āĻĒāĻžāϤāĻž:
â ĐŊаĐŋŅиĐŧĐĩŅ, https://teamcity.yourdomain.com в ĐŧОйиĐģŅĐŊĐžĐŧ ĐąŅаŅСĐĩŅĐĩ Safari (Đ´ĐžŅŅŅĐŋĐĩĐŊ ŅаĐēĐļĐĩ в Đ´ĐĩŅĐēŅĐžĐŋĐŊОК вĐĩŅŅии) â вŅСŅваĐĩŅ ŅŅĐŋĐĩŅĐŊĐžĐĩ ĐŋОдĐēĐģŅŅĐĩĐŊиĐĩ Đē вĐĩĐą-ŅĐžĐēĐĩŅаĐŧ.
â ĐŊаĐŋŅиĐŧĐĩŅ, https://teamcity.yourdomain.com/admin/admin.html?item=diagnostics&tab=webSâĻâ ĐŋĐžĐēаСŅваĐĩŅ ping/pong.
â ĐŊаĐŋŅиĐŧĐĩŅ, https://rancher.yourdomain.com/p/c-84bnv:p-vkszd/workload/deployment:danidb:phâĻ-> viewlogs â ĐŋĐžĐēаСŅваĐĩŅ ĐģĐžĐŗĐ¸ ĐēĐžĐŊŅĐĩĐšĐŊĐĩŅа.
2. āĻ āĻĨāĻŦāĻž āĻŦāĻŋāĻāĻžāĻļāĻāĻžāϰ⧠āĻāύāϏā§āϞā§:

āĻĒā§āϰāϏā§āϤāĻžāĻŦ āĻā§āϏā§āĻāĻŋāĻ:
1. āĻ āĻā§āϝāύā§āϤāϰā§āĻŖ/āĻŦāĻžāĻšā§āϝāĻŋāĻ āĻĒā§āϰāĻā§āϏāĻŋāĻĄ āϰāĻŋāϏā§āϰā§āϏā§āϰ āĻāϝāĻŧā§āĻŦ āϏāĻā§āĻāĻā§āϞāĻŋāϤ⧠āϏāĻžāϰā§āĻāĻŋāĻĢāĻŋāĻā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āĻāύā§āϝ (āĻā§āύā§āĻāĻŋ āĻĨāĻžāĻāĻŦā§ āύāĻž āĻā§āύā§) āĻāĻ āϧāϰāύā§āϰ āĻŦā§āϝāϤāĻŋāĻā§āϰāĻŽ āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāĻž āϏāĻŽā§āĻāĻŦāĨ¤
āĻāĻāĻžāύ⧠2āĻāĻŋ āϏāĻŽāĻžāϧāĻžāύ āĻĒāĻžāĻāϝāĻŧāĻž āĻā§āĻā§:
āĻ) āϏā§āϤāϰā§
<Location sock*> SSLVerifyClient optional </Location>
<Location /> SSLVerifyClient require </Location>
āĻ ā§āϝāĻžāĻā§āϏā§āϏ āϏā§āϤāϰ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰā§āύāĨ¤
āĻāĻ āĻĒāĻĻā§āϧāϤāĻŋāϰ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āϏā§āĻā§āώā§āĻŽāϤāĻž āϰāϝāĻŧā§āĻā§:
- āĻļāĻāϏāĻžāĻĒāϤā§āϰ āϝāĻžāĻāĻžāĻāĻāϰāĻŖ āĻĒā§āϰāĻā§āϏāĻŋāĻĄ āϰāĻŋāϏā§āϰā§āϏā§āϰ āĻāĻžāĻā§ āĻāĻāĻāĻŋ āĻ āύā§āϰā§āϧā§āϰ āĻĒāϰ⧠āĻāĻā§, āĻ āϰā§āĻĨāĻžā§, āĻĒā§āϏā§āĻ āĻ āύā§āϰā§āϧ āĻšā§āϝāĻžāύā§āĻĄāĻļā§āĻāĨ¤ āĻāϰ āĻŽāĻžāύ⧠āĻšāϞ āϝ⧠āĻĒā§āϰāĻā§āϏāĻŋ āĻĒā§āϰāĻĨāĻŽā§ āϞā§āĻĄ āĻšāĻŦā§ āĻāĻŦāĻ āϤāĻžāϰāĻĒāϰ āϏā§āϰāĻā§āώāĻŋāϤ āĻĒāϰāĻŋāώā§āĻŦāĻžāϤ⧠āĻ āύā§āϰā§āϧāĻāĻŋ āĻā§āĻā§ āĻĻā§āĻŦā§āĨ¤ āĻāĻāĻž āĻāĻžāϰāĻžāĻĒ, āĻāĻŋāύā§āϤ⧠āϏāĻŽāĻžāϞā§āĻāύāĻžāĻŽā§āϞāĻ āύāϝāĻŧ;
- http2 āĻĒā§āϰā§āĻā§āĻāϞā§āĨ¤ āĻāĻāĻŋ āĻāĻāύāĻ āĻāϏāĻĄāĻŧāĻžāϝāĻŧ āϰāϝāĻŧā§āĻā§, āĻāĻŦāĻ āĻŦā§āϰāĻžāĻāĻāĻžāϰ āύāĻŋāϰā§āĻŽāĻžāϤāĻžāϰāĻž āĻāĻžāύā§āύ āύāĻž āĻāĻŋāĻāĻžāĻŦā§ āĻāĻāĻŋ āĻŦāĻžāϏā§āϤāĻŦāĻžāϝāĻŧāύ āĻāϰāϤ⧠āĻšāϝāĻŧ #info about tls1.3 http2 āĻĒā§āϏā§āĻ āĻšā§āϝāĻžāύā§āĻĄāĻļā§āĻ (āĻāĻāύ āĻāĻžāĻ āĻāϰāĻā§ āύāĻž) ;
- āĻāĻ āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻžāĻāϰāĻŖ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻāϤā§āϰāĻŋāϤ āĻāϰāĻž āϝāĻžāϝāĻŧ āϤāĻž āĻĒāϰāĻŋāώā§āĻāĻžāϰ āύāϝāĻŧāĨ¤
āĻ) āĻāĻāĻāĻŋ āĻŽā§āϞāĻŋāĻ āϏā§āϤāϰā§, āĻāĻāĻāĻŋ āĻļāĻāϏāĻžāĻĒāϤā§āϰ āĻāĻžāĻĄāĻŧāĻžāĻ āĻāϏāĻāϏāĻāϞāĻā§ āĻ āύā§āĻŽāϤāĻŋ āĻĻāĻŋāύāĨ¤
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"
āĻāϏāĻāϏāĻāϞ āϏāĻŽā§āĻĒāϰā§āĻā§ āύāĻŋāĻŦāύā§āϧ⧠āĻāϰāĻ āĻŦāĻŋāĻļāĻĻ āϤāĻĨā§āϝ āĻĒāĻžāĻāϝāĻŧāĻž āϝāĻžāĻŦā§:
āĻāĻāϝāĻŧ āĻŦāĻŋāĻāϞā§āĻĒāĻ āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻž āĻšāϝāĻŧā§āĻāĻŋāϞ, āĻŦāĻŋāĻāϞā§āĻĒ "b" āĻŦā§āĻā§ āύā§āĻāϝāĻŧāĻž āĻšāϝāĻŧā§āĻāĻŋāϞ āĻāϰ āĻŦāĻšā§āĻŽā§āĻāĻŋāϤāĻž āĻāĻŦāĻ HTTP2 āĻĒā§āϰā§āĻā§āĻāϞā§āϰ āϏāĻžāĻĨā§ āϏāĻžāĻŽāĻā§āĻāϏā§āϝā§āϰ āĻāύā§āϝāĨ¤
āĻāĻ āĻ āύā§āĻŽāĻžāύāĻāĻŋāϰ āϝāĻžāĻāĻžāĻāĻāϰāĻŖ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻāϰāϤā§, āĻāĻāĻŋ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύā§āϰ āϏāĻžāĻĨā§ āĻ āύā§āĻ āĻĒāϰā§āĻā§āώāĻž āύāĻŋāϰā§āĻā§āώāĻž āĻāϰā§āĻā§; āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻĄāĻŋāĻāĻžāĻāύāĻā§āϞāĻŋ āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻž āĻšāϝāĻŧā§āĻāĻŋāϞ:
if = āĻĒā§āϰāϝāĻŧā§āĻāύ = āĻĒā§āύāϰā§āϞāĻŋāĻāύ
āĻĢāϞāĻžāĻĢāϞ āĻšāϞ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻŽā§āϞāĻŋāĻ āύāĻāĻļāĻž:
SSLVerifyClient optional
RewriteEngine on
RewriteCond %{SSL:SSL_CLIENT_VERIFY} !=SUCCESS
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule .? - [F]
#ErrorDocument 403 "You need a client side certificate issued by CAcert to access this site"
#websocket for safari without cert auth
<If "%{SSL:SSL_CLIENT_VERIFY} != 'SUCCESS'">
<If "%{HTTP:Upgrade} = 'websocket'">
...
#СаĐŧĐĩŅаĐĩĐŧ авŅĐžŅиСаŅĐ¸Ņ ĐŋĐž вĐģадĐĩĐģŅŅŅ ŅĐĩŅŅиŅиĐēаŅа ĐŊа авŅĐžŅиСаŅĐ¸Ņ ĐŋĐž ĐŊĐžĐŧĐĩŅŅ ĐŋŅĐžŅĐžĐēĐžĐģа
SSLUserName SSl_PROTOCOL
</If>
</If>
āĻļāĻāϏāĻžāĻĒāϤā§āϰā§āϰ āĻŽāĻžāϞāĻŋāĻā§āϰ āĻĻā§āĻŦāĻžāϰāĻž āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻ āύā§āĻŽā§āĻĻāύā§āϰ āĻŦāĻŋāώāϝāĻŧāĻāĻŋ āĻŦāĻŋāĻŦā§āĻāύāĻžāϝāĻŧ āύāĻŋāϝāĻŧā§, āĻāĻŋāύā§āϤ⧠āĻāĻāĻāĻŋ āĻ āύā§āĻĒāϏā§āĻĨāĻŋāϤ āĻļāĻāϏāĻžāĻĒāϤā§āϰā§āϰ āϏāĻžāĻĨā§, āĻāĻŽāĻžāĻā§ āĻāĻāĻāĻŋ āĻāĻĒāϞāĻŦā§āϧ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ SSl_PROTOCOL (SSL_CLIENT_S_DN_CN āĻāϰ āĻĒāϰāĻŋāĻŦāϰā§āϤā§) āĻāĻāĻžāϰ⧠āĻāĻāĻāĻŋ āĻ āϏā§āϤāĻŋāϤā§āĻŦāĻšā§āύ āĻļāĻāϏāĻžāĻĒāϤā§āϰā§āϰ āĻŽāĻžāϞāĻŋāĻ āϝā§āĻ āĻāϰāϤ⧠āĻšāϝāĻŧā§āĻāĻŋāϞ, āĻĄāĻā§āĻŽā§āύā§āĻā§āĻļāύ⧠āĻāϰāĻ āĻŦāĻŋāĻļāĻĻ:

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. āĻāĻāĻāĻŋ āĻĒā§āϰāĻā§āϏāĻŋ āĻāϝāĻŧā§āĻŦ āϏāĻžāϰā§āĻāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻ āϏā§āĻĨāĻžāϝāĻŧā§ āϏā§āĻļāύ āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰ⧠(āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻ āύā§āϤāϰā§āύāĻŋāϰā§āĻŽāĻŋāϤ āĻŽāĻĄāĻŋāĻāϞ āĻāĻŦāĻ āĻĢāĻžāĻāĻļāύ)āĨ¤
āĻāĻŽāϰāĻž āĻāĻā§āĻ āĻā§āύā§āĻāĻŋ, Apache āĻāϰ āĻ āύā§āĻāĻā§āϞāĻŋ āĻŽā§āϞ āĻāĻžāϰā§āϝāĻāĻžāϰāĻŋāϤāĻž āϰāϝāĻŧā§āĻā§ āϝāĻž āĻāĻĒāύāĻžāĻā§ āĻļāϰā§āϤāϏāĻžāĻĒā§āĻā§āώ āĻāĻ āύ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻĻā§āϝāĻŧāĨ¤ āϝāĻžāĻāĻšā§āĻ, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻŦā§āϰāĻžāĻāĻāĻžāϰ⧠āĻĨāĻžāĻāĻžāĻāĻžāϞā§āύ āĻāĻŽāĻžāĻĻā§āϰ āϤāĻĨā§āϝ āϏā§āϰāĻā§āώāĻŋāϤ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻŽāĻžāĻĻā§āϰ āĻĒā§āϰāϝāĻŧā§āĻāύ, āϤāĻžāĻ āĻāĻŽāϰāĻž āĻā§ āϏāĻā§āĻāϝāĻŧ āĻāϰāĻŦ āĻāĻŦāĻ āĻā§āύ āĻāϰāĻŦ āĻāĻŦāĻ āĻāĻŽāϰāĻž āĻā§ āĻŦāĻŋāϞā§āĻ-āĻāύ āĻĢāĻžāĻāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦ āϤāĻž āύāĻŋāϰā§āϧāĻžāϰāĻŖ āĻāϰāĻŋ:
- āĻāĻŽāĻžāĻĻā§āϰ āĻāĻāĻāĻŋ āĻā§āĻā§āύ āĻĻāϰāĻāĻžāϰ āϝāĻž āϏāĻšāĻā§ āĻĄāĻŋāĻā§āĻĄ āĻāϰāĻž āϝāĻžāϝāĻŧ āύāĻžāĨ¤
- āĻāĻŽāĻžāĻĻā§āϰ āĻāĻŽāύ āĻāĻāĻāĻŋ āĻā§āĻā§āύ āĻĻāϰāĻāĻžāϰ āϝāĻžāϰ āĻŽāϧā§āϝ⧠āĻ āĻĒā§āϰāĻāϞāĻŋāϤāϤāĻž āϰāϝāĻŧā§āĻā§ āĻāĻŦāĻ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻ āĻĒā§āϰāĻāϞāĻŋāϤāϤāĻž āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻžāϰ āĻā§āώāĻŽāϤāĻž āϰāϝāĻŧā§āĻā§āĨ¤
- āĻāĻŽāĻžāĻĻā§āϰ āĻāĻāĻāĻŋ āĻā§āĻā§āύ āĻĻāϰāĻāĻžāϰ āϝāĻž āĻļāĻāϏāĻžāĻĒāϤā§āϰā§āϰ āĻŽāĻžāϞāĻŋāĻā§āϰ āϏāĻžāĻĨā§ āϝā§āĻā§āϤ āĻšāĻŦā§ā§ˇ
āĻāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻšā§āϝāĻžāĻļāĻŋāĻ āĻĢāĻžāĻāĻļāύ, āĻāĻāĻāĻŋ āϞāĻŦāĻŖ āĻāĻŦāĻ āĻā§āĻā§āύā§āϰ āĻŦāϝāĻŧāϏā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āϤāĻžāϰāĻŋāĻ āĻĒā§āϰāϝāĻŧā§āĻāύ⧎ āĻĄāĻā§āĻŽā§āύā§āĻā§āĻļāύ āĻāĻĒāϰ āĻāĻŋāϤā§āϤāĻŋ āĻāϰ⧠āĻāĻŽāĻžāĻĻā§āϰ āĻāĻžāĻā§ sha1 āĻāĻŦāĻ %{TIME} āĻŦāĻžāĻā§āϏā§āϰ āĻŦāĻžāĻāϰ⧠āϰāϝāĻŧā§āĻā§āĨ¤
āĻĢāϞāĻžāĻĢāϞ āĻāĻ āύāĻāĻļāĻž āĻāĻŋāϞ:
#ĐŊĐĩŅ ŅĐĩŅŅиŅиĐēаŅа, и ОйŅаŅĐĩĐŊиĐĩ Đē websocket
<If "%{SSL:SSL_CLIENT_VERIFY} != 'SUCCESS'">
<If "%{HTTP:Upgrade} = 'websocket'">
SetEnvIf Cookie "zt-cert-sha1=([^;]+)" zt-cert-sha1=$1
SetEnvIf Cookie "zt-cert-uid=([^;]+)" zt-cert-uid=$1
SetEnvIf Cookie "zt-cert-date=([^;]+)" zt-cert-date=$1
#ŅĐžĐģŅĐēĐž ŅаĐē ĐŧĐžĐļĐŊĐž ŅайОŅаŅŅ Ņ ĐŋĐĩŅĐĩĐŧĐĩĐŊĐŊŅĐŧи, ĐŋĐžĐģŅŅĐĩĐŊĐŊŅĐŧи в env-аŅ
в ŅŅĐžŅ ĐŧĐžĐŧĐĩĐŊŅ Đ˛ŅĐĩĐŧĐĩĐŊи, йОĐģĐĩĐĩ ĐžĐŊи ĐŊĐ¸ĐŗĐ´Đĩ ĐŊĐĩ Đ´ĐžŅŅŅĐŋĐŊŅ Đ´ĐģŅ ŅŅĐŊĐēŅии Ņ
ĐĩŅиŅОваĐŊĐ¸Ņ (ĐŋĐž ĐžŅĐ´ĐĩĐģŅĐŊĐžŅŅи ĐŧĐžĐļĐŊĐž, ĐŊĐž ĐŊĐĩ вĐŧĐĩŅŅĐĩ, да и ĐĩŅŅ Ņ Ņ
ĐĩŅиŅОваĐŊиĐĩĐŧ)
<RequireAll>
Require expr %{sha1:salt1%{env:zt-cert-date}salt3%{env:zt-cert-uid}salt2} == %{env:zt-cert-sha1}
Require expr %{env:zt-cert-sha1} =~ /^.{40}$/
</RequireAll>
</If>
</If>
#ĐĩŅŅŅ ŅĐĩŅŅиŅиĐēаŅ, СаĐŋŅаŅиваĐĩŅŅŅ ĐŊĐĩ websocket
<If "%{SSL:SSL_CLIENT_VERIFY} = 'SUCCESS'">
<If "%{HTTP:Upgrade} != 'websocket'">
SetEnvIf Cookie "zt-cert-sha1=([^;]+)" HAVE_zt-cert-sha1=$1
SetEnv zt_cert "path=/; HttpOnly;Secure;SameSite=Strict"
#ĐОвŅĐĩ ĐēŅĐēи ŅŅавŅŅŅŅ, ĐĩŅĐģи ŅŅаŅŅŅ
ĐŊĐĩŅ
Header add Set-Cookie "expr=zt-cert-sha1=%{sha1:salt1%{TIME}salt3%{SSL_CLIENT_S_DN_CN}salt2};%{env:zt_cert}" env=!HAVE_zt-cert-sha1
Header add Set-Cookie "expr=zt-cert-uid=%{SSL_CLIENT_S_DN_CN};%{env:zt_cert}" env=!HAVE_zt-cert-sha1
Header add Set-Cookie "expr=zt-cert-date=%{TIME};%{env:zt_cert}" env=!HAVE_zt-cert-sha1
</If>
</If>
āϞāĻā§āώā§āϝāĻāĻŋ āĻ āϰā§āĻāĻŋāϤ āĻšāϝāĻŧā§āĻā§, āĻāĻŋāύā§āϤ⧠āϏāĻžāϰā§āĻāĻžāϰā§āϰ āĻ āĻĒā§āϰāĻāϞāĻŋāϤāϤāĻžāϰ āϏāĻžāĻĨā§ āϏāĻŽāϏā§āϝāĻž āϰāϝāĻŧā§āĻā§ (āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āĻŦāĻāϰ āĻŦāϝāĻŧāϏ⧠āĻā§āĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ), āϝāĻžāϰ āĻ āϰā§āĻĨ āĻšāϞ āĻā§āĻā§āύāĻā§āϞāĻŋ, āϝāĻĻāĻŋāĻ āĻ āĻā§āϝāύā§āϤāϰā§āĻŖ āĻŦā§āϝāĻŦāĻšāĻžāϰā§āϰ āĻāύā§āϝ āύāĻŋāϰāĻžāĻĒāĻĻ, āĻļāĻŋāϞā§āĻĒ (āĻŦāĻĄāĻŧ) āĻŦā§āϝāĻŦāĻšāĻžāϰā§āϰ āĻāύā§āϝ āĻ āύāĻŋāϰāĻžāĻĒāĻĻ⧎

4. āĻ
āϏā§āĻĨāĻžāϝāĻŧā§ āϏā§āĻļāύ āĻā§āĻā§āύāĻā§āϞāĻŋ āĻāϤāĻŋāĻŽāϧā§āϝ⧠āϤā§āϰāĻŋ-āϤā§āϰāĻŋ Apache āĻŽāĻĄāĻŋāĻāϞ āĻšāĻŋāϏāĻžāĻŦā§ āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§ā§ˇ
āĻĒā§āϰā§āĻŦāĻŦāϰā§āϤ⧠āĻĒā§āύāϰāĻžāĻŦā§āϤā§āϤāĻŋ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻāϞā§āϞā§āĻāϝā§āĻā§āϝ āϏāĻŽāϏā§āϝāĻž āϰāϝāĻŧā§ āĻā§āĻā§ - āĻā§āĻā§āύ āĻŦāĻžāϰā§āϧāĻā§āϝ āύāĻŋāϝāĻŧāύā§āϤā§āϰāĻŖā§ āĻ āĻā§āώāĻŽāϤāĻžāĨ¤
āĻāĻŽāϰāĻž āĻāĻāĻāĻŋ āϰā§āĻĄāĻŋāĻŽā§āĻĄ āĻŽāĻĄāĻŋāĻāϞ āĻā§āĻāĻāĻāĻŋ āϝāĻž āĻāĻāĻŋ āĻāϰā§, āĻļāĻŦā§āĻĻ āĻ āύā§āϏāĻžāϰā§: apache token json two factor auth
āĻšā§āϝāĻžāĻ, āϰā§āĻĄāĻŋāĻŽā§āĻĄ āĻŽāĻĄāĻŋāĻāϞ āĻāĻā§, āĻāĻŋāύā§āϤ⧠āϏā§āĻā§āϞāĻŋ āϏāĻŦāĻ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻā§āϰāĻŋāϝāĻŧāĻžāĻāϞāĻžāĻĒā§āϰ āϏāĻžāĻĨā§ āĻāĻŦāĻĻā§āϧ āĻāĻŦāĻ āĻāĻāĻāĻŋ āϏā§āĻļāύ āĻāĻŦāĻ āĻ
āϤāĻŋāϰāĻŋāĻā§āϤ āĻā§āĻāĻŋāĻ āĻļā§āϰ⧠āĻāϰāĻžāϰ āĻāĻāĻžāϰ⧠āĻāϰā§āĻāĻŋāĻĢā§āϝāĻžāĻā§āĻ āϰāϝāĻŧā§āĻā§ā§ˇ āĻ
āϰā§āĻĨāĻžā§ āĻāĻŋāĻā§āĻā§āώāĻŖā§āϰ āĻāύā§āϝ āύāϝāĻŧāĨ¤
āĻ
āύā§āϏāύā§āϧāĻžāύ āĻāϰāϤ⧠āĻāĻŽāĻžāĻĻā§āϰ āĻĒāĻžāĻāĻ āĻāύā§āĻāĻž āϏāĻŽāϝāĻŧ āϞā§āĻā§āĻā§, āϝāĻž āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻĢāϞāĻžāĻĢāϞ āĻĻā§āϝāĻŧāύāĻŋāĨ¤
5. āĻ āϏā§āĻĨāĻžāϝāĻŧā§ āϏā§āĻļāύ āĻā§āĻā§āύāĻā§āϞāĻŋāĻā§ āϝā§āĻā§āϤāĻŋāϝā§āĻā§āϤāĻāĻžāĻŦā§ āĻŽāĻŋāĻĨāϏā§āĻā§āϰāĻŋāϝāĻŧāĻžāĻā§āϞāĻŋāϰ āĻāĻžāĻ āĻžāĻŽā§ āĻĄāĻŋāĻāĻžāĻāύ āĻāϰ⧠āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤
āϰā§āĻĄāĻŋāĻŽā§āĻĄ āĻŽāĻĄāĻŋāĻāϞ āĻā§āĻŦ āĻāĻāĻŋāϞ, āĻāĻžāϰāĻŖ āĻāĻŽāĻžāĻĻā§āϰ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāϝāĻŧā§āĻāĻāĻŋ āĻĢāĻžāĻāĻļāύ āĻĻāϰāĻāĻžāϰāĨ¤
āĻŦāϞāĻž āĻšāĻā§āĻā§, āϤāĻžāϰāĻŋāĻā§āϰ āϏāĻžāĻĨā§ āϏāĻŽāϏā§āϝāĻž āĻšāϞ āϝ⧠Apache-āĻāϰ āĻ āύā§āϤāϰā§āύāĻŋāϰā§āĻŽāĻŋāϤ āĻĢāĻžāĻāĻļāύāĻā§āϞāĻŋ āĻāĻŦāĻŋāώā§āϝāϤ⧠āĻĨā§āĻā§ āĻāĻāĻāĻŋ āϤāĻžāϰāĻŋāĻ āϤā§āϰāĻŋ āĻāϰāĻžāϰ āĻ āύā§āĻŽāϤāĻŋ āĻĻā§āϝāĻŧ āύāĻž āĻāĻŦāĻ āĻ āĻĒā§āϰāĻāϞāĻŋāϤāϤāĻž āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻ āύā§āϤāϰā§āύāĻŋāϰā§āĻŽāĻŋāϤ āĻĢāĻžāĻāĻļāύ⧠āĻā§āύāĻ āĻāĻžāĻŖāĻŋāϤāĻŋāĻ āϝā§āĻ/āĻŦāĻŋāϝāĻŧā§āĻ āύā§āĻāĨ¤
āĻ āϰā§āĻĨāĻžā§, āĻāĻĒāύāĻŋ āϞāĻŋāĻāϤ⧠āĻĒāĻžāϰāĻŦā§āύ āύāĻž:
(%{env:zt-cert-date} + 30) > %{DATE}
āĻāĻĒāύāĻŋ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻĻā§āĻāĻŋ āϏāĻāĻā§āϝāĻž āϤā§āϞāύāĻž āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ.
āϏāĻžāĻĢāĻžāϰāĻŋ āϏāĻŽāϏā§āϝāĻžāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āϏāĻŽāĻžāϧāĻžāύ āĻ
āύā§āϏāύā§āϧāĻžāύ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ, āĻāĻŽāĻŋ āĻāĻāĻāĻŋ āĻāĻāϰā§āώāĻŖā§āϝāĻŧ āύāĻŋāĻŦāύā§āϧ āĻā§āĻāĻā§ āĻĒā§āϝāĻŧā§āĻāĻŋ:
āĻāĻāĻŋ Nginx-āĻāϰ āĻāύā§āϝ āϞā§āϝāĻŧāĻžāϤ⧠āĻā§āĻĄā§āϰ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāϰāĻŖ āĻŦāϰā§āĻŖāύāĻž āĻāϰā§, āĻāĻŦāĻ āĻāĻāĻŋ āϝā§āĻŽāύ āĻĻā§āĻāĻž āĻā§āĻā§, āĻšā§āϝāĻžāĻļāĻŋāĻāϝāĻŧā§āϰ āĻāύā§āϝ hmac āϏāϞā§āĻāĻŋāĻ āĻĒāĻĻā§āϧāϤāĻŋāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻŦāĻžāĻĻ āĻĻāĻŋāϝāĻŧā§, āĻāĻŽāϰāĻž āĻāϤāĻŋāĻŽāϧā§āϝ⧠āϝ⧠āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύāĻāĻŋ āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰā§āĻāĻŋ āϤāĻžāϰ āĻ
āĻāĻļāĻāĻŋāϰ āϝā§āĻā§āϤāĻŋāϰ āĻĒā§āύāϰāĻžāĻŦā§āϤā§āϤāĻŋ āĻāϰ⧠( āĻāĻāĻŋ Apache āĻ āĻĒāĻžāĻāϝāĻŧāĻž āϝāĻžāϝāĻŧāύāĻŋ)āĨ¤
āĻāĻāĻž āϏā§āĻĒāώā§āĻ āĻšāϝāĻŧā§ āĻā§āϞ āϝ⧠āϞā§āϝāĻŧāĻž āĻšāϞ āĻāĻāĻāĻŋ āϏā§āϏā§āĻĒāώā§āĻ āϝā§āĻā§āϤāĻŋāϝā§āĻā§āϤ āĻāĻžāώāĻž, āĻāĻŦāĻ āĻ ā§āϝāĻžāĻĒāĻžāĻāĻŋāϰ āĻāύā§āϝ āϏāĻšāĻ āĻāĻŋāĻā§ āĻāϰāĻž āϏāĻŽā§āĻāĻŦ:
Nginx āĻāĻŦāĻ Apache āĻāϰ āϏāĻžāĻĨā§ āĻĒāĻžāϰā§āĻĨāĻā§āϝ āĻ āϧā§āϝāϝāĻŧāύ āĻāϰā§:
āĻāĻŦāĻ Lua āĻāĻžāώāĻž āĻĒā§āϰāϏā§āϤā§āϤāĻāĻžāϰāĻā§āϰ āĻĨā§āĻā§ āĻāĻĒāϞāĻŦā§āϧ āĻĢāĻžāĻāĻļāύ:
āĻŦāϰā§āϤāĻŽāĻžāύā§āϰ āϏāĻžāĻĨā§ āϤā§āϞāύāĻž āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻŦāĻŋāώā§āϝāϤā§āϰ āĻāĻāĻāĻŋ āϤāĻžāϰāĻŋāĻ āϏā§āĻ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻŽāϰāĻž āĻāĻāĻāĻŋ āĻā§āĻ āϞā§āϝāĻŧāĻž āĻĢāĻžāĻāϞ⧠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 āĻĨā§āĻā§ āĻāĻ āϤāĻĨā§āϝā§āϰ āĻāĻĒāϰ āĻāĻŋāϤā§āϤāĻŋ āĻāϰ⧠āĻ ā§āϝāĻžāĻā§āϏā§āϏ āĻā§āĻ āĻāϰāĻžāϰ āĻĒāϰ⧠āϏāĻā§āϰāĻŋāϝāĻŧ āĻāϰāĻž āĻšāĻŦā§āĨ¤

āĻā§āϏ āϞāĻŋāĻā§āĻ.
āĻāϰāĻ āĻāĻ āĻŽā§āĻšā§āϰā§āϤāĨ¤
āϏāĻžāϧāĻžāϰāĻŖāĻāĻžāĻŦā§, Apache (āϏāĻŽā§āĻāĻŦāϤ Nginx) āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ⧠āύāĻŋāϰā§āĻĻā§āĻļāĻžāĻŦāϞ⧠āĻā§āύ āĻā§āϰāĻŽā§ āϞā§āĻāĻž āĻšāϝāĻŧā§āĻā§ āϤāĻž āĻŦāĻŋāĻŦā§āĻā§āϝ āύāϝāĻŧ, āϝā§āĻšā§āϤ⧠āĻļā§āώ āĻĒāϰā§āϝāύā§āϤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻ āύā§āϰā§āϧā§āϰ āĻāĻĻā§āĻļā§āϰ āĻāĻŋāϤā§āϤāĻŋāϤ⧠āϏāĻŦāĻāĻŋāĻā§ āϏāĻžāĻāĻžāύ⧠āĻšāĻŦā§, āϝāĻž āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻžāĻāϰāĻŖā§āϰ āϏā§āĻāĻŋāĻŽā§āϰ āϏāĻžāĻĨā§ āĻŽāĻŋāϞ⧠āϝāĻžāϝāĻŧāĨ¤ āϞā§āϝāĻŧāĻž āϏā§āĻā§āϰāĻŋāĻĒā§āĻāĨ¤
āϏāĻŽāĻžāĻĒā§āϤāĻŋ:
āĻŦāĻžāϏā§āϤāĻŦāĻžāϝāĻŧāύā§āϰ āĻĒāϰ āĻĻā§āĻļā§āϝāĻŽāĻžāύ āĻ
āĻŦāϏā§āĻĨāĻž (āϞāĻā§āώā§āϝ):
āĻ
āϤāĻŋāϰāĻŋāĻā§āϤ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ (VPN), āĻāĻāύāĻŋāĻĢāĻžāĻāĻĄ āĻāĻŦāĻ āϏā§āϰāĻā§āώāĻŋāϤ āĻāĻžāĻĄāĻŧāĻž IOS-āĻ āĻŽā§āĻŦāĻžāĻāϞ āĻĢā§āύ āĻĨā§āĻā§ āĻĒāϰāĻŋāώā§āĻŦāĻž āĻāĻŦāĻ āĻĒāϰāĻŋāĻāĻžāĻ āĻžāĻŽā§āϰ āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻž āĻāĻĒāϞāĻŦā§āϧāĨ¤
āϞāĻā§āώā§āϝ āĻ āϰā§āĻāύ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§, āĻāϝāĻŧā§āĻŦ āϏāĻā§āĻ āĻāĻžāĻ āĻāϰ⧠āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻļāĻāϏāĻžāĻĒāϤā§āϰā§āϰ āĻā§āϝāĻŧā§ āĻāĻŽ āύāĻŋāϰāĻžāĻĒāϤā§āϤāĻžāϰ āϏā§āϤāϰ āϰāϝāĻŧā§āĻā§āĨ¤

āĻāϤā§āϏ: www.habr.com
