ZeroTech рд╡рд░ рдЖрдореНрд╣реА Apple Safari рдЖрдгрд┐ рдХреНрд▓рд╛рдпрдВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдВрдирд╛ рд╡реЗрдмрд╕реЙрдХреЗрдЯрд╕рд╣ рдХрд╕реЗ рдЬреЛрдбрд▓реЗ

рд▓реЗрдЦ рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рдЙрдкрдпреБрдХреНрдд рдард░реЗрд▓ рдЬреЗ:

  • рдХреНрд▓рд╛рдпрдВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╛рдп рдЖрд╣реЗ рд╣реЗ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ рдЖрдгрд┐ рдореЛрдмрд╛рдЗрд▓ рд╕рдлрд╛рд░реАрд╡рд░ рд╡реЗрдмрд╕реЙрдХреЗрдЯреНрд╕рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдЖрд╣реЗ рд╣реЗ рд╕рдордЬрддреЗ;
  • рдореА рд▓реЛрдХрд╛рдВрдЪреНрдпрд╛ рдорд░реНрдпрд╛рджрд┐рдд рд╡рд░реНрддреБрд│рд╛рд╕рд╛рдареА рдХрд┐рдВрд╡рд╛ рдлрдХреНрдд рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА рд╡реЗрдм рд╕реЗрд╡рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реВ рдЗрдЪреНрдЫрд┐рддреЛ;
  • рдЕрд╕реЗ рд╡рд╛рдЯрддреЗ рдХреА рд╕рд░реНрд╡ рдХрд╛рд╣реА рдЖрдзреАрдЪ рдХреЛрдгреАрддрд░реА рдХреЗрд▓реЗ рдЖрд╣реЗ рдЖрдгрд┐ рдЬрдЧрд╛рд▓рд╛ рдереЛрдбреЗ рдЕрдзрд┐рдХ рд╕реЛрдпреАрд╕реНрдХрд░ рдЖрдгрд┐ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╡реВ рдЗрдЪреНрдЫрд┐рддреЛ.

рд╡реЗрдмрд╕реЙрдХреЗрдЯрдЪрд╛ рдЗрддрд┐рд╣рд╛рд╕ рд╕реБрдорд╛рд░реЗ 8 рд╡рд░реНрд╖рд╛рдВрдкреВрд░реНрд╡реА рд╕реБрд░реВ рдЭрд╛рд▓рд╛. рдкреВрд░реНрд╡реА, рдкрджреНрдзрддреА рд▓рд╛рдВрдм HTTP рд╡рд┐рдирдВрддреНрдпрд╛ (рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдкреНрд░рддрд┐рд╕рд╛рдж) рд╕реНрд╡рд░реВрдкрд╛рдд рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдд рд╣реЛрддреНрдпрд╛: рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рдмреНрд░рд╛рдЙрдЭрд░рдиреЗ рд╕рд░реНрд╡реНрд╣рд░рд▓рд╛ рд╡рд┐рдирдВрддреА рдкрд╛рдард╡рд▓реА рдЖрдгрд┐ рдХрд╛рд╣реАрддрд░реА рдЙрддреНрддрд░ рджреЗрдгреНрдпрд╛рдЪреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗрд▓реА, рдкреНрд░рддрд┐рд╕рд╛рджрд╛рдирдВрддрд░ рддреЗ рдкреБрдиреНрд╣рд╛ рдХрдиреЗрдХреНрдЯ рдЭрд╛рд▓реЗ рдЖрдгрд┐ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗрд▓реА. рдкрдг рдирдВрддрд░ рд╡реЗрдмрд╕реЙрдХреЗрдЯреНрд╕ рджрд┐рд╕реВ рд▓рд╛рдЧрд▓реНрдпрд╛.

ZeroTech рд╡рд░ рдЖрдореНрд╣реА Apple Safari рдЖрдгрд┐ рдХреНрд▓рд╛рдпрдВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдВрдирд╛ рд╡реЗрдмрд╕реЙрдХреЗрдЯрд╕рд╣ рдХрд╕реЗ рдЬреЛрдбрд▓реЗ

рдХрд╛рд╣реА рд╡рд░реНрд╖рд╛рдВрдкреВрд░реНрд╡реА, рдЖрдореНрд╣реА рд╢реБрджреНрдз PHP рдордзреНрдпреЗ рдЖрдордЪреА рд╕реНрд╡рддрдГрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реА рдЖрд╣реЗ, рдЬреА https рд╡рд┐рдирдВрддреНрдпрд╛ рд╡рд╛рдкрд░реВ рд╢рдХрдд рдирд╛рд╣реА, рдХрд╛рд░рдг рд╣рд╛ рджреБрд╡рд╛ рд╕реНрддрд░ рдЖрд╣реЗ. рдХрд╛рд╣реА рдХрд╛рд│рд╛рдкреВрд░реНрд╡реА, рдЬрд╡рд│рдкрд╛рд╕ рд╕рд░реНрд╡ рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд░рдиреЗ https рдЖрдгрд┐ рд╕рдкреЛрд░реНрдЯ рдХрдиреЗрдХреНрд╢рди:рдЕрдкрдЧреНрд░реЗрдбрд╡рд░ рдкреНрд░реЙрдХреНрд╕реА рд╡рд┐рдирдВрддреНрдпрд╛ рд╢рд┐рдХрд▓реНрдпрд╛ рдЖрд╣реЗрдд.

