# 3.5 HTTPS å¦ä½ä¼åï¼
ç±è£¸æ°æ®ä¼ è¾ç HTTP å议转æå 坿°æ®ä¼ è¾ç HTTPS åè®®ï¼ç»åºç¨æ°æ®å¥äºä¸ªãä¿æ¤ä¼ãï¼æé«å®å ¨æ§çåæ¶ä¹å¸¦æ¥äºæ§è½æ¶èã
å 为 HTTPS ç¸æ¯ HTTP åè®®å¤ä¸ä¸ª TLS åè®®æ¡æè¿ç¨ï¼ç®çæ¯ä¸ºäºéè¿é对称å 坿¡æååæè 交æ¢åºå¯¹ç§°å å¯å¯é¥ï¼è¿ä¸ªè¿ç¨æé¿å¯ä»¥è±è´¹æ 2 RTTï¼æ¥çåç»ä¼ è¾çåºç¨æ°æ®é½å¾ä½¿ç¨å¯¹ç§°å å¯å¯é¥æ¥å å¯/è§£å¯ã
ä¸ºäºæ°æ®çå®å ¨æ§ï¼æä»¬ä¸å¾ä¸ä½¿ç¨ HTTPS åè®®ï¼è³ä»å¤§é¨åç½åé½å·²ä» HTTP è¿ç§»è³ HTTPS åè®®ï¼å æ¤é对 HTTPS çä¼åæ¯é常éè¦çã
è¿æ¬¡ï¼å°±ä»å¤ä¸ªè§åº¦æ¥ä¼å HTTPSã

# åææ§è½æè
æ¢ç¶è¦å¯¹ HTTPS ä¼åï¼é£å¾æ¸ æ¥åªäºæ¥éª¤ä¼äº§çæ§è½æ¶èï¼å对çä¸è¯ã
äº§çæ§è½æ¶èç两个ç¯èï¼
- 第ä¸ä¸ªç¯èï¼ TLS åè®®æ¡æè¿ç¨ï¼
- 第äºä¸ªç¯èï¼æ¡æåç对称å 坿¥æä¼ è¾ã
对äºç¬¬äºç¯èï¼ç°å¨ä¸»æµç对称å å¯ç®æ³ AESãChaCha20 æ§è½é½æ¯ä¸éçï¼èä¸ä¸äº CPU ååè¿é对å®ä»¬åäºç¡¬ä»¶çº§å«çä¼åï¼å æ¤è¿ä¸ªç¯èçæ§è½æ¶èå¯ä»¥è¯´é常å°å°ã
è第ä¸ä¸ªç¯èï¼TLS åè®®æ¡æè¿ç¨ä¸ä» å¢å äºç½ç»å»¶æ¶ï¼æé¿å¯ä»¥è±è´¹æ 2 RTTï¼ï¼è䏿¡æè¿ç¨ä¸çä¸äºæ¥éª¤ä¹ä¼äº§çæ§è½æèï¼æ¯å¦ï¼
- å¯¹äº ECDHE å¯é¥ååç®æ³ï¼æ¡æè¿ç¨ä¸ä¼å®¢æ·ç«¯åæå¡ç«¯é½éè¦ä¸´æ¶çææ¤åæ²çº¿å ¬ç§é¥ï¼
- 客æ·ç«¯éªè¯è¯ä¹¦æ¶ï¼ä¼è®¿é® CA è·å CRL æè OCSPï¼ç®çæ¯éªè¯æå¡å¨çè¯ä¹¦æ¯å¦æè¢«åéï¼
- åæ¹è®¡ç® Pre-Masterï¼ä¹å°±æ¯å¯¹ç§°å å¯å¯é¥ï¼
为äºå¤§å®¶æ´æ¸ æ¥è¿äºæ¥éª¤å¨ TLS åè®®æ¡æçåªä¸ä¸ªé¶æ®µï¼æç»åºäºè¿å¹ å¾ï¼

# 硬件ä¼å
ç©æ¸¸ææ¶ï¼å¦ææä»¬æä¹é½æèä¸äºå¯¹æ¹ï¼é£ä¹æä¸ä¸ªæææãæå¿«çæ¹å¼æ¥å强ï¼é£å°±æ¯ãå é±ãï¼å¦æè¿æ¯ä¸è¡ï¼é£è¯´æä½ å çé±è¿ä¸å¤å¤ã

