使用OpenSSL 與cURL 檢查網站伺服器支援哪幾種Cipher Suites
文章推薦指數: 80 %
本篇文章將分享如何透過OpenSSL 查詢有哪些Cipher Suites 可用,並示範 ... No ALPN negotiated Early data was not sent Verify return code: 0 (ok).
←如何透過PowerShell快速建立Windows內建VPN連線並自動記憶密碼連線
如何使用Certbot建立免費的TLS/SSL網域憑證並自動產生PFX憑證→
當我們從用戶端透過TLS協定連接伺服器時,用戶端會準備一組CipherSuites清單給伺服器端,伺服器端必須選用一個強度最高的Cipher加密演算法回應,之後才會進行金鑰交換,並開始使用加密連線,確保網路安全。
本篇文章將分享如何透過OpenSSL查詢有哪些CipherSuites可用,並示範如何透過cURL指定特定Cipher進行連線與檢查伺服器是否支援特定CipherSuite加密演算法清單。
使用OpenSSL查詢有哪些Ciphers可用
首先,你要先能夠區分CipherSuite與Cipher的差別:
Cipher(加密演算法)
一種負責將明文(Plaintext)透過一系列數學運算,達到將訊息加密為密文(Ciphertext);或將密文訊息解密為明文的演算法(algorithm)。
opensslciphers-stdname
CipherSuite(加密演算法清單)
代表一系列可用的Cipher(加密演算法)清單。
目前從CipherSuiteInfo網站可以發現339個在IANA(InternetAssignedNumbersAuthority)登記立案的標準名稱。
我們以TLS_DHE_DSS_WITH_AES_128_GCM_SHA256為例,上面會顯示IANAname(標準名稱)、OpenSSLname與TLSVersion可供參考。
參考資料:MappingOpenSSLciphersuitenamestoIANAnames
你可以用以下命令查詢目前的OpenSSL支援哪些標準名稱(不會所有都支援):
opensslciphers
opensslciphers-stdname
opensslciphers-v
opensslciphers-V
上述4個命令輸出的內容都差不多,第一個只會顯示OpenSSLname而已,使用-stdname會額外顯示IANAname(標準名稱),用-v會顯示OpenSSLname與相關屬性,而-V則會額外顯示ciphersuite的Hexcode內容。
要用哪個參數,全看你想寫自動化的腳本而定。
如果想查詢OpenSSL目前支援的CipherSuite可以用以下命令篩選出來:
opensslciphers-s
opensslciphers-s-psk
opensslciphers-s-srp
預設PSK與SRP這兩類Ciphers是停用的,需要加上-psk或-srp才能看到。
當你知道有多少CipherSuite可用之後,我們就可以來設法讀懂CipherSuite的結構。
以下我們以TLS_AES_256_GCM_SHA384為例:
TLS
要使用CipherSuite的加密協定,網站通常是TLS為主。
AES
要使用的一種訊息加解密的演算法(sessioncipher)
256
加密演算法採用的加密金鑰長度(sessionencryptionkeysizeforcipher)(bits)
GCM
一種加密的類型(typeofencryption)(cipher-blockdependencyandadditionaloptions)
SHA384
選用的雜湊演算法(hashfunction)
使用OpenSSL查詢網站伺服器的所有憑證與TLS連接資訊
以下是一段非常實用的OpenSSL命令,他不但可以查出伺服器目前所使用的完整憑證資訊,也可以看出整個TLS交握的完整過程!
OpenSSL預設會使用TLS1.3(最新版)進行連線
openssls_client-connectwww.yahoo.com:443
我們可以跳過憑證的內容,直接顯示New,TLSv1.3,CipherisTLS_AES_128_GCM_SHA256這段內容,得知本次連線使用的CipherSuite:
New,TLSv1.3,CipherisTLS_AES_128_GCM_SHA256
Serverpublickeyis256bit
SecureRenegotiationISNOTsupported
Compression:NONE
Expansion:NONE
NoALPNnegotiated
Earlydatawasnotsent
Verifyreturncode:0(ok)
你也可以指定TLS1.2進行加密連線
openssls_client-connectwww.yahoo.com:443-tls1_2
New,TLSv1.2,CipherisECDHE-ECDSA-AES128-GCM-SHA256
Serverpublickeyis256bit
SecureRenegotiationISsupported
Compression:NONE
Expansion:NONE
NoALPNnegotiated
SSL-Session:
Protocol:TLSv1.2
Cipher:ECDHE-ECDSA-AES128-GCM-SHA256
Session-ID:72CB003E38A8CFC8F9085AFDB1AF26E6F6E11BF44CE7D0074B774E478D876E6F
Session-ID-ctx:
Master-Key:A3DA1FB3E11FDAC50929F2D30339BB0F82094B7B503D5E8B018B844F169E7E479B0E11465F16F85E7CD1827A4642D5DB
PSKidentity:None
PSKidentityhint:None
SRPusername:None
TLSsessionticketlifetimehint:7200(seconds)
TLSsessionticket:
0000-078ff3faa9327f7f-eb7807822c8d3249.....2...x..,.2I
0010-95ee44c79707e6f9-96ba6097140a9bdf..D.......`.....
0020-052cf77717bf75b7-0dd7d82045326790.,.w..u....E2g.
0030-251d2d78f80d732b-5592bc81103fd029%.-x..s+U....?.)
0040-143b539b846fa837-ca675bb8551ee604.;S..o.7.g[.U...
0050-55854c9db9417cb3-d8df549ff4857289U.L..A|...T...r.
0060-a7d6f3ca49791531-f94ffd2ad1c90d0d....Iy.1.O.*....
0070-dec4ede308b50073-621d4be1eb71de83.......sb.K..q..
0080-133473929b3d3592-01481c65691f768c.4s..=5..H.ei.v.
0090-3faf071ac84e7064-42a524d05a06af1d?....NpdB.$.Z...
00a0-893cfff0e2e14af4-ffe62fe483dbf694.<....j... starttime:1620800451 timeout:7200 verifyreturncode:0 extendedmastersecret:yes curl-s-s-v-o capath: tlsv1.3 supported_ciphers="$(opensslciphers-s-tls1_3)" ifs=":" read-r-asupported_ciphers forcin do printf-vpad cipher="$c$pad" printf curl-s-s-o if echook fi done tlsv1.2 openssl sslciphers-curl ciphersuiteinfo howtoconvertsslcipherstocurlformat curl-howtouse openssl-ciphers sslservertest windows8 .net .netcore accessibility angular angularjs asp.net asp.net5 asp.netblazor asp.netcore asp.netidentity asp.netmvc asp.netwebapi azuredevops c cloudcomputing css devops docker entityframework git golang html5 iis java javascript jenkins kubernetes linq linux microsoftazure mysql office office365 oracle php scrum security sqlserver subversion systemcenter tfs tfs2010 tips unittesting usability vba visualbasic visualstudio visualstudio11 visualstudio2012 visualstudio2013 vs2010tips web webmatrix windows windowsazure windowsphone7>
延伸文章資訊
- 1openssl/README.ssltest.md at master - GitHub
SSL tests. SSL testcases are configured in the ssl-tests directory. Each ssl_*.cnf.in file contai...
- 2使用OpenSSL 與cURL 檢查網站伺服器支援哪幾種Cipher Suites
本篇文章將分享如何透過OpenSSL 查詢有哪些Cipher Suites 可用,並示範 ... No ALPN negotiated Early data was not sent Verif...
- 3Using OpenSSL s_client commands to test SSL connectivity
Steps · In the command line, enter openssl s_client -connect <hostname> : <port> . This opens an ...
- 4Test TLS Connectivity with OpenSSL Command Line - django ...
openssl s_client is a SSL/TLS client program can be used to test TLS server connectivity, check s...
- 5openssl s_client commands and examples - Mister PKI
The s_client command from OpenSSL is a helpful test client for troubleshooting remote SSL or TLS ...