рдЬреЗрд╡реНрд╣рд╛ рд╣реЗ рдШрдбрд▓реЗ рддреЗрд╡реНрд╣рд╛, SPA рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рд╕рд╛рдареА рд╡реЗрдмрд╕реЙрдХреЗрдЯреНрд╕ рдЬрд╡рд│рдЬрд╡рд│ рдбреАрдлреЙрд▓реНрдЯ рд╕реЗрд╡рд╛ рдмрдирд▓реА, рдХрд╛рд░рдг рд╕рд░реНрд╡реНрд╣рд░рдЪреНрдпрд╛ рдкреБрдврд╛рдХрд╛рд░рд╛рдиреЗ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд╕ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд╛рди рдХрд░рдгреЗ рдХрд┐рддреА рд╕реЛрдпреАрдЪреЗ рдЖрд╣реЗ (рджреБрд╕рд░реНрдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдХрдбреВрди рд╕рдВрджреЗрд╢ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рд╛ рдХрд┐рдВрд╡рд╛ рдкреНрд░рддрд┐рдорд╛, рджрд╕реНрддрдРрд╡рдЬ, рд╕рд╛рджрд░реАрдХрд░рдгрд╛рдЪреА рдирд╡реАрди рдЖрд╡реГрддреНрддреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рд╛. рдХреА рд╕рдзреНрдпрд╛ рдХреЛрдгреАрддрд░реА рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдд рдЖрд╣реЗ).

рдЬрд░реА рдХреНрд▓рд╛рдпрдВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдмрд░реНрдпрд╛рдЪ рдХрд╛рд│рд╛рдкрд╛рд╕реВрди рдЖрд╣реЗ, рддрд░реАрд╣реА рддреЗ рдЕрд╕рдорд╛рдзрд╛рдирдХрд╛рд░рдХрдкрдгреЗ рд╕рдорд░реНрдерд┐рдд рдЖрд╣реЗ, рдХрд╛рд░рдг рддреЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддрд╛рдирд╛ рдЕрдиреЗрдХ рд╕рдорд╕реНрдпрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛рдд. рдЖрдгрд┐ (рд╢рдХреНрдпрддреЛ :slightly_smiling_face: ) рдореНрд╣рдгреВрдирдЪ IOS рдмреНрд░рд╛рдЙрдЭрд░ (рд╕рдлрд╛рд░реА рд╕реЛрдбреВрди) рддреЗ рд╡рд╛рдкрд░реВ рдЗрдЪреНрдЫрд┐рдд рдирд╛рд╣реАрдд рдЖрдгрд┐ рд╕реНрдерд╛рдирд┐рдХ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕реНрдЯреЛрдЕрд░рдХрдбреВрди рд╡рд┐рдирдВрддреА рдХрд░реВ рдЗрдЪреНрдЫрд┐рдд рдирд╛рд╣реАрдд. рд▓реЙрдЧрд┐рди/рдкрд╛рд╕ рдХрд┐рдВрд╡рд╛ ssh рдХреА рдХрд┐рдВрд╡рд╛ рдлрд╛рдпрд░рд╡реЙрд▓рджреНрд╡рд╛рд░реЗ рдЖрд╡рд╢реНрдпрдХ рдкреЛрд░реНрдЯ рдмрдВрдж рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рддреБрд▓рдиреЗрдд рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдВрдЪреЗ рдмрд░реЗрдЪ рдлрд╛рдпрджреЗ рдЖрд╣реЗрдд. рдкрдг рд╣реЗ рддреНрдпрд╛рдмрджреНрджрд▓ рдирд╛рд╣реА.

iOS рд╡рд░, рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдЧрджреА рд╕реЛрдкреА рдЖрд╣реЗ (рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЧреЛрд╖реНрдЯреАрдВрд╢рд┐рд╡рд╛рдп рдирд╛рд╣реА), рдкрд░рдВрддреБ рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рддреЗ рд╕реВрдЪрдирд╛рдВрдиреБрд╕рд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рдЬреНрдпрд╛рдкреИрдХреА рдЗрдВрдЯрд░рдиреЗрдЯрд╡рд░ рдмрд░реЗрдЪ рдХрд╛рд╣реА рдЖрд╣реЗрдд рдЖрдгрд┐ рдЬреЗ рдлрдХреНрдд рд╕рдлрд╛рд░реА рдмреНрд░рд╛рдЙрдЭрд░рд╕рд╛рдареА рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд. рджреБрд░реНрджреИрд╡рд╛рдиреЗ, рд╡реЗрдм рд╕реЙрдХреЗрдЯрд╕рд╛рдареА рдХреНрд▓рд╛рдпрдВрдЯ ╨бert рдХрд╕реЗ рд╡рд╛рдкрд░рд╛рд╡реЗ рд╣реЗ рд╕рдлрд╛рд░реАрд▓рд╛ рдорд╛рд╣рд┐рдд рдирд╛рд╣реА, рдкрд░рдВрддреБ рдЕрд╕реЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╕реЗ рддрдпрд╛рд░ рдХрд░рд╛рд╡реЗ рдпрд╛рдмрджреНрджрд▓ рдЗрдВрдЯрд░рдиреЗрдЯрд╡рд░ рдЕрдиреЗрдХ рд╕реВрдЪрдирд╛ рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдд рд╣реЗ рдЕрдкреНрд░рд╛рдкреНрдп рдЖрд╣реЗ.

ZeroTech рд╡рд░ рдЖрдореНрд╣реА Apple Safari рдЖрдгрд┐ рдХреНрд▓рд╛рдпрдВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдВрдирд╛ рд╡реЗрдмрд╕реЙрдХреЗрдЯрд╕рд╣ рдХрд╕реЗ рдЬреЛрдбрд▓реЗ

рд╡реЗрдмрд╕реЙрдХреЗрдЯ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдЦрд╛рд▓реАрд▓ рдпреЛрдЬрдирд╛ рд╡рд╛рдкрд░рд▓реА: рд╕рдорд╕реНрдпрд╛/ рдЧреГрд╣реАрддрдХ/ рдЙрдкрд╛рдп.