对äºè®¡ç®æºé乿¯ä¸æ ·ï¼è½¯ä»¶é½æ¯è·å¨ç©ç硬件ä¸ï¼ç¡¬ä»¶è¶çé¼ï¼è½¯ä»¶è·çä¹è¶å¿«ï¼æä»¥å¦æè¦ä¼å HTTPS ä¼åï¼æç´æ¥çæ¹å¼å°±æ¯è±é±ä¹°æ§è½åæ°æ´çé¼ç硬件ã
使¯è±é±ä¹è¦è±å¯¹æ¹åï¼HTTPS åè®®æ¯è®¡ç®å¯éåï¼è䏿¯ I/O å¯éåï¼æä»¥ä¸è½æé±è±å¨ç½å¡ã硬ççå°æ¹ï¼åºè¯¥è±å¨ CPU ä¸ã
ä¸ä¸ªå¥½ç CPUï¼å¯ä»¥æé«è®¡ç®æ§è½ï¼å 为 HTTPS è¿æ¥è¿ç¨ä¸å°±æå¤§ééè¦è®¡ç®å¯é¥çè¿ç¨ï¼æä»¥è¿æ ·å¯ä»¥å é TLS æ¡æè¿ç¨ã
å¦å¤ï¼å¦æå¯ä»¥ï¼åºè¯¥éæ©å¯ä»¥æ¯æ AES-NI ç¹æ§ç CPUï¼å 为è¿ç§æ¬¾å¼ç CPU è½å¨æä»¤çº§å«ä¼åäº AES ç®æ³ï¼è¿æ ·ä¾¿å éäºæ°æ®çå è§£å¯ä¼ è¾è¿ç¨ã
å¦æä½ çæå¡å¨æ¯ Linux ç³»ç»ï¼é£ä¹ä½ å¯ä»¥ä½¿ç¨ä¸é¢è¿è¡å½ä»¤æ¥ç CPU æ¯å¦æ¯æ AES-NI æä»¤éï¼

妿æä»¬ç CPU æ¯æ AES-NI ç¹æ§ï¼é£ä¹å¯¹äºå¯¹ç§°å å¯çç®æ³åºè¯¥éæ© AES ç®æ³ãå¦åå¯ä»¥éæ© ChaCha20 对称å å¯ç®æ³ï¼å 为 ChaCha20 ç®æ³çè¿ç®æä»¤ç¸æ¯ AES ç®æ³ä¼å¯¹ CPU æ´å好ä¸ç¹ã
# 软件ä¼å
å¦æå ¬å¸é¢ç®å è¶³å¯¹äºæ°çæå¡å¨æ¯å¯ä»¥èèè´ä¹°æ´å¥½ç CPUï¼ä½æ¯å¯¹äºå·²ç»å¨ä½¿ç¨çæå¡å¨ï¼ç¡¬ä»¶ä¼åçæ¹å¼å¯è½å°±ä¸å¤ªéåäºï¼äºæ¯å°±è¦ä»è½¯ä»¶çæ¹åæ¥ä¼åäºã
软件çä¼åæ¹åå¯ä»¥åå±ä¸¤ç§ï¼ä¸ä¸ªæ¯è½¯ä»¶å级ï¼ä¸ä¸ªæ¯åè®®ä¼åã
å 说第ä¸ä¸ªè½¯ä»¶å级ï¼è½¯ä»¶å级就æ¯å°æ£å¨ä½¿ç¨ç软件åçº§å°ææ°çæ¬ï¼å ä¸ºææ°çæ¬ä¸ä» æä¾äºææ°çç¹æ§ï¼ä¹ä¼åäºä»¥å软件çé®é¢ææ§è½ãæ¯å¦ï¼
- å° Linux å æ ¸ä» 2.x åçº§å° 4.xï¼
- å° OpenSSL ä» 1.0.1 åçº§å° 1.1.1ï¼
- ...
çä¼¼ç®åç软件å级ï¼å¯¹äºææç¾ä¸åæå¡å¨çå ¬å¸æ¥è¯´ï¼è½¯ä»¶å级ä¹è·ç¡¬ä»¶åçº§åæ ·æ¯ä¸ä¸ªæ£æçé®é¢ï¼å 为è¦å®è¡è½¯ä»¶å级ï¼ä¼è±è´¹æ¶é´å人åï¼åæ¶ä¹åå¨ä¸å®çé£é©ï¼ä¹å¯è½ä¼å½±åæ£å¸¸ççº¿ä¸æå¡ã
æ¢ç¶å¦æ¤ï¼æä»¬æç®å æ¾å°åè®®ä¼åï¼ä¹å°±æ¯å¨ç°æçç¯èä¸ï¼éè¿è¾å°çæ¹å¨ï¼æ¥è¿è¡ä¼åã
# åè®®ä¼å
åè®®çä¼åå°±æ¯å¯¹ãå¯é¥äº¤æ¢è¿ç¨ãè¿è¡ä¼åã
# å¯é¥äº¤æ¢ç®æ³ä¼å
TLS 1.2 çæ¬å¦æä½¿ç¨çæ¯ RSA å¯é¥äº¤æ¢ç®æ³ï¼é£ä¹éè¦ 4 æ¬¡æ¡æï¼ä¹å°±æ¯è¦è±è´¹ 2 RTTï¼æå¯ä»¥è¿è¡åºç¨æ°æ®çä¼ è¾ï¼èä¸ RSA å¯é¥äº¤æ¢ç®æ³ä¸å ·å¤ååå®å ¨æ§ã
æ»ä¹ä½¿ç¨ RSA å¯é¥äº¤æ¢ç®æ³ç TLS æ¡æè¿ç¨ï¼ä¸ä» æ ¢ï¼èä¸å®å ¨æ§ä¹ä¸é«ã
å æ¤å¦æå¯ä»¥ï¼å°½ééç¨ ECDHE å¯é¥äº¤æ¢ç®æ³æ¿æ¢ RSA ç®æ³ï¼å ä¸ºè¯¥ç®æ³ç±äºæ¯æãFalse Startãï¼å®æ¯âæ¢è·âçææï¼å®¢æ·ç«¯å¯ä»¥å¨ TLS åè®®ç第 3 æ¬¡æ¡æåï¼ç¬¬ 4 æ¬¡æ¡æåï¼åéå å¯çåºç¨æ°æ®ï¼ä»¥æ¤å° TLS æ¡æçæ¶æ¯å¾è¿ç± 2 RTT åå°å° 1 RTTï¼èä¸å®å ¨æ§ä¹é«ï¼å ·å¤ååå®å ¨æ§ã
ECDHE ç®æ³æ¯åºäºæ¤åæ²çº¿å®ç°çï¼ä¸åçæ¤åæ²çº¿æ§è½ä¹ä¸åï¼åºè¯¥å°½ééæ© x25519 æ²çº¿ï¼è¯¥æ²çº¿æ¯ç®åæå¿«çæ¤åæ²çº¿ã
æ¯å¦å¨ Nginx ä¸ï¼å¯ä»¥ä½¿ç¨ ssl_ecdh_curve æä»¤é ç½®æ³ä½¿ç¨çæ¤åæ²çº¿ï¼æä¼å 使ç¨çæ¾å¨åé¢ï¼

