對 Firefox 中的 SSL_ERROR_NO_CYPHER_OVERLAP 進行故障排除
我正在嘗試在Network Engineering Stack Exchange上獲得一些幫助,但他們真的想責怪瀏覽器(請參閱那裡的評論)。我正在尋找一個不修改瀏覽器設置的修復程序(儘管我願意修改它們以確定問題)並且仍然允許使用自簽名證書。我在其他伺服器上與 Firefox 一起使用了許多自簽名證書,並且很清楚 Firefox 如何處理自簽名證書錯誤,這不是一回事,Cisco 路由器不喜歡 TLS 連接的其他事情Firefox 提出的選項。
無論如何…我有一個執行 IOS XE 版本 16.09.04 的 Cisco ISR4331/K9,我已經配置了主機名、域名和生成的 2048 位 RSA 密鑰,我還驗證了時鐘設置是否正確。
配置後
ip http secure-server
,我嘗試從執行 Firefox 83.0 的 PC 訪問路由器當 HTTP 訪問正常時,HTTPS 在 Firefox 中遇到錯誤“SSL_ERROR_NO_CYPHER_OVERLAP”。然而
sh ip http server secure status
返回:HTTP secure server status: Enabled HTTP secure server port: 443 HTTP secure server ciphersuite: 3des-ede-cbc-sha aes-128-cbc-sha aes-256-cbc-sha dhe-aes-128-cbc-sha ecdhe-rsa-3des-ede-cbc-sha rsa-aes-cbc-sha2 rsa-aes-gcm-sha2 dhe-aes-cbc-sha2 dhe-aes-gcm-sha2 ecdhe-rsa-aes-cbc-sha2 ecdhe-rsa-aes-gcm-sha2 ecdhe-ecdsa-aes-gcm-sha2 HTTP secure server TLS version: TLSv1.2 TLSv1.1 HTTP secure server client authentication: Disabled HTTP secure server PIV authentication: Disabled HTTP secure server trustpoint: HTTP secure server peer validation trustpoint: HTTP secure server ECDHE curve: secp256r1 HTTP secure server active session modules: ALL
這似乎是一個完全可以接受的 Firefox 密碼套件列表。
在 Wireshak 中查看時,路由器似乎在來自客戶端的 TLSv1.2 Hello 消息之後立即向瀏覽器返回 TLSv1.2 致命握手錯誤消息。
debug ip http all
在此握手期間,我在使用的路由器上根本沒有收到任何消息。知道我在這裡想念什麼嗎?
請注意,這是我用於複製/調試此問題的實驗室路由器,因此缺少大多數配置。路由器配置:
routertest#sh run Building configuration... Current configuration : 1787 bytes ! ! Last configuration change at 18:22:01 UTC Fri Jan 29 2021 ! version 16.9 service timestamps debug datetime msec service timestamps log datetime msec platform qfp utilization monitor load 80 no platform punt-keepalive disable-kernel-core ! hostname routertest ! boot-start-marker boot-end-marker ! ! vrf definition Mgmt-intf ! address-family ipv4 exit-address-family ! address-family ipv6 exit-address-family ! ! no aaa new-model ! no ip domain lookup ip domain name test.com ! ! ! login on-success log ! ! ! ! ! ! ! subscriber templating ! ! ! ! ! multilink bundle-name authenticated ! ! ! crypto pki trustpoint TP-self-signed-886488406 enrollment selfsigned subject-name cn=IOS-Self-Signed-Certificate-886488406 revocation-check none rsakeypair TP-self-signed-886488406 ! ! crypto pki certificate chain TP-self-signed-886488406 ! license udi pid ISR4331/K9 sn FDO19370HXL license boot level securityk9 no license smart enable diagnostic bootup level minimal ! spanning-tree extend system-id ! ! ! ! redundancy mode none ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! interface GigabitEthernet0/0/0 no ip address shutdown negotiation auto ! interface GigabitEthernet0/0/1 ip address 10.30.0.1 255.255.255.0 negotiation auto ! interface GigabitEthernet0/0/2 no ip address shutdown negotiation auto ! interface Serial0/1/0 no ip address ! interface Serial0/1/1 no ip address ! interface GigabitEthernet0 vrf forwarding Mgmt-intf no ip address shutdown negotiation auto ! ip forward-protocol nd ip http server ip http authentication local ip http secure-server ip tftp source-interface GigabitEthernet0 ! ! ! ! ! ! control-plane ! ! line con 0 logging synchronous transport input none stopbits 1 line aux 0 stopbits 1 line vty 0 4 login ! ! ! ! ! ! end
經過廣泛的測試,我能夠弄清楚這一點。據我所知,思科沒有正式記錄它,例如他們的HTTP 服務配置指南仍然將其中一些步驟列為可選步驟,但似乎在較新的硬體或軟體上,可選步驟之一已成為強制性的。
特別是,啟用 HTTPS 時,較舊的 Cisco 設備會自動將 HTTPS 伺服器連結到自簽名信任點。儘管啟用 HTTPS 仍會為您生成密鑰、證書和信任點,但 HTTPS 伺服器不再自動使用該信任點進行連接,因此您必須通過
ip http secure-trustpoint
命令手動告訴 HTTPS 伺服器使用正確的信任點。我懷疑這是一個無意中引入的錯誤,因為它仍然自動為您完成其他所有事情,包括創建信任點,HTTPS 伺服器只是不會自動選擇它創建的信任點作為要使用的信任點。
因此,如果您
ip http secure-server
在路由器上執行命令後仔細查看終端日誌,您將看到如下輸出:r2(config)#ip http secure-server CRYPTO_PKI: setting trustpoint policy TP-self-signed-3189949043 to use keypair TP-self-signed-3189949043% Generating 2048 bit RSA keys, keys will be non-exportable... [OK] (elapsed time was 5 seconds) *Jan 30 09:50:16.152: %CRYPTO_ENGINE-5-KEY_ADDITION: A key named TP-self-signed-3189949043 has been generated or imported by crypto-engine *Jan 30 09:50:16.243: %PKI-4-NOCONFIGAUTOSAVE: Configuration was modified. Issue "write memory" to save new IOS PKI configuration
這將為您提供創建的信任點的名稱,在我的例子中是“TP-self-signed-3189949043”。
請注意,如果您在啟用 HTTPS 伺服器期間錯過了此消息,您可以在事後在路由器的配置中找到信任點。
然後,新需要的步驟是告訴 HTTPS 伺服器使用該
ip http secure-trustpoint TP-self-signed-3189949043
命令使用該信任點(將信任點名稱替換為您的名稱)。完成此操作後,瀏覽器將能夠使用信任自簽名證書的正常過程連接到 HTTPS 伺服器。
請注意,這在生產環境中不太可能發生,因為如果您使用由 CA 簽名的證書(而不是自簽名證書),則必須設置信任點。