Cisco

對 Firefox 中的 SSL_ERROR_NO_CYPHER_OVERLAP 進行故障排除

  • January 30, 2021

我正在嘗試在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 簽名的證書(而不是自簽名證書),則必須設置信任點。

引用自:https://serverfault.com/questions/1051729