对äºå¯¹ç§°å å¯ç®æ³æ¹é¢ï¼å¦æå¯¹å®å ¨æ§ä¸æ¯ç¹å«é«çè¦æ±ï¼å¯ä»¥éç¨ AES_128_GCMï¼å®æ¯ AES_256_GCM å¿«ä¸äºï¼å 为å¯é¥çé¿åº¦çä¸äºã
æ¯å¦å¨ Nginx ä¸ï¼å¯ä»¥ä½¿ç¨ ssl_ciphers æä»¤é ç½®æ³ä½¿ç¨çé对称å å¯ç®æ³å对称å å¯ç®æ³ï¼ä¹å°±æ¯å¯é¥å¥ä»¶ï¼è䏿æ§è½æå¿«æå®å ¨çç®æ³æ¾å¨æåé¢ï¼

# TLS å级
å½ç¶ï¼å¦æå¯ä»¥ï¼ç´æ¥æ TLS 1.2 å级æ TLS 1.3ï¼TLS 1.3 å¤§å¹ åº¦ç®åäºæ¡æçæ¥éª¤ï¼å®æ TLS æ¡æåªè¦ 1 RTTï¼èä¸å®å ¨æ§æ´é«ã
å¨ TLS 1.2 çæ¡æä¸ï¼ä¸è¬æ¯éè¦ 4 æ¬¡æ¡æï¼å è¦éè¿ Client Hello ï¼ç¬¬ 1 æ¬¡æ¡æï¼å Server Helloï¼ç¬¬ 2 æ¬¡æ¡æï¼ æ¶æ¯åååºåç»ä½¿ç¨çå å¯ç®æ³ï¼åäºç¸äº¤æ¢å ¬é¥ï¼ç¬¬ 3 å 第 4 æ¬¡æ¡æï¼ï¼ç¶å计ç®åºæç»çä¼è¯å¯é¥ï¼ä¸å¾ç左边é¨åå°±æ¯ TLS 1.2 çæ¡æè¿ç¨ï¼

