我已遵循(我相信)所有正确的步骤在我的 ASA 防火墙上安装受信任的证书:
- 将公司根权限作为 CA 安装到 ASA 中
- 为 ASA 的主机名颁发证书
- 将证书作为身份证书安装到 ASA 中
- 将证书应用于外部接口
但是,当我尝试连接时,浏览器中仍然出现此错误:
安全连接失败
连接到 asa.xxx.internal 时发生错误。SSL 无法从对等方的证书中提取公钥。
错误代码:SSL_ERROR_EXTRACT_PUBLIC_KEY_FAILURE
我已经验证show crypto certificates
该证书已正确导入并且显示与导入的 CA 相关联。
我在这里做的唯一一件对我来说不是 100% 熟悉的事情是使用 EC 证书而不是 RSA,但这似乎不应该有任何影响。
相关部分show run
:
hostname asa
domain-name xxx.internal
http server enable
crypto ca trustpoint ASDM_TrustPoint0
enrollment terminal
validation-usage ipsec-client ssl-client ssl-server
crl configure
crypto ca trustpoint ASDM_TrustPoint1
keypair ASDM_TrustPoint1
no validation-usage
crl configure
crypto ca trustpool policy
auto-import
crypto ca certificate chain ASDM_TrustPoint0
certificate ca 4e7bf88d72c08d4efa48d3ec658e5a3281b2c6aa
3082028e 30820233 a0030201 0202144e 7bf88d72 b08d4efa 48d3ec65 8e5a3281
...
quit
crypto ca certificate chain ASDM_TrustPoint1
certificate c47d26f97ee247a9
308203d8 3082037e a0030201 02020900 c47d26f9 7ee247a7 300a0608 2a8648ce
...
quit
certificate ca 4e7bf88d72c08d4efa48d3ec658e5a3281b2c6aa
3082028e 30820233 a0030201 0202144e 7bf88d72 b08d4efa 48d3ec65 8e5a3281
quit
ssl server-version tlsv1.2
ssl trust-point ASDM_TrustPoint1 outside
答案1
我最终明白了这一点(这是一种度过周六的有趣方式。)
我连接以openssl s_client
查看发生了什么,并从输出中拉出一条错误消息:
验证错误:证书公钥具有明确的 ECC 参数
所以,我不确定如何解决这个问题。我正在生成密钥并颁发证书这个答案在信息安全 SE 上。默认值应该是命名曲线,而不是显式参数,但即使我设置了值,我仍然会得到相同的结果。
我稍后会弄清楚,但与此同时,我最终要做的是在 ASA 上生成一个密钥,并将其导出以进行证书生成。这是有点怪异但它有效:
crypto key generate ecdsa label my_private_key elliptic-curve 384
crypto ca trustpoint throwaway
keypair mykey
enrollment self
exit
crypto ca enroll throwaway noconfirm
crypto ca export throwaway pkcs12 foo
no crypto ca trustpoint throwaway noconfirm
此时,我在终端上有一个 base64 PKCS #12 包。我复制了 base64 数据(不是包括 BEGIN 和 END 行)到我的服务器,并执行以下操作来获取密钥:
echo "MIIEDwIBAzCCA8UGC..." | base64 -d | \
openssl pkcs12 -nocerts -nodes -password pass:foo > my.key
成功了,我拿到了密钥!我使用它生成了证书,并使用之前的密钥对创建了一个新的信任点:
crypto ca trustpoint my_tls_certificate
enrollment terminal
no ca-check
subject-name CN=asa.xxx.internal
keypair my_private_key
exit
crypto ca enroll my_tls_certificate noconfirm
crypto ca import my_tls_certificate certificate
此时,我提供了证书文件(再次没有 BEGIN 和 END 行),然后在一行上输入“quit”。
最后,我能够启用证书ssl trust-point my_tls_certificate outside
并成功连接。