操作系統(tǒng):macOS Ventura 13.0.1
Apache:Apache/2.4.54 (Unix),此版本為mac系統(tǒng)默認(rèn)自帶的Apache服務(wù)器版本
Wireshark:Wireshark 4.0.2
SSL證書可以通過阿里云SSL證書服務(wù)免費購買,但購買后的證書還沒有提交到CA中心,需要填寫域名、申請人等信息后提交CA中心,待驗證通過后簽發(fā)證書,簽發(fā)過程大概幾分鐘就能完成。
證書簽發(fā)完成后按Apache支持的crt格式下載即可,解壓后的文件夾中有3個文件:
當(dāng)然也可以借助于openssl工具在本地生成自簽名的SSL證書,但過程較為繁瑣而且容易出現(xiàn)問題。
2.修改httpd.conf配置文件在Apache配置文件目錄/private/etc/apache2下,打開httpd.conf文件,進(jìn)行如下修改:
# LoadModule ssl_module modules/mod_ssl.so # 刪除行首的配置語句注釋符號“#”加載mod_ssl.so模塊啟用SSL服務(wù),Apache默認(rèn)不啟用該模塊。
# Include conf/extra/httpd-ssl.conf # 刪除行首的配置語句注釋符號“#”。
3.修改httpd-ssl.conf配置文件在/private/etc/apache2/extra/目錄下,打開httpd-ssl.conf文件,在文件中添加以下內(nèi)容,并按照下文中注釋內(nèi)容進(jìn)行配置。
ServerName # 修改為申請證書時綁定的域名。
DocumentRoot "/Library/WebServer/Documents"
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3 # 添加SSL協(xié)議支持協(xié)議,去掉不安全的協(xié)議。
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
SSLCertificateFile /private/etc/apache2/ssl/9042749_www.atreus.ink_public.crt # 替換成證書文件名。
SSLCertificateKeyFile /private/etc/apache2/ssl/9042749_www.atreus.ink.key # 替換成證書的密鑰文件名。
SSLCertificateChainFile /private/etc/apache2/ssl/9042749_www.atreus.ink_chain.crt # 替換成證書鏈文件名
4.啟動Apache服務(wù)通過命令sudo apachectl start
即可啟動Apache服務(wù),通過https:// + IP
即可以SSL訪問主頁,默認(rèn)主頁位于/Library/WebServer/Documents路徑下,可自行修改。
如果啟動失敗或頁面無法訪問,可以查看/private/var/log/apache2/error_log路徑下的錯誤日志進(jìn)行排查。
三、SSL/TLS工作過程分析上圖為通過Wireshark抓包的數(shù)據(jù),客戶端與服務(wù)器兩臺主機(jī)位于同一局域網(wǎng)中,其中192.168.0.36:53249
為客戶端套接字,192.168.0.7:443
為服務(wù)器套接字。
最開始的三條數(shù)據(jù)包實現(xiàn)了TCP的三次握手,這表明TLS以TCP作為基礎(chǔ)。其中Seq
為序號,Ack
為確認(rèn)號,Win
為窗口大小(現(xiàn)在允許對方發(fā)送的數(shù)據(jù)量),Len
為TCP數(shù)據(jù)部分長度,MSS
為大報文段長度,WS
表示窗口的放大倍數(shù),SACK_PERM
表示通信雙方均支持SACK機(jī)制。
53294 ->443 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM
443 ->53294 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0 MSS=1460 WS=64 SACK_PERM
53294 ->443 [ACK] Seq=1 Ack=1 Win=131328 Len=0
TLS握手與通信階段報文如下所示,總體上可以分為七步。
192.168.0.36 ->192.168.0.7 TLSv1.2 Client Hello
192.168.0.7 ->192.168.0.36 TLSv1.2 Server Hello
192.168.0.7 ->192.168.0.36 TLSv1.2 Certificate
192.168.0.7 ->192.168.0.36 TLSv1.2 Server Key Exchange, Server Hello Done
192.168.0.36 ->192.168.0.7 TLSv1.2 Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
192.168.0.7 ->192.168.0.36 TLSv1.2 New Session Ticket, Change Cipher Spec, Encrypted Handshake Message
192.168.0.36 ->192.168.0.7 TLSv1.2 Application Data
第一步,Client Hello
。瀏覽器給出協(xié)議版本號、客戶端生成的隨機(jī)數(shù)、客戶端支持的加密套件和客戶端支持的壓縮算法。這一步客戶端有可能連續(xù)發(fā)送多個除了端口號和隨機(jī)數(shù)其他信息均一致的Client Hello
包,目的是避免超時重傳影響用戶體驗。
第二步,Server Hello
。服務(wù)器會確認(rèn)雙方最終使用的TLS版本號、加密套件以及其它一些必要信息,同時還會發(fā)送一個服務(wù)器生成的隨機(jī)數(shù),這個隨機(jī)數(shù)稍后會用于生成對話密鑰。其中TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
表明采用了TLS協(xié)議和ECDHE交換算法,并且是RSA公鑰加密。
第三步,Certificate
。服務(wù)器發(fā)送證書給客戶端,該證書用于向客戶端確認(rèn)服務(wù)器的身份??梢钥吹?,我這里證書申請時用的是域名為www.atreus.ink,和服務(wù)器實際域名并不匹配。
第四步,Server Key Exchange, Server Hello Done
。服務(wù)器會發(fā)送給客戶端Diffie-Hellman算法相關(guān)參數(shù),如下圖中的pubkey參數(shù),這個參數(shù)需要通過網(wǎng)絡(luò)傳給瀏覽器,但即使它被截取也不會影響安全性。通過這些參數(shù)后期客戶端可以算出會話密鑰,傳遞完參數(shù)之后,服務(wù)器會告訴客戶端Server Hello
結(jié)束了。
第五步,Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
。瀏覽器收到服務(wù)器發(fā)來的Certificate
包之后,運(yùn)行Diffie-Hellman算法生成一個pubkey,這個pubkey也被稱為預(yù)備-主密鑰,然后這個pubkey會被發(fā)送給服務(wù)器,服務(wù)器結(jié)合自己的私鑰解出這個預(yù)備-主密鑰的信息,得到第三個隨機(jī)數(shù)?;谶@三個隨機(jī)數(shù),服務(wù)器和客戶算就可以生成一個一樣的會話密鑰用于通信。
第六步,New Session Ticket, Change Cipher Spec, Encrypted Handshake Message
。前五步完成后基本上可以說TLS的握手階段已經(jīng)完成了,但是服務(wù)器還會發(fā)送一個Session Ticket
給瀏覽器,這個Session Ticket
包含了它的生命周期(7200s)以及它的id等信息,有了這個Session Ticket
之后,如果出于某種原因?qū)υ捴袛啵托枰匦挛帐?,而此時客戶端只需發(fā)送一個服務(wù)器在上一次對話中發(fā)送過來的Session Ticket
就可以繼續(xù)使用上一次連接了。這個Session Ticket
是加密的,只有服務(wù)器才能解密,其中包括本次對話的對話密鑰和加密方法等信息。
第七步,Application Data
。在TLS握手成功且Session Ticket
傳遞完畢后服務(wù)器與客戶端就可以進(jìn)行通信了。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