ä¸å¾çå³è¾¹é¨åå°±æ¯ TLS 1.3 çæ¡æè¿ç¨ï¼å¯ä»¥åç° TLS 1.3 æ Hello åå ¬é¥äº¤æ¢è¿ä¸¤ä¸ªæ¶æ¯åå¹¶æäºä¸ä¸ªæ¶æ¯ï¼äºæ¯è¿æ ·å°±åå°å°åªé 1 RTT å°±è½å®æ TLS æ¡æã
æä¹åå¹¶çå¢ï¼å ·ä½çåæ³æ¯ï¼å®¢æ·ç«¯å¨ Client Hello æ¶æ¯é带ä¸äºæ¯æçæ¤åæ²çº¿ï¼ä»¥åè¿äºæ¤åæ²çº¿å¯¹åºçå ¬é¥ã
æå¡ç«¯æ¶å°åï¼éå®ä¸ä¸ªæ¤åæ²çº¿çåæ°ï¼ç¶åè¿åæ¶æ¯æ¶ï¼å¸¦ä¸æå¡ç«¯è¿è¾¹çå ¬é¥ãç»è¿è¿ 1 个 RTTï¼åæ¹æä¸å·²ç»æçæä¼è¯å¯é¥çææäºï¼äºæ¯å®¢æ·ç«¯è®¡ç®åºä¼è¯å¯é¥ï¼å°±å¯ä»¥è¿è¡åºç¨æ°æ®çå å¯ä¼ è¾äºã
èä¸ï¼TLS1.3 对å¯ç å¥ä»¶è¿è¡âåè¥âäºï¼ 对äºå¯é¥äº¤æ¢ç®æ³ï¼åºé¤äºä¸æ¯æååå®å ¨æ§ç RSA å DH ç®æ³ï¼åªæ¯æ ECDHE ç®æ³ã
对äºå¯¹ç§°å å¯åç¾åç®æ³ï¼åªæ¯æç®åæå®å ¨çå 个å¯ç å¥ä»¶ï¼æ¯å¦ openssl ä¸ä» æ¯æä¸é¢ 5 ç§å¯ç å¥ä»¶ï¼
- TLS_AES_256_GCM_SHA384
- TLS_CHACHA20_POLY1305_SHA256
- TLS_AES_128_GCM_SHA256
- TLS_AES_128_CCM_8_SHA256
- TLS_AES_128_CCM_SHA256
乿以 TLS1.3 ä» æ¯æè¿ä¹å°çå¯ç å¥ä»¶ï¼æ¯å 为 TLS1.2 ç±äºæ¯æåç§å¤èä¸ä¸å®å ¨çå¯ç å¥ä»¶ï¼ä¸é´äººå¯ä»¥å©ç¨é级æ»å»ï¼ä¼ªé 客æ·ç«¯ç Client Hello æ¶æ¯ï¼æ¿æ¢å®¢æ·ç«¯æ¯æçå¯ç å¥ä»¶ä¸ºä¸äºä¸å®å ¨çå¯ç å¥ä»¶ï¼ä½¿å¾æå¡å¨è¢«è¿«ä½¿ç¨è¿ä¸ªå¯ç å¥ä»¶è¿è¡ HTTPS è¿æ¥ï¼ä»èç ´è§£å¯æã
# è¯ä¹¦ä¼å
为äºéªè¯çæå¡å¨çèº«ä»½ï¼æå¡å¨ä¼å¨ TLS æ¡æè¿ç¨ä¸ï¼æèªå·±çè¯ä¹¦åç»å®¢æ·ç«¯ï¼ä»¥æ¤è¯æèªå·±èº«ä»½æ¯å¯ä¿¡çã
对äºè¯ä¹¦çä¼åï¼å¯ä»¥æä¸¤ä¸ªæ¹åï¼
- ä¸ä¸ªæ¯è¯ä¹¦ä¼ è¾ï¼
- ä¸ä¸ªæ¯è¯ä¹¦éªè¯ï¼
# è¯ä¹¦ä¼ è¾ä¼å
è¦è®©è¯ä¹¦æ´ä¾¿äºä¼ è¾ï¼é£å¿ ç¶æ¯åå°è¯ä¹¦ç大å°ï¼è¿æ ·å¯ä»¥è约带宽ï¼ä¹è½åå°å®¢æ·ç«¯çè¿ç®éãæä»¥ï¼å¯¹äºæå¡å¨çè¯ä¹¦åºè¯¥éæ©æ¤åæ²çº¿ï¼ECDSAï¼è¯ä¹¦ï¼è䏿¯ RSA è¯ä¹¦ï¼å 为å¨ç¸åå®å ¨å¼ºåº¦ä¸ï¼ ECC å¯é¥é¿åº¦æ¯ RSA ççå¤ã
# è¯ä¹¦éªè¯ä¼å
客æ·ç«¯å¨éªè¯è¯ä¹¦æ¶ï¼æ¯ä¸ªå¤æçè¿ç¨ï¼ä¼èµ°è¯ä¹¦é¾é级éªè¯ï¼éªè¯çè¿ç¨ä¸ä» éè¦ãç¨ CA å ¬é¥è§£å¯è¯ä¹¦ã以åãç¨ç¾åç®æ³éªè¯è¯ä¹¦ç宿´æ§ãï¼èä¸ä¸ºäºç¥éè¯ä¹¦æ¯å¦è¢« CA åéï¼å®¢æ·ç«¯ææ¶è¿ä¼åå»è®¿é® CAï¼ ä¸è½½ CRL æè OCSP æ°æ®ï¼ä»¥æ¤ç¡®è®¤è¯ä¹¦çæææ§ã
è¿ä¸ªè®¿é®è¿ç¨æ¯ HTTP 访é®ï¼å æ¤åä¼äº§çä¸ç³»åç½ç»éä¿¡çå¼éï¼å¦ DNS æ¥è¯¢ã建ç«è¿æ¥ãæ¶åæ°æ®çã
# CRL
CRL 称为è¯ä¹¦åéå表ï¼Certificate Revocation Listï¼ï¼è¿ä¸ªå表æ¯ç± CA å®ææ´æ°ï¼å表å 容齿¯è¢«æ¤éä¿¡ä»»çè¯ä¹¦åºå·ï¼å¦ææå¡å¨çè¯ä¹¦å¨æ¤å表ï¼å°±è®¤ä¸ºè¯ä¹¦å·²ç»å¤±æï¼ä¸å¨çè¯ï¼å认为è¯ä¹¦æ¯ææçã