рд╕рдорд╕реНрдпрд╛: IOS рдЖрдгрд┐ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рд╕рдкреЛрд░реНрдЯ рд╕рдХреНрд╖рдо рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЗрддрд░ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рд╕рд╛рдареА Safari рдореЛрдмрд╛рдЗрд▓ рдмреНрд░рд╛рдЙрдЭрд░рд╡рд░реАрд▓ рдХреНрд▓рд╛рдпрдВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рджреНрд╡рд╛рд░реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрд╕рд╛рдареА рд╡рд┐рдирдВрддреА рдкреНрд░реЙрдХреНрд╕реА рдХрд░рддрд╛рдирд╛ рд╡реЗрдм рд╕реЙрдХреЗрдЯрд╕рд╛рдареА рдХреЛрдгрддреЗрд╣реА рд╕рдорд░реНрдерди рдирд╛рд╣реА.

рдЧреГрд╣реАрддрдХреЗ:

  1. рдЕрдВрддрд░реНрдЧрдд/рдмрд╛рд╣реНрдп рдкреНрд░реЙрдХреНрд╕реА рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреНрдпрд╛ рд╡реЗрдмрд╕реЙрдХреЗрдЯреНрд╕рд╡рд░ рдкреНрд░рдорд╛рдгрдкрддреНрд░реЗ (рдХреЛрдгрддреЗрд╣реА рдирд╕реЗрд▓ рд╣реЗ рдЬрд╛рдгреВрди) рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрд╕рд╛ рдЕрдкрд╡рд╛рдж рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ.
  2. рд╡реЗрдмрд╕реЙрдХреЗрдЯрд╕рд╛рдареА, рддреБрдореНрд╣реА рд╕рд╛рдорд╛рдиреНрдп (рд╡реЗрдмрд╕реЙрдХреЗрдЯ рдирд╕рд▓реЗрд▓реНрдпрд╛) рдмреНрд░рд╛рдЙрдЭрд░ рд╡рд┐рдирдВрддреАрджрд░рдореНрдпрд╛рди рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рддрд╛рддреНрдкреБрд░рддреНрдпрд╛ рд╕рддреНрд░рд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдПрдХ рдЕрдирдиреНрдп, рд╕реБрд░рдХреНрд╖рд┐рдд рдЖрдгрд┐ рдмрдЪрд╛рд╡ рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдХрдиреЗрдХреНрд╢рди рдмрдирд╡реВ рд╢рдХрддрд╛.
  3. рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд░ рд╡рд╛рдкрд░реВрди рддрд╛рддреНрдкреБрд░рддреА рд╕рддреНрд░реЗ рд▓рд╛рдЧреВ рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддрд╛рдд (рдХреЗрд╡рд│ рдЕрдВрдЧрднреВрдд рдореЙрдбреНрдпреВрд▓ рдЖрдгрд┐ рдХрд╛рд░реНрдпреЗ).
  4. рддрд╛рддреНрдкреБрд░рддреЗ рд╕рддреНрд░ рдЯреЛрдХрди рдЖрдзреАрдЪ рддрдпрд╛рд░-рддрдпрд╛рд░ Apache рдореЙрдбреНрдпреВрд▓ рдореНрд╣рдгреВрди рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд.
  5. рддрд╛рддреНрдкреБрд░рддреЗ рд╕рддреНрд░ рдЯреЛрдХрди рддрд╛рд░реНрдХрд┐рдХрд░рд┐рддреНрдпрд╛ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рдж рд░рдЪрдирд╛ рддрдпрд╛рд░ рдХрд░реВрди рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд.

рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдирдВрддрд░ рджреГрд╢реНрдпрдорд╛рди рд╕реНрдерд┐рддреА.

рдХрд╛рдорд╛рдЪреЗ рдзреНрдпреЗрдп: рд╕реЗрд╡рд╛ рдЖрдгрд┐ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдЪреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди 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. рдХрд┐рдВрд╡рд╛ рд╡рд┐рдХрд╕рдХ рдХрдиреНрд╕реЛрд▓рдордзреНрдпреЗ:

ZeroTech рд╡рд░ рдЖрдореНрд╣реА Apple Safari рдЖрдгрд┐ рдХреНрд▓рд╛рдпрдВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдВрдирд╛ рд╡реЗрдмрд╕реЙрдХреЗрдЯрд╕рд╣ рдХрд╕реЗ рдЬреЛрдбрд▓реЗ

рдЧреГрд╣реАрддрдХ рдЪрд╛рдЪрдгреА:

1. рдЕрдВрддрд░реНрдЧрдд/рдмрд╛рд╣реНрдп рдкреНрд░реЙрдХреНрд╕реА рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреНрдпрд╛ рд╡реЗрдм рд╕реЙрдХреЗрдЯрд╕рд╛рдареА рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдВрдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рд╕рд╛рдареА (рдХрд╛рд╣реАрд╣реА рдирд╕реЗрд▓ рд╣реЗ рдЬрд╛рдгреВрди) рдЕрд╕рд╛ рдЕрдкрд╡рд╛рдж рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ.

рдпреЗрдереЗ 2 рдЙрдкрд╛рдп рд╕рд╛рдкрдбрд▓реЗ:

рдЕ) рд╕реНрддрд░рд╛рд╡рд░

<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"

рдПрд╕рдПрд╕рдПрд▓ рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╡рд╛рд░ рдорд╛рд╣рд┐рддреА рд▓реЗрдЦрд╛рдд рдЖрдврд│реВ рд╢рдХрддреЗ: рдЕрдкрд╛рдЪреЗ рд╕рд░реНрд╡реНрд╣рд░ рдХреНрд▓рд╛рдпрдВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг

