āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ†āĻŽāĻ°āĻž ZeroTech āĻ Apple Safari āĻāĻŦāĻ‚ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ¸āĻžāĻ°ā§āĻŸāĻŋāĻĢāĻŋāĻ•ā§‡āĻŸāĻ•ā§‡ āĻ“āĻ¯āĻŧā§‡āĻŦāĻ¸āĻ•ā§‡āĻŸā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡āĻ›āĻŋ

āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋ āĻ¤āĻžāĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĻāĻ°āĻ•āĻžāĻ°ā§€ āĻšāĻŦā§‡ āĻ¯āĻžāĻ°āĻž:

  • āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ° āĻ•ā§€ āĻ¤āĻž āĻœāĻžāĻ¨ā§‡ āĻāĻŦāĻ‚ āĻ•ā§‡āĻ¨ āĻŽā§‹āĻŦāĻžāĻ‡āĻ˛ āĻ¸āĻžāĻĢāĻžāĻ°āĻŋāĻ¤ā§‡ āĻ“āĻ¯āĻŧā§‡āĻŦāĻ¸āĻ•ā§‡āĻŸā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¤āĻž āĻŦā§‹āĻā§‡;
  • āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¸ā§€āĻŽāĻŋāĻ¤ āĻŦā§ƒāĻ¤ā§āĻ¤ā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻŦāĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¨āĻŋāĻœā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻ“āĻ¯āĻŧā§‡āĻŦ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻĒā§āĻ°āĻ•āĻžāĻļ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ‡;
  • āĻŽāĻ¨ā§‡ āĻ•āĻ°ā§‡ āĻ¯ā§‡ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻ•ā§‡āĻ‰ āĻ•āĻ°ā§‡āĻ›ā§‡, āĻāĻŦāĻ‚ āĻŦāĻŋāĻļā§āĻŦāĻ•ā§‡ āĻāĻ•āĻŸā§ āĻŦā§‡āĻļāĻŋ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻœāĻ¨āĻ• āĻāĻŦāĻ‚ āĻ¨āĻŋāĻ°āĻžāĻĒāĻĻ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ¯āĻŧāĨ¤

āĻ“āĻ¯āĻŧā§‡āĻŦāĻ¸āĻ•ā§‡āĻŸā§‡āĻ° āĻ‡āĻ¤āĻŋāĻšāĻžāĻ¸ āĻĒā§āĻ°āĻžāĻ¯āĻŧ 8 āĻŦāĻ›āĻ° āĻ†āĻ—ā§‡ āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤ āĻĒā§‚āĻ°ā§āĻŦā§‡, āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ—ā§āĻ˛āĻŋ āĻĻā§€āĻ°ā§āĻ˜ HTTP āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻ†āĻ•āĻžāĻ°ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ (āĻ†āĻ¸āĻ˛ā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž): āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻŦā§āĻ°āĻžāĻ‰āĻœāĻžāĻ° āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻĒāĻžāĻ āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ āĻāĻŦāĻ‚ āĻ•āĻŋāĻ›ā§ āĻ‰āĻ¤ā§āĻ¤āĻ° āĻĻā§‡āĻ“āĻ¯āĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§‡āĻ›āĻŋāĻ˛, āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻĒāĻ°ā§‡ āĻāĻŸāĻŋ āĻ†āĻŦāĻžāĻ° āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ āĻāĻŦāĻ‚ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§‡āĻ›āĻŋāĻ˛āĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¤āĻžāĻ°āĻĒāĻ° āĻ“āĻ¯āĻŧā§‡āĻŦāĻ¸āĻ•ā§‡āĻŸ āĻšāĻžāĻœāĻŋāĻ°āĨ¤

āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ†āĻŽāĻ°āĻž ZeroTech āĻ Apple Safari āĻāĻŦāĻ‚ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ¸āĻžāĻ°ā§āĻŸāĻŋāĻĢāĻŋāĻ•ā§‡āĻŸāĻ•ā§‡ āĻ“āĻ¯āĻŧā§‡āĻŦāĻ¸āĻ•ā§‡āĻŸā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡āĻ›āĻŋ