使¯ CRL åå¨ä¸¤ä¸ªé®é¢ï¼
- 第ä¸ä¸ªé®é¢ï¼ç±äº CRL å表æ¯ç± CA ç»´æ¤çï¼å®ææ´æ°ï¼å¦æä¸ä¸ªè¯ä¹¦å被åéåï¼å®¢æ·ç«¯å¨æ´æ° CRL ä¹åè¿æ¯ä¼ä¿¡ä»»è¿ä¸ªè¯ä¹¦ï¼å®æ¶æ§è¾å·®ï¼
- 第äºä¸ªé®é¢ï¼éçåéè¯ä¹¦çå¢å¤ï¼å表ä¼è¶æ¥è¶å¤§ï¼ä¸è½½çé度就ä¼è¶æ ¢ï¼ä¸è½½å®å®¢æ·ç«¯è¿å¾éåè¿ä¹å¤§çå表ï¼é£ä¹å°±ä¼å¯¼è´å®¢æ·ç«¯å¨æ ¡éªè¯ä¹¦è¿ä¸ç¯èçå»¶æ¶å¾å¤§ï¼è¿èææ ¢äº HTTPS è¿æ¥ã
# OCSP
å æ¤ï¼ç°å¨åºæ¬é½æ¯ä½¿ç¨ OCSP ï¼å为å¨çº¿è¯ä¹¦ç¶æåè®®ï¼Online Certificate Status Protocolï¼æ¥æ¥è¯¢è¯ä¹¦çæææ§ï¼å®ç工使¹å¼æ¯å CA åéæ¥è¯¢è¯·æ±ï¼è®© CA è¿åè¯ä¹¦çææç¶æã

ä¸å¿ å CRL æ¹å¼å®¢æ·ç«¯éè¦ä¸è½½å¤§å¤§çå表ï¼è¿è¦ä»å表æ¥è¯¢ï¼åæ¶å 为å¯ä»¥å®æ¶æ¥è¯¢æ¯ä¸å¼ è¯ä¹¦çæææ§ï¼è§£å³äº CRL ç宿¶æ§é®é¢ã
OCSP éè¦å CA æ¥è¯¢ï¼å æ¤ä¹æ¯è¦åçç½ç»è¯·æ±ï¼èä¸è¿å¾ç CA æå¡å¨çâè¸è²âï¼å¦æç½ç»ç¶æä¸å¥½ï¼æè CA æå¡å¨ç¹å¿ï¼ä¹ä¼å¯¼è´å®¢æ·ç«¯å¨æ ¡éªè¯ä¹¦è¿ä¸ç¯èçå»¶æ¶å大ã
# OCSP Stapling
äºæ¯ä¸ºäºè§£å³è¿ä¸ä¸ªç½ç»å¼éï¼å°±åºç°äº OCSP Staplingï¼å ¶åçæ¯ï¼æå¡å¨å CA 卿æ§å°æ¥è¯¢è¯ä¹¦ç¶æï¼è·å¾ä¸ä¸ªå¸¦ææ¶é´æ³åç¾åçååºç»æå¹¶ç¼åå®ã