рджреЛрдиреНрд╣реА рдкрд░реНрдпрд╛рдпрд╛рдВрдЪреА рдЪрд╛рдЪрдгреА рдШреЗрдгреНрдпрд╛рдд рдЖрд▓реА, рдкрд░реНрдпрд╛рдп "b" рддреНрдпрд╛рдЪреНрдпрд╛ рдмрд╣реБрдореБрдЦреАрдкрдгрд╛рд╕рд╛рдареА рдЖрдгрд┐ http2 рдкреНрд░реЛрдЯреЛрдХреЙрд▓рд╢реА рд╕реБрд╕рдВрдЧрддрддреЗрд╕рд╛рдареА рдирд┐рд╡рдбрд▓рд╛ рдЧреЗрд▓рд╛.

рдпрд╛ рдЧреГрд╣рд┐рддрдХрд╛рдЪреА рдкрдбрддрд╛рд│рдгреА рдкреВрд░реНрдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╕рд╣ рдмрд░реЗрдЪ рдкреНрд░рдпреЛрдЧ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧрд▓реЗ; рдЦрд╛рд▓реАрд▓ рдбрд┐рдЭрд╛рдЗрдирдЪреА рдЪрд╛рдЪрдгреА рдШреЗрдгреНрдпрд╛рдд рдЖрд▓реА:

рдЬрд░ = рдЖрд╡рд╢реНрдпрдХ = рдкреБрдиреНрд╣рд╛ рд▓рд┐рд╣рд╛

рдкрд░рд┐рдгрд╛рдо рдЦрд╛рд▓реАрд▓ рдореВрд▓рднреВрдд рдбрд┐рдЭрд╛рдЗрди рдЖрд╣реЗ:

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. рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд░ (рдХреЗрд╡рд│ рдЕрдВрдЧрднреВрдд рдореЙрдбреНрдпреВрд▓ рдЖрдгрд┐ рдХрд╛рд░реНрдпреЗ) рд╡рд╛рдкрд░реВрди рддрд╛рддреНрдкреБрд░рддреА рд╕рддреНрд░реЗ рд▓рд╛рдЧреВ рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддрд╛рдд.

рдЖрдореНтАНрд╣рд╛рд▓рд╛ рдЖрдзреА рдХрд│рд▓реНтАНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдЕрдкрд╛рдЪреЗрдордзреНтАНрдпреЗ рдмрд░реАрдЪ рдХреЛрд░ рдлрдВрдХреНрд╢рдиреЕрд▓рд┐рдЯреА рдЖрд╣реЗ рдЬреА рддреБрдореНрд╣рд╛рд▓рд╛ рдХрдВрдбрд┐рд╢рдирд▓ рдХрдВрд╕реНрдЯреНрд░рдХреНтАНрдЯ рддрдпрд╛рд░ рдХрд░реВ рджреЗрддреЗ. рддрдерд╛рдкрд┐, рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдордЪреА рдорд╛рд╣рд┐рддреА рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рдмреНрд░рд╛рдЙрдЭрд░рдордзреНрдпреЗ рдЕрд╕рддрд╛рдирд╛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд╛рдзрдирд╛рдВрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рдХрд╛рдп рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рд╛рдпрдЪреЗ рдЖрдгрд┐ рдХрд╛, рдЖрдгрд┐ рдЖрдореНрд╣реА рдХреЛрдгрддреА рдЕрдВрдЧрднреВрдд рдлрдВрдХреНрд╢рдиреНрд╕ рд╡рд╛рдкрд░реВ:

  • рдЖрдореНрд╣рд╛рд▓рд╛ рдПрдХ рдЯреЛрдХрди рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЬреЗ рд╕рд╣рдЬрдкрдгреЗ рдбреАрдХреЛрдб рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА.
  • рдЖрдореНрд╣рд╛рд▓рд╛ рдПрдХ рдЯреЛрдХрди рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЬреНрдпрд╛рдордзреНрдпреЗ рдЕрдкреНрд░рдЪрд▓рд┐рддрдкрдгрд╛ рдЕрдВрддрд░реНрднреВрдд рдЖрд╣реЗ рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдЕрдкреНрд░рдЪрд▓рд┐рддрдкрдгрд╛ рддрдкрд╛рд╕рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдЖрд╣реЗ.
  • рдЖрдореНрд╣рд╛рд▓рд╛ рдПрдХ рдЯреЛрдХрди рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЬреЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдЪреНрдпрд╛ рдорд╛рд▓рдХрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЕрд╕реЗрд▓.

рдпрд╛рд╕рд╛рдареА рд╣реЕрд╢рд┐рдВрдЧ рдлрдВрдХреНрд╢рди, рдореАрда рдЖрдгрд┐ рдЯреЛрдХрди рд╡рдпрд╛рдЪреА рддрд╛рд░реАрдЦ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдХрд╛рдЧрджрдкрддреНрд░рд╛рдВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд Apache HTTP рд╕рд░реНрд╡реНрд╣рд░рдордзреАрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддреА рдЖрдордЪреНрдпрд╛рдХрдбреЗ рд╣реЗ рд╕рд░реНрд╡ рдмреЙрдХреНрд╕рдмрд╛рд╣реЗрд░ sha1 рдЖрдгрд┐ %{TIME} рдЖрд╣реЗ.

рдкрд░рд┐рдгрд╛рдо рд╣реЗ рдбрд┐рдЭрд╛рдЗрди рд╣реЛрддреЗ:

