āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻ¤āĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĻāĻ°āĻāĻžāĻ°ā§ āĻšāĻŦā§ āĻ¯āĻžāĻ°āĻž:
- āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻļāĻāĻ¸āĻžāĻĒāĻ¤ā§āĻ° āĻā§ āĻ¤āĻž āĻāĻžāĻ¨ā§ āĻāĻŦāĻ āĻā§āĻ¨ āĻŽā§āĻŦāĻžāĻāĻ˛ āĻ¸āĻžāĻĢāĻžāĻ°āĻŋāĻ¤ā§ āĻāĻ¯āĻŧā§āĻŦāĻ¸āĻā§āĻā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻ¤āĻž āĻŦā§āĻā§;
- āĻāĻŽāĻŋ āĻāĻāĻāĻŋ āĻ¸ā§āĻŽāĻŋāĻ¤ āĻŦā§āĻ¤ā§āĻ¤ā§āĻ° āĻāĻžāĻā§ āĻŦāĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¨āĻŋāĻā§āĻ° āĻāĻžāĻā§ āĻāĻ¯āĻŧā§āĻŦ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ;
- āĻŽāĻ¨ā§ āĻāĻ°ā§ āĻ¯ā§ āĻ¸āĻŦāĻāĻŋāĻā§ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻā§āĻ āĻāĻ°ā§āĻā§, āĻāĻŦāĻ āĻŦāĻŋāĻļā§āĻŦāĻā§ āĻāĻāĻā§ āĻŦā§āĻļāĻŋ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻ āĻāĻŦāĻ āĻ¨āĻŋāĻ°āĻžāĻĒāĻĻ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¯āĻŧāĨ¤
āĻāĻ¯āĻŧā§āĻŦāĻ¸āĻā§āĻā§āĻ° āĻāĻ¤āĻŋāĻšāĻžāĻ¸ āĻĒā§āĻ°āĻžāĻ¯āĻŧ 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 āĻĒā§āĻ¸ā§āĻ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻļā§āĻ (āĻāĻāĻ¨ āĻāĻžāĻ āĻāĻ°āĻā§ āĻ¨āĻž)
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 = āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ = āĻĒā§āĻ¨āĻ°ā§āĻ˛āĻŋāĻāĻ¨
āĻ ā§āĻ¯āĻžāĻĒāĻžāĻāĻŋ āĻŽā§āĻ˛ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ Apache HTTP āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ āĻ āĻāĻŋāĻŦā§āĻ¯āĻā§āĻ¤āĻŋ
āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻšāĻ˛ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻŽā§āĻ˛āĻŋāĻ āĻ¨āĻāĻļāĻž:
SSLVerifyClient optional
RewriteEngine on
RewriteCond %{SSL:SSL_CLIENT_VERIFY} !=SUCCESS
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule .? - [F]
#ErrorDocument 403 "You need a client side certificate issued by CAcert to access this site"
#websocket for safari without cert auth
<If "%{SSL:SSL_CLIENT_VERIFY} != 'SUCCESS'">
<If "%{HTTP:Upgrade} = 'websocket'">
...
#СаĐŧĐĩŅĐ°ĐĩĐŧ авŅĐžŅиСаŅиŅ ĐŋĐž вĐģĐ°Đ´ĐĩĐģŅŅŅ ŅĐĩŅŅиŅиĐēĐ°ŅĐ° ĐŊĐ° авŅĐžŅиСаŅиŅ ĐŋĐž ĐŊĐžĐŧĐĩŅŅ ĐŋŅĐžŅĐžĐēĐžĐģĐ°
SSLUserName SSl_PROTOCOL
</If>
</If>
āĻļāĻāĻ¸āĻžāĻĒāĻ¤ā§āĻ°ā§āĻ° āĻŽāĻžāĻ˛āĻŋāĻā§āĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻ āĻ¨ā§āĻŽā§āĻĻāĻ¨ā§āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻāĻŋ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻžāĻ¯āĻŧ āĻ¨āĻŋāĻ¯āĻŧā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻāĻŋ āĻ āĻ¨ā§āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤ āĻļāĻāĻ¸āĻžāĻĒāĻ¤ā§āĻ°ā§āĻ° āĻ¸āĻžāĻĨā§, āĻāĻŽāĻžāĻā§ āĻāĻāĻāĻŋ āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ SSl_PROTOCOL (SSL_CLIENT_S_DN_CN āĻāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§) āĻāĻāĻžāĻ°ā§ āĻāĻāĻāĻŋ āĻ āĻ¸ā§āĻ¤āĻŋāĻ¤ā§āĻŦāĻšā§āĻ¨ āĻļāĻāĻ¸āĻžāĻĒāĻ¤ā§āĻ°ā§āĻ° āĻŽāĻžāĻ˛āĻŋāĻ āĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛, āĻĄāĻā§āĻŽā§āĻ¨ā§āĻā§āĻļāĻ¨ā§ āĻāĻ°āĻ āĻŦāĻŋāĻļāĻĻ:
2. āĻāĻ¯āĻŧā§āĻŦāĻ¸āĻā§āĻāĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻĒāĻ¨āĻŋ āĻ
āĻ¸ā§āĻĨāĻžāĻ¯āĻŧā§ āĻ¸ā§āĻļāĻ¨āĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻāĻŋ āĻ
āĻ¨āĻ¨ā§āĻ¯, āĻ¸ā§āĻ°āĻā§āĻˇāĻŋāĻ¤ āĻāĻŦāĻ āĻ¸ā§āĻ°āĻā§āĻˇāĻŋāĻ¤ āĻ¸āĻāĻ¯ā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻ¯āĻž āĻāĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ (āĻ¨āĻ¨-āĻāĻ¯āĻŧā§āĻŦāĻ¸āĻā§āĻ) āĻŦā§āĻ°āĻžāĻāĻāĻžāĻ° āĻ
āĻ¨ā§āĻ°ā§āĻ§ā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¤ā§āĻ°āĻŋ āĻšāĻ¯āĻŧā§ˇ
āĻĒā§āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§ āĻ āĻāĻŋāĻā§āĻāĻ¤āĻžāĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§, āĻāĻĒāĻ¨āĻžāĻā§ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤ (āĻ¨āĻ¨-āĻāĻ¯āĻŧā§āĻŦ āĻ¸āĻā§āĻ) āĻ āĻ¨ā§āĻ°ā§āĻ§ā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻ¯āĻŧā§āĻŦ āĻ¸āĻā§āĻ āĻ¸āĻāĻ¯ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻ¸ā§āĻĨāĻžāĻ¯āĻŧā§ āĻā§āĻā§āĻ¨ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ā§ āĻāĻāĻāĻŋ āĻ āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻŦāĻŋāĻāĻžāĻ āĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤
#ĐŋОдĐŗĐžŅОвĐēĐ° ĐŋĐĩŅĐĩĐ´Đ°ŅĐ° ŅĐĩĐąĐĩ ĐĄookie ŅĐĩŅĐĩС ĐŋĐžĐģŅСОваŅĐĩĐģŅŅĐēиК ĐąŅĐ°ŅСĐĩŅ
<If "%{SSL:SSL_CLIENT_VERIFY} = 'SUCCESS'">
<If "%{HTTP:Upgrade} != 'websocket'">
Header set Set-Cookie "websocket-allowed=true; path=/; Max-Age=100"
</If>
</If>
#ĐŋŅОвĐĩŅĐēĐ° Cookie Đ´ĐģŅ ŅŅŅĐ°ĐŊОвĐģĐĩĐŊиŅ вĐĩĐą-ŅĐžĐēĐĩŅ ŅĐžĐĩдиĐŊĐĩĐŊиŅ
<source lang="javascript">
<If "%{SSL:SSL_CLIENT_VERIFY} != 'SUCCESS'">
<If "%{HTTP:Upgrade} = 'websocket'">
#check for exists cookie
#get and check
SetEnvIf Cookie "websocket-allowed=(.*)" env-var-name=$1
#or rewrite rule
RewriteCond %{HTTP_COOKIE} !^.*mycookie.*$
#or if
<If "%{HTTP_COOKIE} =~ /(^|; )cookie-names*=s*some-val(;|$)/ >
</If
</If>
</If>
āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ¯āĻŧ āĻĻā§āĻāĻž āĻā§āĻā§ āĻ¯ā§ āĻāĻāĻŋ āĻāĻžāĻ āĻāĻ°ā§āĨ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻŦā§āĻ°āĻžāĻāĻāĻžāĻ°ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ¨āĻŋāĻā§āĻ° āĻāĻžāĻā§ āĻā§āĻāĻŋ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻž āĻ¸āĻŽā§āĻāĻŦāĨ¤
3. āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻā§āĻ¸āĻŋ āĻāĻ¯āĻŧā§āĻŦ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ āĻ¸ā§āĻĨāĻžāĻ¯āĻŧā§ āĻ¸ā§āĻļāĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ (āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻŽāĻĄāĻŋāĻāĻ˛ āĻāĻŦāĻ āĻĢāĻžāĻāĻļāĻ¨)āĨ¤
āĻāĻŽāĻ°āĻž āĻāĻā§āĻ āĻā§āĻ¨ā§āĻāĻŋ, Apache āĻāĻ° āĻ āĻ¨ā§āĻāĻā§āĻ˛āĻŋ āĻŽā§āĻ˛ āĻāĻžāĻ°ā§āĻ¯āĻāĻžāĻ°āĻŋāĻ¤āĻž āĻ°āĻ¯āĻŧā§āĻā§ āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻļāĻ°ā§āĻ¤āĻ¸āĻžāĻĒā§āĻā§āĻˇ āĻāĻ āĻ¨ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧāĨ¤ āĻ¯āĻžāĻāĻšā§āĻ, āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻŦā§āĻ°āĻžāĻāĻāĻžāĻ°ā§ āĻĨāĻžāĻāĻžāĻāĻžāĻ˛ā§āĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¤āĻĨā§āĻ¯ āĻ¸ā§āĻ°āĻā§āĻˇāĻŋāĻ¤ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨, āĻ¤āĻžāĻ āĻāĻŽāĻ°āĻž āĻā§ āĻ¸āĻā§āĻāĻ¯āĻŧ āĻāĻ°āĻŦ āĻāĻŦāĻ āĻā§āĻ¨ āĻāĻ°āĻŦ āĻāĻŦāĻ āĻāĻŽāĻ°āĻž āĻā§ āĻŦāĻŋāĻ˛ā§āĻ-āĻāĻ¨ āĻĢāĻžāĻāĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦ āĻ¤āĻž āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻāĻ°āĻŋ:
- āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻāĻŋ āĻā§āĻā§āĻ¨ āĻĻāĻ°āĻāĻžāĻ° āĻ¯āĻž āĻ¸āĻšāĻā§ āĻĄāĻŋāĻā§āĻĄ āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¨āĻžāĨ¤
- āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻā§āĻā§āĻ¨ āĻĻāĻ°āĻāĻžāĻ° āĻ¯āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ āĻĒā§āĻ°āĻāĻ˛āĻŋāĻ¤āĻ¤āĻž āĻ°āĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ āĻ āĻĒā§āĻ°āĻāĻ˛āĻŋāĻ¤āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻā§āĻˇāĻŽāĻ¤āĻž āĻ°āĻ¯āĻŧā§āĻā§āĨ¤
- āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻāĻŋ āĻā§āĻā§āĻ¨ āĻĻāĻ°āĻāĻžāĻ° āĻ¯āĻž āĻļāĻāĻ¸āĻžāĻĒāĻ¤ā§āĻ°ā§āĻ° āĻŽāĻžāĻ˛āĻŋāĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¯ā§āĻā§āĻ¤ āĻšāĻŦā§ā§ˇ
āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻšā§āĻ¯āĻžāĻļāĻŋāĻ āĻĢāĻžāĻāĻļāĻ¨, āĻāĻāĻāĻŋ āĻ˛āĻŦāĻŖ āĻāĻŦāĻ āĻā§āĻā§āĻ¨ā§āĻ° āĻŦāĻ¯āĻŧāĻ¸ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¤āĻžāĻ°āĻŋāĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§ˇ āĻĄāĻā§āĻŽā§āĻ¨ā§āĻā§āĻļāĻ¨ āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§
āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻāĻ āĻ¨āĻāĻļāĻž āĻāĻŋāĻ˛:
#ĐŊĐĩŅ ŅĐĩŅŅиŅиĐēĐ°ŅĐ°, и ОйŅĐ°ŅĐĩĐŊиĐĩ Đē 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
JSON āĻāĻ¯āĻŧā§āĻŦ āĻā§āĻā§āĻ¨ā§āĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§ āĻā§āĻā§āĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻĒā§āĻ°āĻŽāĻžāĻŖā§āĻāĻ°āĻŖ Apache āĻā§-āĻĢā§āĻ¯āĻžāĻā§āĻāĻ° (2FA) āĻĒā§āĻ°āĻŽāĻžāĻŖā§āĻāĻ°āĻŖ āĻāĻŋāĻāĻžāĻŦā§ Apache āĻ āĻĻā§āĻ-āĻĢā§āĻ¯āĻžāĻā§āĻāĻ° āĻĒā§āĻ°āĻŽāĻžāĻŖā§āĻāĻ°āĻŖ āĻ¯ā§āĻ āĻāĻ°āĻŦā§āĻ¨ āĻāĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻŽāĻĄāĻŋāĻāĻ˛ āĻāĻ¨āĻ¸ā§āĻāĻ˛ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻĒāĻ¨āĻžāĻ° āĻ ā§āĻ¯āĻžāĻĒāĻžāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖā§ āĻĻā§āĻŦāĻŋ-āĻĢā§āĻ¯āĻžāĻā§āĻāĻ° āĻĒā§āĻ°āĻŽāĻžāĻŖā§āĻāĻ°āĻŖ āĻāĻ¨ā§āĻ¨
āĻšā§āĻ¯āĻžāĻ, āĻ°ā§āĻĄāĻŋāĻŽā§āĻĄ āĻŽāĻĄāĻŋāĻāĻ˛ āĻāĻā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻ¸āĻŦāĻ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ˛āĻžāĻĒā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻŦāĻĻā§āĻ§ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ¸ā§āĻļāĻ¨ āĻāĻŦāĻ āĻ
āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻā§āĻāĻŋāĻ āĻļā§āĻ°ā§ āĻāĻ°āĻžāĻ° āĻāĻāĻžāĻ°ā§ āĻāĻ°ā§āĻāĻŋāĻĢā§āĻ¯āĻžāĻā§āĻ āĻ°āĻ¯āĻŧā§āĻā§ā§ˇ āĻ
āĻ°ā§āĻĨāĻžā§ āĻāĻŋāĻā§āĻā§āĻˇāĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¨āĻ¯āĻŧāĨ¤
āĻ
āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻāĻ°āĻ¤ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻžāĻāĻ āĻāĻ¨ā§āĻāĻž āĻ¸āĻŽāĻ¯āĻŧ āĻ˛ā§āĻā§āĻā§, āĻ¯āĻž āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĻā§āĻ¯āĻŧāĻ¨āĻŋāĨ¤
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