彿客æ·ç«¯åèµ·è¿æ¥è¯·æ±æ¶ï¼æå¡å¨ä¼æè¿ä¸ªãååºç»æãå¨ TLS æ¡æè¿ç¨ä¸åç»å®¢æ·ç«¯ãç±äºæç¾åçåå¨ï¼æå¡å¨æ æ³ç¯¡æ¹ï¼å æ¤å®¢æ·ç«¯å°±è½å¾ç¥è¯ä¹¦æ¯å¦å·²è¢«åéäºï¼è¿æ ·å®¢æ·ç«¯å°±ä¸éè¦å廿¥è¯¢ã
# ä¼è¯å¤ç¨
TLS æ¡æçç®çå°±æ¯ä¸ºäºåååºä¼è¯å¯é¥ï¼ä¹å°±æ¯å¯¹ç§°å å¯å¯é¥ï¼é£æä»¬å¦ææä»¬æé¦æ¬¡ TLS æ¡æååç对称å å¯å¯é¥ç¼åèµ·æ¥ï¼å¾ 䏿¬¡éè¦å»ºç« HTTPS è¿æ¥æ¶ï¼ç´æ¥ãå¤ç¨ãè¿ä¸ªå¯é¥ï¼ä¸å°±åå° TLS æ¡æçæ§è½æèäºåï¼
è¿ç§æ¹å¼å°±æ¯ä¼è¯å¤ç¨ï¼TLS session resumptionï¼ï¼ä¼è¯å¤ç¨å两ç§ï¼
- 第ä¸ç§å« Session IDï¼
- 第äºç§å« Session Ticketï¼
# Session ID
Session ID çå·¥ä½åçæ¯ï¼å®¢æ·ç«¯åæå¡å¨é¦æ¬¡ TLS æ¡æè¿æ¥åï¼åæ¹ä¼å¨å åç¼åä¼è¯å¯é¥ï¼å¹¶ç¨å¯ä¸ç Session ID æ¥æ è¯ï¼Session ID åä¼è¯å¯é¥ç¸å½äº key-value çå ³ç³»ã
å½å®¢æ·ç«¯åæ¬¡è¿æ¥æ¶ï¼hello æ¶æ¯éä¼å¸¦ä¸ Session IDï¼æå¡å¨æ¶å°åå°±ä¼ä»å åæ¾ï¼å¦ææ¾å°å°±ç´æ¥ç¨è¯¥ä¼è¯å¯é¥æ¢å¤ä¼è¯ç¶æï¼è·³è¿å ¶ä½çè¿ç¨ï¼åªç¨ä¸ä¸ªæ¶æ¯å¾è¿å°±å¯ä»¥å»ºç«å®å ¨éä¿¡ãå½ç¶ä¸ºäºå®å ¨æ§ï¼å åä¸çä¼è¯å¯é¥ä¼å®æå¤±æã

使¯å®æä¸¤ä¸ªç¼ºç¹ï¼
- æå¡å¨å¿ é¡»ä¿ææ¯ä¸ä¸ªå®¢æ·ç«¯çä¼è¯å¯é¥ï¼éç客æ·ç«¯çå¢å¤ï¼æå¡å¨çå åååä¹ä¼è¶å¤§ã
- ç°å¨ç½ç«æå¡ä¸è¬æ¯ç±å¤å°æå¡å¨éè¿è´è½½åè¡¡æä¾æå¡çï¼å®¢æ·ç«¯åæ¬¡è¿æ¥ä¸ä¸å®ä¼å½ä¸ä¸æ¬¡è®¿é®è¿çæå¡å¨ï¼äºæ¯è¿è¦èµ°å®æ´ç TLS æ¡æè¿ç¨ï¼
# Session Ticket
为äºè§£å³ Session ID çé®é¢ï¼å°±åºç°äº Session Ticketï¼æå¡å¨ä¸åç¼åæ¯ä¸ªå®¢æ·ç«¯çä¼è¯å¯é¥ï¼èæ¯æç¼åçå·¥ä½äº¤ç»äºå®¢æ·ç«¯ï¼ç±»ä¼¼äº HTTP ç Cookieã
客æ·ç«¯ä¸æå¡å¨é¦æ¬¡å»ºç«è¿æ¥æ¶ï¼æå¡å¨ä¼å å¯ãä¼è¯å¯é¥ãä½ä¸º Ticket åç»å®¢æ·ç«¯ï¼äº¤ç»å®¢æ·ç«¯ç¼å该 Ticketã
客æ·ç«¯åæ¬¡è¿æ¥æå¡å¨æ¶ï¼å®¢æ·ç«¯ä¼åé Ticketï¼æå¡å¨è§£å¯åå°±å¯ä»¥è·åä¸ä¸æ¬¡çä¼è¯å¯é¥ï¼ç¶åéªè¯æææï¼å¦ææ²¡é®é¢ï¼å°±å¯ä»¥æ¢å¤ä¼è¯äºï¼å¼å§å å¯éä¿¡ã