#╨╜╨╡╤В ╤Б╨╡╤А╤В╨╕╤Д╨╕╨║╨░╤В╨░, ╨╕ ╨╛╨▒╤А╨░╤Й╨╡╨╜╨╕╨╡ ╨║ websocket
<If "%{SSL:SSL_CLIENT_VERIFY} != 'SUCCESS'">
<If "%{HTTP:Upgrade} = 'websocket'">
    SetEnvIf Cookie "zt-cert-sha1=([^;]+)" zt-cert-sha1=$1
    SetEnvIf Cookie "zt-cert-uid=([^;]+)" zt-cert-uid=$1
    SetEnvIf Cookie "zt-cert-date=([^;]+)" zt-cert-date=$1

#╤В╨╛╨╗╤М╨║╨╛ ╤В╨░╨║ ╨╝╨╛╨╢╨╜╨╛ ╤А╨░╨▒╨╛╤В╨░╤В╤М ╤Б ╨┐╨╡╤А╨╡╨╝╨╡╨╜╨╜╤Л╨╝╨╕, ╨┐╨╛╨╗╤Г╤З╨╡╨╜╨╜╤Л╨╝╨╕ ╨▓ env-╨░╤Е ╨▓ ╤Н╤В╨╛╤В ╨╝╨╛╨╝╨╡╨╜╤В ╨▓╤А╨╡╨╝╨╡╨╜╨╕, ╨▒╨╛╨╗╨╡╨╡ ╨╛╨╜╨╕ ╨╜╨╕╨│╨┤╨╡ ╨╜╨╡ ╨┤╨╛╤Б╤В╤Г╨┐╨╜╤Л ╨┤╨╗╤П ╤Д╤Г╨╜╨║╤Ж╨╕╨╕ ╤Е╨╡╤И╨╕╤А╨╛╨▓╨░╨╜╨╕╤П (╨┐╨╛ ╨╛╤В╨┤╨╡╨╗╤М╨╜╨╛╤Б╤В╨╕ ╨╝╨╛╨╢╨╜╨╛, ╨╜╨╛ ╨╜╨╡ ╨▓╨╝╨╡╤Б╤В╨╡, ╨┤╨░ ╨╕ ╨╡╤Й╤С ╤Б ╤Е╨╡╤И╨╕╤А╨╛╨▓╨░╨╜╨╕╨╡╨╝)
    <RequireAll>
        Require expr %{sha1:salt1%{env:zt-cert-date}salt3%{env:zt-cert-uid}salt2} == %{env:zt-cert-sha1}
        Require expr %{env:zt-cert-sha1} =~ /^.{40}$/
    </RequireAll>
</If>
</If>

#╨╡╤Б╤В╤М ╤Б╨╡╤А╤В╨╕╤Д╨╕╨║╨░╤В, ╨╖╨░╨┐╤А╨░╤И╨╕╨▓╨░╨╡╤В╤Б╤П ╨╜╨╡ websocket
<If "%{SSL:SSL_CLIENT_VERIFY} = 'SUCCESS'">
<If "%{HTTP:Upgrade} != 'websocket'">
    SetEnvIf Cookie "zt-cert-sha1=([^;]+)" HAVE_zt-cert-sha1=$1

    SetEnv zt_cert "path=/; HttpOnly;Secure;SameSite=Strict"
#╨Э╨╛╨▓╤Л╨╡ ╨║╤Г╨║╨╕ ╤Б╤В╨░╨▓╤П╤В╤Б╤П, ╨╡╤Б╨╗╨╕ ╤Б╤В╨░╤А╤Л╤Е ╨╜╨╡╤В
    Header add Set-Cookie "expr=zt-cert-sha1=%{sha1:salt1%{TIME}salt3%{SSL_CLIENT_S_DN_CN}salt2};%{env:zt_cert}" env=!HAVE_zt-cert-sha1
    Header add Set-Cookie "expr=zt-cert-uid=%{SSL_CLIENT_S_DN_CN};%{env:zt_cert}" env=!HAVE_zt-cert-sha1
    Header add Set-Cookie "expr=zt-cert-date=%{TIME};%{env:zt_cert}" env=!HAVE_zt-cert-sha1
</If>
</If>

рдзреНрдпреЗрдп рд╕рд╛рдзреНрдп рдЭрд╛рд▓реЗ рдЖрд╣реЗ, рдкрд░рдВрддреБ рд╕рд░реНрд╡реНрд╣рд░рдЪреНрдпрд╛ рдЕрдкреНрд░рдЪрд▓рд┐рддрддреЗрд╕рд╣ рд╕рдорд╕реНрдпрд╛ рдЖрд╣реЗрдд (рдЖрдкрдг рдПрдХ рд╡рд░реНрд╖ рдЬреБрдиреА рдХреБрдХреА рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛), рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЯреЛрдХрди, рдЬрд░реА рдЕрдВрддрд░реНрдЧрдд рд╡рд╛рдкрд░рд╛рд╕рд╛рдареА рд╕реБрд░рдХреНрд╖рд┐рдд рдЕрд╕рд▓реЗ рддрд░реА, рдФрджреНрдпреЛрдЧрд┐рдХ (рд╡рд╕реНрддреБрдорд╛рди) рд╡рд╛рдкрд░рд╛рд╕рд╛рдареА рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЖрд╣реЗрдд.

ZeroTech рд╡рд░ рдЖрдореНрд╣реА Apple Safari рдЖрдгрд┐ рдХреНрд▓рд╛рдпрдВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдВрдирд╛ рд╡реЗрдмрд╕реЙрдХреЗрдЯрд╕рд╣ рдХрд╕реЗ рдЬреЛрдбрд▓реЗ

4. рддрд╛рддреНрдкреБрд░рддреЗ рд╕рддреНрд░ рдЯреЛрдХрди рдЖрдзреАрдЪ рддрдпрд╛рд░-рддрдпрд╛рд░ Apache рдореЙрдбреНрдпреВрд▓ рдореНрд╣рдгреВрди рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд.

