在 Firefox 中对 SSL_ERROR_NO_CYPHER_OVERLAP 进行故障排除

在 Firefox 中对 SSL_ERROR_NO_CYPHER_OVERLAP 进行故障排除

我正在尝试获得一些帮助网络工程 Stack Exchange但他们实际上想责怪浏览器(请参阅那里的评论)。我正在寻找一种不修改浏览器设置的修复程序(尽管我愿意修改它们以确定问题),并且仍然允许使用自签名证书。我在其他服务器上使用 Firefox 使用了许多自签名证书,并且非常清楚 Firefox 如何处理自签名证书错误,这不是一回事,思科路由器不喜欢 Firefox 提出的 TLS 连接选项的其他原因。

无论如何...我有一台运行 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

答案1

经过大量测试,我终于搞清楚了这一点。据我所知,思科并没有正式记录这一点,例如他们的HTTP服务配置指南仍然将其中一些步骤列为可选的,但似乎在较新的硬件或软件上,其中一个可选步骤已成为强制的。

具体来说,较旧的 Cisco 设备会在启用 HTTPS 时自动将 HTTPS 服务器链接到自签名信任点。虽然启用 HTTPS 仍会为您生成密钥、证书和信任点,但 HTTPS 服务器不再自动使用该信任点进行连接,因此您必须手动使用命令告诉 HTTPS 服务器使用正确的信任点ip http secure-trustpoint

我怀疑这是一个在某个地方无意中引入的错误,因为它仍然会自动为您完成其他所有操作,包括创建信任点,而 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 签名的证书(而不是自签名证书),则必须设置信任点。

相关内容