对äºé群æå¡å¨çè¯ï¼è¦ç¡®ä¿æ¯å°æå¡å¨å å¯ ãä¼è¯å¯é¥ãçå¯é¥æ¯ä¸è´çï¼è¿æ ·å®¢æ·ç«¯æºå¸¦ Ticket 访é®ä»»æä¸å°æå¡å¨æ¶ï¼é½è½æ¢å¤ä¼è¯ã
Session ID å Session Ticket é½ä¸å ·å¤ååå®å ¨æ§ï¼å ä¸ºä¸æ¦å å¯ãä¼è¯å¯é¥ãçå¯é¥è¢«ç ´è§£æè æå¡å¨æ³æ¼ãä¼è¯å¯é¥ãï¼åé¢å«æçéä¿¡å¯æé½ä¼è¢«ç ´è§£ã
åæ¶åºå¯¹éæ¾æ»å»ä¹å¾å°é¾ï¼è¿éç®åä»ç»ä¸éæ¾æ»å»å·¥ä½çåçã

å设 Alice æ³å Bob è¯æèªå·±ç身份ã Bob è¦æ± Alice çå¯ç ä½ä¸ºèº«ä»½è¯æï¼ç±ä¸½ä¸åºå°½å ¨åæä¾ï¼å¯è½æ¯å¨ç»è¿å¦åå¸å½æ°ç转æ¢ä¹åï¼ã䏿¤åæ¶ï¼Eve çªå¬äºå¯¹è¯å¹¶ä¿çäºå¯ç ï¼æåå¸ï¼ã
交æ¢ç»æåï¼Eveï¼åå Alice ï¼è¿æ¥å° Bobãå½è¢«è¦æ±æä¾èº«ä»½è¯ææ¶ï¼Eve åéä» Bob æ¥åçæåä¸ä¸ªä¼è¯ä¸è¯»åç Alice çå¯ç ï¼æåå¸ï¼ï¼ä»èæäº Eve è®¿é®æéã
éæ¾æ»å»çå±é©ä¹å¤å¨äºï¼å¦æä¸é´äººæªè·äºæä¸ªå®¢æ·ç«¯ç Session ID æ Session Ticket 以å POST æ¥æï¼èä¸è¬ POST 请æ±ä¼æ¹åæ°æ®åºçæ°æ®ï¼ä¸é´äººå°±å¯ä»¥å©ç¨æ¤æªè·çæ¥æï¼ä¸æåæå¡å¨åéè¯¥æ¥æï¼è¿æ ·å°±ä¼å¯¼è´æ°æ®åºçæ°æ®è¢«ä¸é´äººæ¹åäºï¼èå®¢æ·æ¯ä¸ç¥æ çã
é¿å éæ¾æ»å»çæ¹å¼å°±æ¯éè¦å¯¹ä¼è¯å¯é¥è®¾å®ä¸ä¸ªåççè¿ææ¶é´ã
# Pre-shared Key
åé¢ç Session ID å Session Ticket æ¹å¼é½éè¦å¨ 1 RTT æè½æ¢å¤ä¼è¯ã
è TLS1.3 æ´ä¸ºçé¼ï¼å¯¹äºéè¿ TLS1.3 åªéè¦ 0 RTTï¼åçå Ticket 类似ï¼åªä¸è¿å¨éè¿æ¶ï¼å®¢æ·ç«¯ä¼æ Ticket å HTTP 请æ±ä¸ååéç»æå¡ç«¯ï¼è¿ç§æ¹å¼å« Pre-shared Keyã

åæ ·çï¼Pre-shared Key 乿鿾æ»å»çå±é©ã