рдорд╛рдЧреАрд▓ рдкреБрдирд░рд╛рд╡реГрддреНрддреАрдкрд╛рд╕реВрди рдПрдХ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛ рд░рд╛рд╣рд┐рд▓реА - рдЯреЛрдХрди рд╡реГрджреНрдзрддреНрд╡ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрд╕рдорд░реНрдерддрд╛.

рдЖрдореНрд╣реА рдПрдХ рд░реЗрдбреАрдореЗрдб рдореЙрдбреНрдпреВрд▓ рд╢реЛрдзрдд рдЖрд╣реЛрдд рдЬреЗ рдЕрд╕реЗ рдХрд░рддреЗ, рдпрд╛ рд╢рдмреНрджрд╛рдВрдиреБрд╕рд╛рд░: apache token json two factor auth

рд╣реЛрдп, рддреЗрдереЗ рд░реЗрдбреАрдореЗрдб рдореЙрдбреНрдпреВрд▓реНрд╕ рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рддреЗ рд╕рд░реНрд╡ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд░рд┐рдпрд╛рдВрд╢реА рдЬреЛрдбрд▓реЗрд▓реЗ рдЖрд╣реЗрдд рдЖрдгрд┐ рдПрдХ рд╕рддреНрд░ рдЖрдгрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреБрдХреАрдЬ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд рдХрд▓рд╛рдХреГрддреА рдЖрд╣реЗрдд. рдореНрд╣рдгрдЬреЗ рдХрд╛рд╣реА рдХрд╛рд│рд╛рд╕рд╛рдареА рдирд╛рд╣реА.
рдЖрдореНрд╣рд╛рд▓рд╛ рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА рдкрд╛рдЪ рддрд╛рд╕ рд▓рд╛рдЧрд▓реЗ, рдЬреНрдпрд╛рдореБрд│реЗ рдареЛрд╕ рдкрд░рд┐рдгрд╛рдо рдорд┐рд│рд╛рд▓рд╛ рдирд╛рд╣реА.

5. рддрд╛рддреНрдкреБрд░рддреА рд╕рддреНрд░ рдЯреЛрдХрди рддрд╛рд░реНрдХрд┐рдХрд░рд┐рддреНрдпрд╛ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рджрд╛рдЪреА рд░рдЪрдирд╛ рддрдпрд╛рд░ рдХрд░реВрди рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд.

рд░реЗрдбреАрдореЗрдб рдореЙрдбреНрдпреВрд▓ рдЦреВрдк рдХреНрд▓рд┐рд╖реНрдЯ рдЖрд╣реЗрдд, рдХрд╛рд░рдг рдЖрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рджреЛрди рдлрдВрдХреНрд╢рдиреНрд╕рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ.

рдЕрд╕реЗ рдореНрд╣рдЯрд▓реЗ рдЬрд╛рдд рдЖрд╣реЗ рдХреА, рддрд╛рд░рдЦреЗрдЪреА рд╕рдорд╕реНрдпрд╛ рдЕрд╢реА рдЖрд╣реЗ рдХреА Apache рдЪреА рдЕрдВрдЧрднреВрдд рдлрдВрдХреНрд╢рдиреНрд╕ рднрд╡рд┐рд╖реНрдпрд╛рддреАрд▓ рддрд╛рд░реАрдЦ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕ рдкрд░рд╡рд╛рдирдЧреА рджреЗрдд тАЛтАЛтАЛтАЛрдирд╛рд╣реАрдд рдЖрдгрд┐ рдЕрдкреНрд░рдЪрд▓рд┐рддрддрд╛ рддрдкрд╛рд╕рддрд╛рдирд╛ рдЕрдВрдЧрднреВрдд рдлрдВрдХреНрд╢рдиреНрд╕рдордзреНрдпреЗ рдХреЛрдгрддреАрд╣реА рдЧрдгрд┐рддреА рдмреЗрд░реАрдЬ/рд╡рдЬрд╛рдмрд╛рдХреА рдирд╛рд╣реА.

рдореНрд╣рдгрдЬреЗрдЪ, рдЖрдкрдг рд▓рд┐рд╣реВ рд╢рдХрдд рдирд╛рд╣реА:

(%{env:zt-cert-date} + 30) > %{DATE}

рддреБрдореНрд╣реА рдлрдХреНрдд рджреЛрди рд╕рдВрдЦреНрдпрд╛рдВрдЪреА рддреБрд▓рдирд╛ рдХрд░реВ рд╢рдХрддрд╛.

рд╕рдлрд╛рд░реА рд╕рдорд╕реНрдпреЗрд╕рд╛рдареА рдЙрдкрд╛рдп рд╢реЛрдзрдд рдЕрд╕рддрд╛рдирд╛, рдорд▓рд╛ рдПрдХ рдордиреЛрд░рдВрдЬрдХ рд▓реЗрдЦ рд╕рд╛рдкрдбрд▓рд╛: рдХреНрд▓рд╛рдпрдВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдВрд╕рд╣ рд╣реЛрдо рдЕрд╕рд┐рд╕реНрдЯрдВрдЯ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд░рдгреЗ (Safari/iOS рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рддреЗ)
рд╣реЗ Nginx рд╕рд╛рдареА рд▓реБрдЖ рдордзреАрд▓ рдХреЛрдбрдЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЗ рдЖрдгрд┐ рддреЗ рдЬрд╕реЗ рдХреА, рд╣реЕрд╢рд┐рдВрдЧрд╕рд╛рдареА hmac рд╕реЙрд▓реНрдЯрд┐рдВрдЧ рдкрджреНрдзрддреАрдЪрд╛ рд╡рд╛рдкрд░ рд╡рдЧрд│рддрд╛, рдЖрдореНрд╣реА рдЖрдзреАрдЪ рд▓рд╛рдЧреВ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдЪреНрдпрд╛ рддреНрдпрд╛ рднрд╛рдЧрд╛рдЪреНрдпрд╛ рддрд░реНрдХрд╛рдЪреА рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХрд░рддреЗ ( рд╣реЗ Apache рдордзреНрдпреЗ рдЖрдврд│рд▓реЗ рдирд╛рд╣реА).

