参考:https://blog.scottlowe.org/2018/08/20/troubleshooting-tls-certificates/
我最近正在写一篇博客文章,内容涉及使用TLS证书进行加密和身份验证,但遇到了错误。我检查了所有“常见的嫌疑犯”,包括AWS安全组,主机级防火墙规则(通过iptables
)以及应用程序配置本身,但仍然无法使其正常工作。当我终于找到错误时,我认为如果其他人发现它有用时,可能值得分享我使用的命令。
该错误本身表现出来,因为我能够在回送地址上成功连接到应用程序(使用TLS),但无法成功分配给网络适配器的IP地址。使用ss -lnt
,我验证了该应用程序正在侦听所有IP地址(而不仅仅是回送),并且如前所述,我还验证了AWS安全组和主机级防火墙没有起作用。这使我相信我的TLS配置有问题。
由于应用程序的错误消息非常模糊(甚至与远程TLS无关),所以我决定尝试使用curl
来验证TLS是否正常工作。首先,我运行以下命令:
curl --cacert /path/to/CA/certificate https://127.0.0.1 -v
经过一些输出后,curl
报告此错误:
curl: (35) gnutls_handshake() failed: certificate is bad
最初,我认为这是证书确实有问题,但是我很快意识到这是一个预期的错误-启用了TLS身份验证,并且我没有提供curl
正确的参数。因此,这次我使用正确的参数再次尝试:
curl --cacert /path/to/CA/certificate
--cert /path/to/client/certificate
--key /path/to/client/certificate/key
https://127.0.0.1 -v
这次连接成功,并且curl
命令的输出显示TLS加密和身份验证就位且成功。