āĻ•āĻ¯āĻŧā§‡āĻ• āĻŦāĻ›āĻ° āĻ†āĻ—ā§‡, āĻ†āĻŽāĻ°āĻž āĻŦāĻŋāĻļā§āĻĻā§āĻ§ āĻĒāĻŋāĻāĻ‡āĻšāĻĒāĻŋ-āĻ¤ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡āĻ›āĻŋ, āĻ¯āĻž https āĻ…āĻ¨ā§āĻ°ā§‹āĻ§āĻ—ā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¨āĻž, āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻāĻŸāĻŋ āĻ˛āĻŋāĻ™ā§āĻ• āĻ¸ā§āĻ¤āĻ°āĨ¤ āĻ–ā§āĻŦ āĻŦā§‡āĻļāĻŋāĻĻāĻŋāĻ¨ āĻ†āĻ—ā§‡, āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ¸āĻŦ āĻ“āĻ¯āĻŧā§‡āĻŦ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° https āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻĒā§āĻ°āĻ•ā§āĻ¸āĻŋ āĻ°āĻŋāĻ•ā§‹āĻ¯āĻŧā§‡āĻ¸ā§āĻŸ āĻāĻŦāĻ‚ āĻ•āĻžāĻ¨ā§‡āĻ•āĻļāĻ¨ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻļāĻŋāĻ–ā§‡āĻ›ā§‡:āĻ†āĻĒāĻ—ā§āĻ°ā§‡āĻĄāĨ¤

āĻ¯āĻ–āĻ¨ āĻāĻŸāĻŋ āĻ˜āĻŸā§‡āĻ›āĻŋāĻ˛, āĻ“āĻ¯āĻŧā§‡āĻŦāĻ¸āĻ•ā§‡āĻŸāĻ—ā§āĻ˛āĻŋ āĻāĻ¸āĻĒāĻŋāĻ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻĄāĻŋāĻĢāĻ˛ā§āĻŸ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻšāĻ¯āĻŧā§‡ āĻ“āĻ ā§‡, āĻ•āĻžāĻ°āĻŖ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻ‰āĻĻā§āĻ¯ā§‹āĻ—ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ•ā§‡ āĻ¸āĻžāĻŽāĻ—ā§āĻ°ā§€ āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻ•āĻ°āĻž āĻ•āĻ¤āĻŸāĻž āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻœāĻ¨āĻ• (āĻ…āĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻ•āĻžāĻ› āĻĨā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĒā§āĻ°ā§‡āĻ°āĻŖ āĻŦāĻž āĻāĻ•āĻŸāĻŋ āĻšāĻŋāĻ¤ā§āĻ°, āĻ¨āĻĨāĻŋ, āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°ā§āĻ¨ āĻ¯ā§‡ āĻ…āĻ¨ā§āĻ¯ āĻ•ā§‡āĻ‰ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ā§‡ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨āĻž āĻ•āĻ°āĻ›ā§‡)āĨ¤