рд╣реЗ рд╕реНрдкрд╖реНрдЯ рдЭрд╛рд▓реЗ рдХреА рд▓реБрдЖ рд╣реА рд╕реНрдкрд╖реНрдЯ рддрд░реНрдХрд╢рд╛рд╕реНрддреНрд░ рдЕрд╕рд▓реЗрд▓реА рднрд╛рд╖рд╛ рдЖрд╣реЗ рдЖрдгрд┐ рдЕрдкрд╛рдЪреЗрд╕рд╛рдареА рдХрд╛рд╣реАрддрд░реА рд╕реЛрдкреЗ рдХрд░рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ:

Nginx рдЖрдгрд┐ Apache рдордзреАрд▓ рдлрд░рдХрд╛рдЪрд╛ рдЕрднреНрдпрд╛рд╕ рдХреЗрд▓реНрдпрд╛рд╡рд░:

рдЖрдгрд┐ рд▓реБрдЖ рднрд╛рд╖рд╛ рдирд┐рд░реНрдорд╛рддреНрдпрд╛рдХрдбреВрди рдЙрдкрд▓рдмреНрдз рдХрд╛рд░реНрдпреЗ:
22.1 - рддрд╛рд░реАрдЦ рдЖрдгрд┐ рд╡реЗрд│

рд╡рд░реНрддрдорд╛рдирд╛рд╢реА рддреБрд▓рдирд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рднрд╡рд┐рд╖реНрдпрд╛рддреАрд▓ рддрд╛рд░реАрдЦ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣рд╛рд▓рд╛ рд▓рд╣рд╛рди рд▓реБрдЖ рдлрд╛рдЗрд▓рдордзреНрдпреЗ env рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдорд╛рд░реНрдЧ рд╕рд╛рдкрдбрд▓рд╛.

рд╕рд╛рдзреА рд▓реБрдЖ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрд╢реА рджрд┐рд╕рддреЗ:

require 'apache2'

function handler(r)
    local fmt = '%Y%m%d%H%M%S'
    local timeout = 3600 -- 1 hour

    r.notes['zt-cert-timeout'] = timeout
    r.notes['zt-cert-date-next'] = os.date(fmt,os.time()+timeout)
    r.notes['zt-cert-date-halfnext'] = os.date(fmt,os.time()+ (timeout/2))
    r.notes['zt-cert-date-now'] = os.date(fmt,os.time())

    return apache2.OK
end

рдЖрдгрд┐ рдХреБрдХреАрдЬрдЪреНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдЪреЗ рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рдЖрдгрд┐ рдЬреБрдиреА рдХреБрдХреА (рдЯреЛрдХрди) рдХрд╛рд▓рдмрд╛рд╣реНрдп рд╣реЛрдгреНрдпрд╛рдкреВрд░реНрд╡реА рдЕрд░реНрдзрд╛ рд╡реЗрд│ рдЖрд▓реНрдпрд╛рд╡рд░ рдЯреЛрдХрди рдмрджрд▓реВрди рд╣реЗ рд╕рд░реНрд╡ рдПрдХреВрдг рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ:

SSLVerifyClient optional

#LuaScope thread
#generate event variables zt-cert-date-next
LuaHookAccessChecker /usr/local/etc/apache24/sslincludes/websocket_token.lua handler early

#╨╖╨░╨┐╤А╨╡╤Й╨░╨╡╨╝ ╨▒╨╡╨╖ ╤Б╨╡╤А╤В╨╕╤Д╨╕╨║╨░╤В╨░ ╤З╤В╨╛-╤В╨╛ ╨╡╤Й╤С, ╨║╤А╨╛╨╝╨╡ webscoket
RewriteEngine on
RewriteCond %{SSL:SSL_CLIENT_VERIFY} !=SUCCESS
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule     .? - [F]
#ErrorDocument 403 "You need a client side certificate issued by CAcert to access this site"

#websocket for safari without certauth
<If "%{SSL:SSL_CLIENT_VERIFY} != 'SUCCESS'">
<If "%{HTTP:Upgrade} = 'websocket'">
    SetEnvIf Cookie "zt-cert=([^,;]+),([^,;]+),[^,;]+,([^,;]+)" zt-cert-sha1=$1 zt-cert-date=$2 zt-cert-uid=$3

    <RequireAll>
        Require expr %{sha1:salt1%{env:zt-cert-date}salt3%{env:zt-cert-uid}salt2} == %{env:zt-cert-sha1}
        Require expr %{env:zt-cert-sha1} =~ /^.{40}$/
        Require expr %{env:zt-cert-date} -ge %{env:zt-cert-date-now}
    </RequireAll>
   
    #╨╖╨░╨╝╨╡╤Й╨░╨╡╨╝ ╨░╨▓╤В╨╛╤А╨╕╨╖╨░╤Ж╨╕╤О ╨┐╨╛ ╨▓╨╗╨░╨┤╨╡╨╗╤М╤Ж╤Г ╤Б╨╡╤А╤В╨╕╤Д╨╕╨║╨░╤В╨░ ╨╜╨░ ╨░╨▓╤В╨╛╤А╨╕╨╖╨░╤Ж╨╕╤О ╨┐╨╛ ╨╜╨╛╨╝╨╡╤А╤Г ╨┐╤А╨╛╤В╨╛╨║╨╛╨╗╨░
    SSLUserName SSl_PROTOCOL
    SSLOptions -FakeBasicAuth
