openssl向SSL伺服器傳送請求
列印所有server端發過來的請求
openssl s_client-connect corp.zhc.com:4443
將客戶端傳送的內容也顯示出來。
openssl s_client-connect corp.zhc.com:4443 -msg
將狀態也打印出來
openssl s_client-connect corp.zhc.com:4443 -msg –state
強制使用tls1.0協議
openssl s_client-connect corp.zhc.com:4443 -msg –state -tls1
強制使用ssl2協議,現在很多伺服器都不支援ssl2和ssl3了,所以可能會直接握手失敗。
openssl s_client-connect v:4443 -msg –state -ssl2
強制使用ssl3協議。
openssl s_client-connect corp.zhc.com:4443 -msg –state -ssl3
SSL的通訊過程是這樣的:
1 client向server索要並驗證公鑰。2 雙方協商生成對話金鑰
3 開始用對話金鑰進行加密通訊。
前兩步就是SSL握手,SSL握手是在TCP三次握手之後開始的,SSL握手是四次,握手時序是:
client -> server CLIENT_HELLO (supported protocol version, TLS1.0, a random number R1, supported cipher, compression suites)
client <- server SERVER_HELLO (the protocol version TLS1.0, a random number R2, the cipher)
client <- server SERVER_CERTIFICATE
client <- server SERVER_KEY_EXCHANGE
client <- server CERTIFICATE_REQUEST (optional, 向客戶端索要證書,進行雙向認證)
client <- server SERVER_HELLO_DONE
client -> server CERTIFICATE_VERIFY client -> server CLIENT_KEY_EXCHANGE client -> server CHANGE_CIPHER_SPEC (在生成一個隨機數R3,然後用伺服器公鑰進行加密變成pre-master-key))
client -> server FINISHED
client <- server CLIENT_CERTIFICATE (optional, 如果server端索要的話)
client <- server CERTIFICATE_VERIFY client <- server CLIENT_KEY_EXCHANGE (用私鑰將pre-master-key解密出來得到R3) client <- server CHANGE_CIPHER_SPEC (確認用會話金鑰進行通訊)
client <- server FINISHED
會話金鑰是根據三個隨機數(R1,R2,R3)根據協商好的加密演算法算出來的。這個會話金鑰是對稱金鑰,供接下來的通訊使用。