āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āφāĻŽāϰāĻž 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

DDoS āϏ⧁āϰāĻ•ā§āώāĻž, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻš āϏāĻžāχāϟāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ đŸ”Ĩ DDoS āϏ⧁āϰāĻ•ā§āώāĻž āϏāĻš āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ | ProHoster