</If>
</If>

<If "%{SSL:SSL_CLIENT_VERIFY} = 'SUCCESS'">
<If "%{HTTP:Upgrade} != 'websocket'">
    SetEnvIf Cookie "zt-cert=([^,;]+),[^,;]+,([^,;]+)" HAVE_zt-cert-sha1=$1 HAVE_zt-cert-date-halfnow=$2
    SetEnvIfExpr "env('HAVE_zt-cert-date-halfnow') -ge %{TIME} && env('HAVE_zt-cert-sha1')=~/.{40}/" HAVE_zt-cert-sha1-found=1

    Define zt-cert "path=/;Max-Age=%{env:zt-cert-timeout};HttpOnly;Secure;SameSite=Strict"
    Define dates_user "%{env:zt-cert-date-next},%{env:zt-cert-date-halfnext},%{SSL_CLIENT_S_DN_CN}"
    Header set Set-Cookie "expr=zt-cert=%{sha1:salt1%{env:zt-cert-date-next}sal3%{SSL_CLIENT_S_DN_CN}salt2},${dates_user};${zt-cert}" env=!HAVE_zt-cert-sha1-found
</If>
</If>

SetEnvIfExpr "env('HAVE_zt-cert-date-halfnow') -ge %{TIME} && env('HAVE_zt-cert-sha1')=~/.{40}/" HAVE_zt-cert-sha1-found=1
╤А╨░╨▒╨╛╤В╨░╨╡╤В,

╨░ ╤В╨░╨║ ╤А╨░╨▒╨╛╤В╨░╤В╤М ╨╜╨╡ ╨▒╤Г╨┤╨╡╤В
SetEnvIfExpr "env('HAVE_zt-cert-date-halfnow') -ge  env('zt-cert-date-now') && env('HAVE_zt-cert-sha1')=~/.{40}/" HAVE_zt-cert-sha1-found=1 

рдХрд╛рд░рдг LuaHookAccessChecker Nginx рдХрдбреАрд▓ рдорд╛рд╣рд┐рддреАрдЪреНрдпрд╛ рдЖрдзрд╛рд░реЗ рдкреНрд░рд╡реЗрд╢ рддрдкрд╛рд╕рд▓реНрдпрд╛рдирдВрддрд░рдЪ рд╕рдХреНрд░рд┐рдп рдХреЗрд▓реЗ рдЬрд╛рдИрд▓.

ZeroTech рд╡рд░ рдЖрдореНрд╣реА Apple Safari рдЖрдгрд┐ рдХреНрд▓рд╛рдпрдВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдВрдирд╛ рд╡реЗрдмрд╕реЙрдХреЗрдЯрд╕рд╣ рдХрд╕реЗ рдЬреЛрдбрд▓реЗ

рд╕реНрддреНрд░реЛрддрд╛рд╢реА рджреБрд╡рд╛ рдкреНрд░рддрд┐рдорд╛.

рдЖрдгрдЦреА рдПрдХ рдЧреЛрд╖реНрдЯ.

рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдЕрдкрд╛рдЪреЗ (рдХрджрд╛рдЪрд┐рдд Nginx рджреЗрдЦреАрд▓) рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ рдирд┐рд░реНрджреЗрд╢ рдХреЛрдгрддреНрдпрд╛ рдХреНрд░рдорд╛рдиреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ рдЖрд╣реЗрдд рдпрд╛рдиреЗ рдХрд╛рд╣реА рдлрд░рдХ рдкрдбрдд рдирд╛рд╣реА, рдХрд╛рд░рдг рд╢реЗрд╡рдЯреА рдкреНрд░рддреНрдпреЗрдХ рдЧреЛрд╖реНрдЯ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рд╡рд┐рдирдВрддреАрдиреБрд╕рд╛рд░ рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рд▓реА рдЬрд╛рдИрд▓, рдЬреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдпреЛрдЬрдиреЗрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ. рд▓реБрдЖ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕.

рдкреВрд░реНрдгрддрд╛:

рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдирдВрддрд░ рджреГрд╢реНрдпрдорд╛рди рд╕реНрдерд┐рддреА (рдзреНрдпреЗрдп):
рд╕реЗрд╡рд╛ рдЖрдгрд┐ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдЪреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдореЛрдмрд╛рдЗрд▓ рдлреЛрдирд╡рд░реВрди IOS рд╡рд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд╢рд┐рд╡рд╛рдп (VPN), рдпреБрдирд┐рдлрд╛рдЗрдб рдЖрдгрд┐ рд╕реБрд░рдХреНрд╖рд┐рдд рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ.

рдЙрджреНрджрд┐рд╖реНрдЯ рд╕рд╛рдзреНрдп рдЭрд╛рд▓реЗ рдЖрд╣реЗ, рд╡реЗрдм рд╕реЙрдХреЗрдЯреНрд╕ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд рдЖрдгрд┐ рд╕реБрд░рдХреНрд╖рд┐рддрддреЗрдЪреА рдкрд╛рддрд│реА рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдкреЗрдХреНрд╖рд╛ рдХрдореА рдирд╛рд╣реА.

ZeroTech рд╡рд░ рдЖрдореНрд╣реА Apple Safari рдЖрдгрд┐ рдХреНрд▓рд╛рдпрдВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдВрдирд╛ рд╡реЗрдмрд╕реЙрдХреЗрдЯрд╕рд╣ рдХрд╕реЗ рдЬреЛрдбрд▓реЗ

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