āĻ¯āĻĻāĻŋāĻ“ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ°āĻŸāĻŋ āĻŦā§‡āĻļ āĻ•āĻŋāĻ›ā§āĻĻāĻŋāĻ¨ āĻ§āĻ°ā§‡ āĻ†āĻ›ā§‡, āĻ¤āĻŦā§āĻ“ āĻāĻŸāĻŋ āĻāĻ–āĻ¨āĻ“ āĻ–āĻžāĻ°āĻžāĻĒāĻ­āĻžāĻŦā§‡ āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ°āĻ¯āĻŧā§‡ āĻ—ā§‡āĻ›ā§‡, āĻ•āĻžāĻ°āĻŖ āĻāĻŸāĻŋ āĻŦāĻžāĻ‡āĻĒāĻžāĻ¸ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻŸāĻŋ āĻ…āĻ¨ā§‡āĻ• āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡āĨ¤ āĻāĻŦāĻ‚ (āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ :slightly_smiling_face: ) āĻ¸ā§‡āĻ‡ āĻ•āĻžāĻ°āĻŖā§‡āĻ‡ IOS āĻŦā§āĻ°āĻžāĻ‰āĻœāĻžāĻ°āĻ—ā§āĻ˛āĻŋ (āĻ¸āĻžāĻĢāĻžāĻ°āĻŋ āĻ›āĻžāĻĄāĻŧāĻž) āĻāĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ¯āĻŧ āĻ¨āĻž āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ°ā§‡āĻ° āĻĻā§‹āĻ•āĻžāĻ¨ āĻĨā§‡āĻ•ā§‡ āĻāĻŸāĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ•āĻ°ā§‡āĨ¤ āĻ˛āĻ—āĻ‡āĻ¨/āĻĒāĻžāĻ¸ āĻŦāĻž ssh āĻ•ā§€ āĻŦāĻž āĻĢāĻžāĻ¯āĻŧāĻžāĻ°āĻ“āĻ¯āĻŧāĻžāĻ˛ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻĒā§‹āĻ°ā§āĻŸ āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°āĻžāĻ° āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¯āĻŧ āĻ¸āĻžāĻ°ā§āĻŸāĻŋāĻĢāĻŋāĻ•ā§‡āĻŸā§‡āĻ° āĻ…āĻ¨ā§‡āĻ• āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¯ā§‡ āĻāĻ‡ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•āĻŋ āĻ¨āĻž.

āĻ†āĻ‡āĻ“āĻāĻ¸-āĻ, āĻāĻ•āĻŸāĻŋ āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ° āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻžāĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻŸāĻŋ āĻŦā§‡āĻļ āĻ¸āĻšāĻœ (āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸāĻ­āĻžāĻŦā§‡ āĻ¨āĻ¯āĻŧ), āĻ¤āĻŦā§‡ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ­āĻžāĻŦā§‡ āĻāĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€ āĻ…āĻ¨ā§āĻ¸āĻžāĻ°ā§‡ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¯āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻ¨ā§‡āĻŸā§‡ āĻ…āĻ¨ā§‡āĻ•āĻ—ā§āĻ˛āĻŋ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻ¯āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¸āĻžāĻĢāĻžāĻ°āĻŋ āĻŦā§āĻ°āĻžāĻ‰āĻœāĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§āĨ¤ āĻĻā§āĻ°ā§āĻ­āĻžāĻ—ā§āĻ¯āĻŦāĻļāĻ¤, Safari āĻ“āĻ¯āĻŧā§‡āĻŦ āĻ¸āĻ•ā§‡āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ ĐĄert āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧ āĻ¤āĻž āĻœāĻžāĻ¨ā§‡ āĻ¨āĻž, āĻ¤āĻŦā§‡ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ° āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧ āĻ¸ā§‡ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻ¨ā§‡āĻŸā§‡ āĻ…āĻ¨ā§‡āĻ• āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦā§‡ āĻāĻŸāĻŋ āĻ…āĻĒā§āĻ°āĻžāĻĒā§āĻ¯āĨ¤

āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ†āĻŽāĻ°āĻž ZeroTech āĻ Apple Safari āĻāĻŦāĻ‚ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ¸āĻžāĻ°ā§āĻŸāĻŋāĻĢāĻŋāĻ•ā§‡āĻŸāĻ•ā§‡ āĻ“āĻ¯āĻŧā§‡āĻŦāĻ¸āĻ•ā§‡āĻŸā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡āĻ›āĻŋ

āĻ“āĻ¯āĻŧā§‡āĻŦāĻ¸āĻ•ā§‡āĻŸ āĻŦā§‹āĻāĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻ°āĻž āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻĒāĻ°āĻŋāĻ•āĻ˛ā§āĻĒāĻ¨āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ›āĻŋ: āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž/āĻ…āĻ¨ā§āĻŽāĻžāĻ¨/āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĨ¤

āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž: IOS āĻāĻ° āĻœāĻ¨ā§āĻ¯ Safari āĻŽā§‹āĻŦāĻžāĻ‡āĻ˛ āĻŦā§āĻ°āĻžāĻ‰āĻœāĻžāĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸ā§āĻ°āĻ•ā§āĻˇāĻŋāĻ¤ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻĒā§āĻ°āĻ•ā§āĻ¸āĻŋ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ“āĻ¯āĻŧā§‡āĻŦ āĻ¸āĻ•ā§‡āĻŸāĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•ā§‹āĻ¨āĻ“ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ¨ā§‡āĻ‡ āĻāĻŦāĻ‚ āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ° āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°āĻž āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯āĨ¤

āĻ…āĻ¨ā§āĻŽāĻžāĻ¨:

  1. āĻ…āĻ­ā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§€āĻŖ/āĻŦāĻžāĻšā§āĻ¯āĻŋāĻ• āĻĒā§āĻ°āĻ•ā§āĻ¸āĻŋ āĻ°āĻŋāĻ¸ā§‹āĻ°ā§āĻ¸ā§‡āĻ° āĻ“āĻ¯āĻŧā§‡āĻŦāĻ¸āĻ•ā§‡āĻŸāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ¸āĻžāĻ°ā§āĻŸāĻŋāĻĢāĻŋāĻ•ā§‡āĻŸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ (āĻ•ā§‹āĻ¨ā§‹āĻŸāĻŋāĻ‡ āĻĨāĻžāĻ•āĻŦā§‡ āĻ¨āĻž āĻœā§‡āĻ¨ā§‡) āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻŦā§āĻ¯āĻ¤āĻŋāĻ•ā§āĻ°āĻŽ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻž āĻ¸āĻŽā§āĻ­āĻŦāĨ¤
  2. āĻ“āĻ¯āĻŧā§‡āĻŦāĻ¸āĻ•ā§‡āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻĒāĻ¨āĻŋ āĻ…āĻ¸ā§āĻĨāĻžāĻ¯āĻŧā§€ āĻ¸ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻ…āĻ¨āĻ¨ā§āĻ¯, āĻ¸ā§āĻ°āĻ•ā§āĻˇāĻŋāĻ¤ āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ¤āĻŋāĻ°āĻ•ā§āĻˇāĻžāĻ¯ā§‹āĻ—ā§āĻ¯ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻ¯āĻž āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ (āĻ¨āĻ¨-āĻ“āĻ¯āĻŧā§‡āĻŦāĻ¸āĻ•ā§‡āĻŸ) āĻŦā§āĻ°āĻžāĻ‰āĻœāĻžāĻ° āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¤ā§ˆāĻ°āĻŋ āĻšāĻ¯āĻŧāĨ¤
  3. āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ¸āĻŋ āĻ“āĻ¯āĻŧā§‡āĻŦ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ…āĻ¸ā§āĻĨāĻžāĻ¯āĻŧā§€ āĻ¸ā§‡āĻļāĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ (āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻŽāĻĄāĻŋāĻ‰āĻ˛ āĻāĻŦāĻ‚ āĻĢāĻžāĻ‚āĻļāĻ¨)āĨ¤
  4. āĻ…āĻ¸ā§āĻĨāĻžāĻ¯āĻŧā§€ āĻ¸ā§‡āĻļāĻ¨ āĻŸā§‹āĻ•ā§‡āĻ¨āĻ—ā§āĻ˛āĻŋ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤-āĻ¤ā§ˆāĻ°āĻŋ Apache āĻŽāĻĄāĻŋāĻ‰āĻ˛ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ā§ˇ
  5. āĻ…āĻ¸ā§āĻĨāĻžāĻ¯āĻŧā§€ āĻ¸ā§‡āĻļāĻ¨ āĻŸā§‹āĻ•ā§‡āĻ¨āĻ—ā§āĻ˛āĻŋ āĻ¯ā§āĻ•ā§āĻ¤āĻŋāĻ¯ā§āĻ•ā§āĻ¤āĻ­āĻžāĻŦā§‡ āĻŽāĻŋāĻĨāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ•āĻžāĻ āĻžāĻŽā§‹ āĻĄāĻŋāĻœāĻžāĻ‡āĻ¨ āĻ•āĻ°ā§‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻĒāĻ° āĻĻā§ƒāĻļā§āĻ¯āĻŽāĻžāĻ¨ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĨ¤

