簡介
本文檔介紹在Expressway上自定義預配置密碼字串的步驟。
必要條件
需求
思科建議您瞭解以下主題:
- Cisco Expressway或Cisco VCS。
- TLS協定。
採用元件
本文中的資訊係根據以下軟體和硬體版本:
- Cisco Expressway X15.0.2版。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
背景資訊
預設Expressway配置包含預配置的密碼字串,基於相容性原因,這些字串支援某些在某些企業安全策略下可能被視為較弱的密碼。可以自定義密碼字串,以便對其進行微調,使其符合每個環境的特定策略。
在Expressway中,可以為以下每種協定配置獨立的密碼字串:
- HTTPS
- LDAP
- 反向 Proxy
- SIP
- SMTP
- TMS調配
- UC伺服器發現
- XMPP
密碼字串遵循OpenSSL Ciphers Manpage中介紹的OpenSSL格式。當前的Expressway版本X15.0.2隨附預設字串EECDH:EDH:HIGH:-AES256+SHA:!MEDIUM:!LOW:!3DES:!MD5:!PSK:!eNULL:!aNULL:!aDH,為所有協定平均預配置。在Web管理頁面的 > > 下,您可以修改
檢查密碼字串
透過使用openssl ciphers -V「<cipher string>」命令,您可以輸出包含特定字串允許的所有密碼的清單,這對於檢視密碼非常有用。此示例顯示檢查預設Expressway密碼字串時的輸出:
~ # openssl ciphers -V "EECDH:EDH:HIGH:-AES256+SHA:!MEDIUM:!LOW:!3DES:!MD5:!PSK:!eNULL:!aNULL:!aDH"
0x13,0x02 - TLS_AES_256_GCM_SHA384 TLSv1.3 Kx=any Au=any Enc=AESGCM(256) Mac=AEAD
0x13,0x03 - TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any Au=any Enc=CHACHA20/POLY1305(256) Mac=AEAD
0x13,0x01 - TLS_AES_128_GCM_SHA256 TLSv1.3 Kx=any Au=any Enc=AESGCM(128) Mac=AEAD
0xC0,0x2C - ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD
0xC0,0x30 - ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD
0xCC,0xA9 - ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
0xCC,0xA8 - ECDHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
0xC0,0xAD - ECDHE-ECDSA-AES256-CCM TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESCCM(256) Mac=AEAD
0xC0,0x2B - ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(128) Mac=AEAD
0xC0,0x2F - ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(128) Mac=AEAD
0xC0,0xAC - ECDHE-ECDSA-AES128-CCM TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESCCM(128) Mac=AEAD
0xC0,0x24 - ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA384
0xC0,0x28 - ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384
0xC0,0x23 - ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA256
0xC0,0x27 - ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA256
0xC0,0x09 - ECDHE-ECDSA-AES128-SHA TLSv1 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA1
0xC0,0x13 - ECDHE-RSA-AES128-SHA TLSv1 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA1
0x00,0xA3 - DHE-DSS-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=DSS Enc=AESGCM(256) Mac=AEAD
0x00,0x9F - DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(256) Mac=AEAD
0xCC,0xAA - DHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=DH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
0xC0,0x9F - DHE-RSA-AES256-CCM TLSv1.2 Kx=DH Au=RSA Enc=AESCCM(256) Mac=AEAD
0x00,0xA2 - DHE-DSS-AES128-GCM-SHA256 TLSv1.2 Kx=DH Au=DSS Enc=AESGCM(128) Mac=AEAD
0x00,0x9E - DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(128) Mac=AEAD
0xC0,0x9E - DHE-RSA-AES128-CCM TLSv1.2 Kx=DH Au=RSA Enc=AESCCM(128) Mac=AEAD
0x00,0x6B - DHE-RSA-AES256-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(256) Mac=SHA256
0x00,0x6A - DHE-DSS-AES256-SHA256 TLSv1.2 Kx=DH Au=DSS Enc=AES(256) Mac=SHA256
0x00,0x67 - DHE-RSA-AES128-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(128) Mac=SHA256
0x00,0x40 - DHE-DSS-AES128-SHA256 TLSv1.2 Kx=DH Au=DSS Enc=AES(128) Mac=SHA256
0x00,0x33 - DHE-RSA-AES128-SHA SSLv3 Kx=DH Au=RSA Enc=AES(128) Mac=SHA1
0x00,0x32 - DHE-DSS-AES128-SHA SSLv3 Kx=DH Au=DSS Enc=AES(128) Mac=SHA1
0x00,0x9D - AES256-GCM-SHA384 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(256) Mac=AEAD
0xC0,0x9D - AES256-CCM TLSv1.2 Kx=RSA Au=RSA Enc=AESCCM(256) Mac=AEAD
0x00,0x9C - AES128-GCM-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(128) Mac=AEAD
0xC0,0x9C - AES128-CCM TLSv1.2 Kx=RSA Au=RSA Enc=AESCCM(128) Mac=AEAD
0x00,0x3D - AES256-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA256
0x00,0x3C - AES128-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA256
0x00,0x2F - AES128-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1
~ #
使用資料包捕獲檢查TLS握手中的加密協商
透過在資料包捕獲中捕獲TLS協商,您可以使用Wireshark檢查加密協商的詳細資訊。
TLS握手過程包括由客戶端裝置傳送的ClientHello資料包,根據為連線協定配置的密碼字串提供其支援的密碼清單。伺服器會檢視清單,將它與其自己的允許密碼清單(由其自己的密碼字串決定)進行比較,並選擇兩個系統都支援的密碼,以用於加密的作業階段。然後,它會以指示所選密碼的ServerHello資料包進行響應。TLS 1.2和1.3握手對話方塊之間有著重要的區別,但是密碼協商機制在兩個版本中都使用相同的原則。
以下是Web瀏覽器與埠443上的Expressway之間的TLS 1.3密碼協商示例(如Wireshark所示):
Wireshark中的TLS握手示例
首先,瀏覽器傳送一個包含其支援的密碼清單的ClientHello資料包:
Wireshark中的ClientHello資料包示例
Expressway會檢查其為HTTPS協定配置的密碼字串,並找到自身和客戶端都支援的密碼。在本示例中,選擇ECDHE-RSA-AES256-GCM-SHA384密碼。Expressway以其ServerHello資料包做出響應,其中指示所選密碼:
Wireshark中的ServerHello資料包示例
設定
OpenSSL密碼字串格式包含數個特殊字元,以便對字串執行作業,例如移除特定密碼或共用共同元件的密碼群組。由於這些自定義目的通常是刪除密碼,因此這些示例中使用的字元包括:
- -字元,用於從清單中刪除密碼。部分或全部刪除的密碼可以透過稍後出現在字串中的選項再次被允許。
- !字元,也用於從清單中刪除密碼。使用它時,字串中以後出現的任何其它選項都不能再次允許刪除的密碼。
- :字元,該字元充當清單中專案之間的分隔符。
兩種方法都可用於從字串中刪除密碼,但是!是首選。有關特殊字元的完整清單,請檢視OpenSSL Ciphers Manpage。
注意:OpenSSL網站指出,使用!字元時,「刪除的密碼即使已明確指出,也絕不會重新出現在清單中」。這並不意味著密碼將從系統中永久刪除,而是指密碼字串的解釋範圍。
停用特定密碼
要停用特定密碼,請向預設字串增加:分隔符、!或-符號以及要停用的密碼名稱。密碼名稱必須遵循OpenSSL命名格式,在OpenSSL Ciphers Manpage中提供了此格式。例如,如果需要停用SIP連線的AES128-SHA密碼,請配置如下所示的密碼字串:
EECDH:EDH:HIGH:-AES256+SHA:!MEDIUM:!LOW:!3DES:!MD5:!PSK:!eNULL:!aNULL:!aDH:!AES128-SHA
然後,導航到Expressway Web管理頁面,導航到>>,將自定義字串分配到所需協定,然後按一下儲存。 要應用新配置,需要重新啟動系統。在本示例中,在
Expressway Web管理門戶上的密碼設定頁面
注意:如果是Expressway集群,請僅在主伺服器上進行更改。新配置將複製到其餘的集群成員。
使用通用演算法停用一組密碼
要使用常用演算法停用一組密碼,請將要停用的演算法名稱、:分隔符、!或-符號以及預設字串附加到預設字串中。OpenSSL Ciphers Manpage中提供了支援的演算法名稱。例如,如果需要停用所有使用DHE演算法的密碼,請配置如下所示的密碼字串:
EECDH:EDH:HIGH:-AES256+SHA:!MEDIUM:!LOW:!3DES:!MD5:!PSK:!eNULL:!aNULL:!aDH:!DHE
導航到
注意:如果是Expressway集群,請僅在主伺服器上進行更改。新配置將複製到其餘的集群成員。
驗證
檢查密碼字串允許的密碼清單
您可以使用openssl ciphers -V「<cipher string>」命令檢查自定義的加密字串。檢視輸出以確認更改後不再列出不需要的密碼。在此範例中,會檢查EECDH:EDH:HIGH:-AES256+SHA:!MEDIUM:!LOW:!3DES:!MD5:!PSK:!eNULL:!aNULL:!aDH:!DHE密碼字串。命令輸出確認字串不允許使用DHE演算法的任何密碼:
~ # openssl ciphers -V "EECDH:EDH:HIGH:-AES256+SHA:!MEDIUM:!LOW:!3DES:!MD5:!PSK:!eNULL:!aNULL:!aDH:!DHE"
0x13,0x02 - TLS_AES_256_GCM_SHA384 TLSv1.3 Kx=any Au=any Enc=AESGCM(256) Mac=AEAD
0x13,0x03 - TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any Au=any Enc=CHACHA20/POLY1305(256) Mac=AEAD
0x13,0x01 - TLS_AES_128_GCM_SHA256 TLSv1.3 Kx=any Au=any Enc=AESGCM(128) Mac=AEAD
0xC0,0x2C - ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD
0xC0,0x30 - ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD
0xCC,0xA9 - ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
0xCC,0xA8 - ECDHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
0xC0,0xAD - ECDHE-ECDSA-AES256-CCM TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESCCM(256) Mac=AEAD
0xC0,0x2B - ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(128) Mac=AEAD
0xC0,0x2F - ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(128) Mac=AEAD
0xC0,0xAC - ECDHE-ECDSA-AES128-CCM TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESCCM(128) Mac=AEAD
0xC0,0x24 - ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA384
0xC0,0x28 - ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384
0xC0,0x23 - ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA256
0xC0,0x27 - ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA256
0xC0,0x09 - ECDHE-ECDSA-AES128-SHA TLSv1 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA1
0xC0,0x13 - ECDHE-RSA-AES128-SHA TLSv1 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA1
0x00,0x9D - AES256-GCM-SHA384 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(256) Mac=AEAD
0xC0,0x9D - AES256-CCM TLSv1.2 Kx=RSA Au=RSA Enc=AESCCM(256) Mac=AEAD
0x00,0x9C - AES128-GCM-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(128) Mac=AEAD
0xC0,0x9C - AES128-CCM TLSv1.2 Kx=RSA Au=RSA Enc=AESCCM(128) Mac=AEAD
0x00,0x3D - AES256-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA256
0x00,0x3C - AES128-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA256
0x00,0x2F - AES128-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1
~ #
透過協商已停用的密碼測試TLS連線
您可以使用openssl s_client命令來驗證是否已拒絕使用停用密碼的連線嘗試。使用-connect選項指定您的Expressway地址和埠,並使用-cipher選項指定在TLS握手期間由客戶端協商的單個密碼:
openssl s_client -connect <地址>:<埠> -cipher <密碼> -no_tls1_3
在本示例中,從安裝了openssl的Windows PC嘗試到Expressway的TLS連線。PC作為客戶端,僅協商不想要的DHE-RSA-AES256-CCM密碼,該密碼使用DHE演算法:
C:\Users\Administrator>openssl s_client -connect exp.example.com:443 -cipher DHE-RSA-AES256-CCM -no_tls1_3
Connecting to 10.15.1.7
CONNECTED(00000154)
D0130000:error:0A000410:SSL routines:ssl3_read_bytes:ssl/tls alert handshake failure:..\ssl\record\rec_layer_s3.c:865:SSL alert number 40
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 118 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1721019437
Timeout : 7200 (sec)
Verify return code: 0 (ok)
Extended master secret: no
---
C:\Users\Administrator>
命令輸出顯示連線嘗試失敗並顯示「ssl/tls警報握手失敗:..\ssl\record\rec_layer_s3.c:865:SSL警報編號40」錯誤消息,因為Expressway配置為使用EECDH:EDH:HIGH:-AES256+SHA:!MEDIUM:!LOW:!3DES:!MD5:!PSK:!eNULL:!aDH:!DHE密碼字串來停用DHE演算法。
注意:為了使使用openssl s_client命令的測試能夠如說明的那樣工作,需要將-no_tls1_3選項傳遞給命令。如果未包含,客戶端會自動在ClientHello資料包中插入TLS 1.3密碼:
帶有自動增加密碼的ClientHello資料包
如果目標Expressway支援這些密碼,則可以選擇其中一個密碼,而不是您需要測試的特定密碼。連線成功,這可以讓您相信可以使用以-cipher選項傳送至指令的已停用密碼來連線。
使用停用的密碼檢查TLS握手的資料包捕獲
在使用某個停用的密碼執行連線測試時,您可以從測試裝置或Expressway收集資料包捕獲。然後,您可以使用Wireshark對其進行檢查,以進一步分析握手事件。
查詢測試裝置傳送的ClientHello。確認它只協商不需要的測試密碼,在本例中是使用DHE演算法的密碼:
Wireshark中的ClientHello資料包示例:
確認Expressway以嚴重TLS警報資料包響應,拒絕連線。在本示例中,由於Expressway不支援按其HTTPS協定配置的密碼字串使用DHE密碼,因此它會以包含故障代碼40的嚴重TLS警報資料包進行響應。
Wireshark中的TLS嚴重警報資料包
相關資訊