å¦ä¸å¾ï¼å设ä¸é´äººéè¿æç§æ¹å¼ï¼æªè·äºå®¢æ·ç«¯ä½¿ç¨ä¼è¯éç¨ææ¯ç POST 请æ±ï¼é常 POST è¯·æ±æ¯ä¼æ¹åæ°æ®åºçæ°æ®ï¼ç¶åä¸é´äººå°±å¯ä»¥ææªè·çè¿ä¸ªæ¥æåéç»æå¡å¨ï¼æå¡å¨æ¶å°åï¼ä¹è®¤ä¸ºæ¯åæ³çï¼äºæ¯å°±æ¢å¤ä¼è¯ï¼è´ä½¿æ°æ®åºçæ°æ®åè¢«æ´æ¹ï¼ä½æ¯æ¤æ¶ç¨æ·æ¯ä¸ç¥æ çã
æä»¥ï¼åºå¯¹éæ¾æ»å»å¯ä»¥ç»ä¼è¯å¯é¥è®¾å®ä¸ä¸ªåççè¿ææ¶é´ï¼ä»¥ååªé对å®å ¨ç HTTP 请æ±å¦ GET/HEAD 使ç¨ä¼è¯éç¨ã
# æ»ç»
对äºç¡¬ä»¶ä¼åçæ¹åï¼å 为 HTTPS æ¯å±äºè®¡ç®å¯éåï¼åºè¯¥éæ©è®¡ç®åæ´å¼ºç CPUï¼èä¸æå¥½éæ©æ¯æ AES-NI ç¹æ§ç CPUï¼è¿ä¸ªç¹æ§å¯ä»¥å¨ç¡¬ä»¶çº§å«ä¼å AES 对称å å¯ç®æ³ï¼å å¿«åºç¨æ°æ®çå è§£å¯ã
对äºè½¯ä»¶ä¼åçæ¹åï¼å¦æå¯ä»¥ï¼æè½¯ä»¶å级æè¾æ°ççæ¬ï¼æ¯å¦å° Linux å æ ¸ 2.X å级æ 4.Xï¼å° openssl 1.0.1 åçº§å° 1.1.1ï¼å 为æ°çæ¬ç软件ä¸ä» 伿便°çç¹æ§ï¼èä¸è¿ä¼ä¿®å¤èçæ¬çé®é¢ã
对äºåè®®ä¼åçæ¹åï¼
- å¯é¥äº¤æ¢ç®æ³åºè¯¥éæ© ECDHE ç®æ³ï¼èä¸ç¨ RSA ç®æ³ï¼å 为 ECDHE ç®æ³å ·å¤ååå®å ¨æ§ï¼èä¸å®¢æ·ç«¯å¯ä»¥å¨ç¬¬ä¸æ¬¡æ¡æä¹åï¼å°±åéå å¯åºç¨æ°æ®ï¼èçäº 1 RTTã
- å° TLS1.2 å级 TLS1.3ï¼å 为 TLS1.3 çæ¡æè¿ç¨åªéè¦ 1 RTTï¼èä¸å®å ¨æ§æ´å¼ºã
对äºè¯ä¹¦ä¼åçæ¹åï¼
- æå¡å¨åºè¯¥éç¨ ECDSA è¯ä¹¦ï¼èé RSA è¯ä¹¦ï¼å 为å¨ç¸åå®å ¨çº§å«ä¸ï¼ECC çå¯é¥é¿åº¦æ¯ RSA çå¾å¤ï¼è¿æ ·å¯ä»¥æé«è¯ä¹¦ä¼ è¾çæçï¼
- æå¡å¨åºè¯¥å¼å¯ OCSP Stapling åè½ï¼ç±æå¡å¨é¢å è·å¾ OCSP çååºï¼å¹¶æååºç»æç¼åèµ·æ¥ï¼è¿æ · TLS æ¡æçæ¶åå°±ä¸ç¨åè®¿é® CA æå¡å¨ï¼åå°äºç½ç»éä¿¡çå¼éï¼æé«äºè¯ä¹¦éªè¯çæçï¼
对äºéè¿ HTTPS æ¶ï¼æä»¬å¯ä»¥ä½¿ç¨ä¸äºææ¯è®©å®¢æ·ç«¯åæå¡ç«¯ä½¿ç¨ä¸ä¸æ¬¡ HTTPS è¿æ¥ä½¿ç¨çä¼è¯å¯é¥ï¼ç´æ¥æ¢å¤ä¼è¯ï¼èä¸ç¨åéæ°èµ°å®æ´ç TLS æ¡æè¿ç¨ã
常è§çä¼è¯éç¨ææ¯æ Session ID å Session Ticketï¼ç¨äºä¼è¯éç¨ææ¯ï¼å½å次éè¿ HTTPS æ¶ï¼åªéè¦ 1 RTT å°±å¯ä»¥æ¢å¤ä¼è¯ãå¯¹äº TLS1.3 ä½¿ç¨ Pre-shared Key ä¼è¯éç¨ææ¯ï¼åªéè¦ 0 RTT å°±å¯ä»¥æ¢å¤ä¼è¯ã
è¿äºä¼è¯éç¨ææ¯è½ç¶å¥½ç¨ï¼ä½æ¯åå¨ä¸å®çå®å ¨é£é©ï¼å®ä»¬ä¸ä» ä¸å ·å¤ååå®å ¨ï¼è䏿鿾æ»å»çé£é©ï¼æä»¥åºå½å¯¹ä¼è¯å¯é¥è®¾å®ä¸ä¸ªåççè¿ææ¶é´ã
åèèµæï¼
- http://www.doc88.com/p-8621583210895.html
- https://zhuanlan.zhihu.com/p/33685085
- https://en.wikipedia.org/wiki/Replay_attack
- https://en.wikipedia.org/wiki/Downgrade_attack
- https://www.cnblogs.com/racent-Z/p/14011056.html
- http://www.guoyanbin.com/a-detailed-look-at-rfc-8446-a-k-a-tls-1-3/
- https://www.thesslstore.com/blog/crl-explained-what-is-a-certificate-revocation-list/
åå½ï¼ææ¯å°æï¼å°±ç±å¾è§£è®¡ç®æºåºç¡ï¼å¦ææç« å¯¹ä½ æå¸®å©ï¼å«å¿è®°å ³æ³¨å¦ï¼