āĻ•āĻžāĻœā§‡āĻ° āĻ˛āĻ•ā§āĻˇā§āĻ¯: āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻāĻŦāĻ‚ āĻĒāĻ°āĻŋāĻ•āĻžāĻ āĻžāĻŽā§‹āĻ° āĻŦā§āĻ¯āĻŦāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ (āĻ¯ā§‡āĻŽāĻ¨ 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. āĻ…āĻĨāĻŦāĻž āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€ āĻ•āĻ¨āĻ¸ā§‹āĻ˛ā§‡:

āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ†āĻŽāĻ°āĻž 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 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡";
  • āĻāĻ‡ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ°āĻŖ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻāĻ•āĻ¤ā§āĻ°āĻŋāĻ¤ āĻ•āĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¤āĻž āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ° āĻ¨āĻ¯āĻŧāĨ¤

āĻ–) āĻāĻ•āĻŸāĻŋ āĻŽā§ŒāĻ˛āĻŋāĻ• āĻ¸ā§āĻ¤āĻ°ā§‡, āĻāĻ•āĻŸāĻŋ āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ° āĻ›āĻžāĻĄāĻŧāĻžāĻ‡ āĻāĻ¸āĻāĻ¸āĻāĻ˛āĻ•ā§‡ āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻāĻŋāĻ¨āĨ¤

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 āĻāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡) āĻ†āĻ•āĻžāĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻ…āĻ¸ā§āĻ¤āĻŋāĻ¤ā§āĻŦāĻšā§€āĻ¨ āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ°ā§‡āĻ° āĻŽāĻžāĻ˛āĻŋāĻ• āĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛, āĻĄāĻ•ā§āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨ā§‡ āĻ†āĻ°āĻ“ āĻŦāĻŋāĻļāĻĻ:

āĻ…ā§āĻ¯āĻžāĻĒāĻžāĻšāĻŋ āĻŽāĻĄāĻŋāĻ‰āĻ˛ 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 āĻāĻ° āĻ…āĻ¨ā§‡āĻ•āĻ—ā§āĻ˛āĻŋ āĻŽā§‚āĻ˛ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻžāĻ°āĻŋāĻ¤āĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻž āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻļāĻ°ā§āĻ¤āĻ¸āĻžāĻĒā§‡āĻ•ā§āĻˇ āĻ—āĻ āĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĻā§‡āĻ¯āĻŧāĨ¤ āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻŦā§āĻ°āĻžāĻ‰āĻœāĻžāĻ°ā§‡ āĻĨāĻžāĻ•āĻžāĻ•āĻžāĻ˛ā§€āĻ¨ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¤āĻĨā§āĻ¯ āĻ¸ā§āĻ°āĻ•ā§āĻˇāĻŋāĻ¤ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨, āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻ°āĻž āĻ•ā§€ āĻ¸āĻžā§āĻšāĻ¯āĻŧ āĻ•āĻ°āĻŦ āĻāĻŦāĻ‚ āĻ•ā§‡āĻ¨ āĻ•āĻ°āĻŦ āĻāĻŦāĻ‚ āĻ†āĻŽāĻ°āĻž āĻ•ā§€ āĻŦāĻŋāĻ˛ā§āĻŸ-āĻ‡āĻ¨ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦ āĻ¤āĻž āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻ•āĻ°āĻŋ:

  • āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻŸā§‹āĻ•ā§‡āĻ¨ āĻĻāĻ°āĻ•āĻžāĻ° āĻ¯āĻž āĻ¸āĻšāĻœā§‡ āĻĄāĻŋāĻ•ā§‹āĻĄ āĻ•āĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¨āĻžāĨ¤
  • āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻŸā§‹āĻ•ā§‡āĻ¨ āĻĻāĻ°āĻ•āĻžāĻ° āĻ¯āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ…āĻĒā§āĻ°āĻšāĻ˛āĻŋāĻ¤āĻ¤āĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡ āĻ…āĻĒā§āĻ°āĻšāĻ˛āĻŋāĻ¤āĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤
  • āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻŸā§‹āĻ•ā§‡āĻ¨ āĻĻāĻ°āĻ•āĻžāĻ° āĻ¯āĻž āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ°ā§‡āĻ° āĻŽāĻžāĻ˛āĻŋāĻ•ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¯ā§āĻ•ā§āĻ¤ āĻšāĻŦā§‡ā§ˇ

āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻšā§āĻ¯āĻžāĻļāĻŋāĻ‚ āĻĢāĻžāĻ‚āĻļāĻ¨, āĻāĻ•āĻŸāĻŋ āĻ˛āĻŦāĻŖ āĻāĻŦāĻ‚ āĻŸā§‹āĻ•ā§‡āĻ¨ā§‡āĻ° āĻŦāĻ¯āĻŧāĻ¸ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¤āĻžāĻ°āĻŋāĻ– āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§ˇ āĻĄāĻ•ā§āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨ āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡ 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}

āĻ†āĻĒāĻ¨āĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻĻā§āĻŸāĻŋ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻ¤ā§āĻ˛āĻ¨āĻž āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨.

āĻ¸āĻžāĻĢāĻžāĻ°āĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ āĻ†āĻ•āĻ°ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ āĻ–ā§āĻāĻœā§‡ āĻĒā§‡āĻ¯āĻŧā§‡āĻ›āĻŋ: āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ¸āĻžāĻ°ā§āĻŸāĻŋāĻĢāĻŋāĻ•ā§‡āĻŸ āĻ¸āĻš āĻšā§‹āĻŽ āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻŸ āĻ¸ā§āĻ°āĻ•ā§āĻˇāĻŋāĻ¤ āĻ•āĻ°āĻž (āĻ¸āĻžāĻĢāĻžāĻ°āĻŋ/āĻ†āĻ‡āĻ“āĻāĻ¸ āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡)
āĻāĻŸāĻŋ Nginx-āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ˛ā§āĻ¯āĻŧāĻžāĻ¤ā§‡ āĻ•ā§‹āĻĄā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°ā§‡, āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ¯ā§‡āĻŽāĻ¨ āĻĻā§‡āĻ–āĻž āĻ—ā§‡āĻ›ā§‡, āĻšā§āĻ¯āĻžāĻļāĻŋāĻ‚āĻ¯āĻŧā§‡āĻ° āĻœāĻ¨ā§āĻ¯ hmac āĻ¸āĻ˛ā§āĻŸāĻŋāĻ‚ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻŦāĻžāĻĻ āĻĻāĻŋāĻ¯āĻŧā§‡, āĻ†āĻŽāĻ°āĻž āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻ¯ā§‡ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨āĻŸāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°ā§‡āĻ›āĻŋ āĻ¤āĻžāĻ° āĻ…āĻ‚āĻļāĻŸāĻŋāĻ° āĻ¯ā§āĻ•ā§āĻ¤āĻŋāĻ° āĻĒā§āĻ¨āĻ°āĻžāĻŦā§ƒāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡ ( āĻāĻŸāĻŋ Apache āĻ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧāĻ¨āĻŋ)āĨ¤

āĻāĻŸāĻž āĻ¸ā§āĻĒāĻˇā§āĻŸ āĻšāĻ¯āĻŧā§‡ āĻ—ā§‡āĻ˛ āĻ¯ā§‡ āĻ˛ā§āĻ¯āĻŧāĻž āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻ¸ā§āĻĒāĻˇā§āĻŸ āĻ¯ā§āĻ•ā§āĻ¤āĻŋāĻ¯ā§āĻ•ā§āĻ¤ āĻ­āĻžāĻˇāĻž, āĻāĻŦāĻ‚ āĻ…ā§āĻ¯āĻžāĻĒāĻžāĻšāĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻšāĻœ āĻ•āĻŋāĻ›ā§ āĻ•āĻ°āĻž āĻ¸āĻŽā§āĻ­āĻŦ:

Nginx āĻāĻŦāĻ‚ Apache āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āĻ¯ āĻ…āĻ§ā§āĻ¯āĻ¯āĻŧāĻ¨ āĻ•āĻ°ā§‡:

āĻāĻŦāĻ‚ Lua āĻ­āĻžāĻˇāĻž āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤āĻ•āĻžāĻ°āĻ•ā§‡āĻ° āĻĨā§‡āĻ•ā§‡ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻĢāĻžāĻ‚āĻļāĻ¨:
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 āĻāĻŦāĻ‚ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ¸āĻžāĻ°ā§āĻŸāĻŋāĻĢāĻŋāĻ•ā§‡āĻŸāĻ•ā§‡ āĻ“āĻ¯āĻŧā§‡āĻŦāĻ¸āĻ•ā§‡āĻŸā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡āĻ›āĻŋ

āĻ‰ā§ŽāĻ¸ āĻ˛āĻŋāĻ™ā§āĻ• āĻ­āĻžāĻŦāĻŽā§‚āĻ°ā§āĻ¤āĻŋ.

āĻ†āĻ°āĻ“ āĻāĻ• āĻŽā§āĻšā§‚āĻ°ā§āĻ¤āĨ¤

āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ­āĻžāĻŦā§‡, Apache (āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ Nginx) āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ā§‡ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€ āĻ•ā§‹āĻ¨ āĻ•ā§āĻ°āĻŽā§‡ āĻ˛ā§‡āĻ–āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¤āĻž āĻŦāĻŋāĻŦā§‡āĻšā§āĻ¯ āĻ¨āĻ¯āĻŧ, āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻļā§‡āĻˇ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻ†āĻĻā§‡āĻļā§‡āĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋāĻ¤ā§‡ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ¸āĻžāĻœāĻžāĻ¨ā§‹ āĻšāĻŦā§‡, āĻ¯āĻž āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ°āĻŖā§‡āĻ° āĻ¸ā§āĻ•āĻŋāĻŽā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻŋāĻ˛ā§‡ āĻ¯āĻžāĻ¯āĻŧāĨ¤ āĻ˛ā§āĻ¯āĻŧāĻž āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĨ¤

āĻ¸āĻŽāĻžāĻĒā§āĻ¤āĻŋ:

āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻĒāĻ° āĻĻā§ƒāĻļā§āĻ¯āĻŽāĻžāĻ¨ āĻ…āĻŦāĻ¸ā§āĻĨāĻž (āĻ˛āĻ•ā§āĻˇā§āĻ¯):
āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ (VPN), āĻ‡āĻ‰āĻ¨āĻŋāĻĢāĻžāĻ‡āĻĄ āĻāĻŦāĻ‚ āĻ¸ā§āĻ°āĻ•ā§āĻˇāĻŋāĻ¤ āĻ›āĻžāĻĄāĻŧāĻž IOS-āĻ āĻŽā§‹āĻŦāĻžāĻ‡āĻ˛ āĻĢā§‹āĻ¨ āĻĨā§‡āĻ•ā§‡ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻāĻŦāĻ‚ āĻĒāĻ°āĻŋāĻ•āĻžāĻ āĻžāĻŽā§‹āĻ° āĻŦā§āĻ¯āĻŦāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ‰āĻĒāĻ˛āĻŦā§āĻ§āĨ¤

āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻ…āĻ°ā§āĻœāĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ“āĻ¯āĻŧā§‡āĻŦ āĻ¸āĻ•ā§‡āĻŸ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ°ā§‡āĻ° āĻšā§‡āĻ¯āĻŧā§‡ āĻ•āĻŽ āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻžāĻ° āĻ¸ā§āĻ¤āĻ° āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ†āĻŽāĻ°āĻž ZeroTech āĻ Apple Safari āĻāĻŦāĻ‚ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ¸āĻžāĻ°ā§āĻŸāĻŋāĻĢāĻŋāĻ•ā§‡āĻŸāĻ•ā§‡ āĻ“āĻ¯āĻŧā§‡āĻŦāĻ¸āĻ•ā§‡āĻŸā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡āĻ›āĻŋ

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