一文搞懂自签名tls证书
内容提要
本文介绍了自签名TLS证书的知识和步骤,包括术语解释、认证流程、文件列表和示例代码。还演示了在Nginx和Docker中使用自签名证书的方法。
延伸解读
自签名证书的适用场景与风险
自签名证书由自己充当CA颁发,不依赖公共信任的根证书组织,因此浏览器和客户端默认不信任。它适合内部测试、开发环境或私有服务(如Docker daemon的TLS双向认证),能避免购买公共证书的成本。但若用于公开网站,用户会看到安全警告,且私钥管理不当可能导致中间人攻击。文章强调CA私钥必须严格保密,一旦泄露,所有签发的证书都将失去安全性。
单向与双向认证的核心区别
TLS单向认证中,仅客户端验证服务端证书,这是HTTPS网站的常见模式。双向认证则要求服务端也验证客户端证书,增加了身份验证的严格性,但配置更复杂。文章指出,双向认证相对罕见,目前Docker daemon开启TLS后便采用此模式。实现双向认证需额外生成客户端证书,并在服务端配置中启用ssl_verify_client,客户端请求时需提供自己的证书和私钥。
生成证书时的关键配置项
生成服务端证书时,需通过openssl.cnf指定subjectAltName(SAN),包含域名和IP地址,否则现代浏览器可能拒绝连接。文章示例中SAN为DNS:ubuntu-linux和IP:10.211.55.5。生成客户端证书时,则需设置extendedKeyUsage为clientAuth,以明确证书用途。此外,CA证书需设置较长的有效期(如1800天),而服务端和客户端证书可独立设置。这些细节直接影响证书的可用性和安全性。
客户端信任自签名证书的方法
要让客户端信任自签名证书,必须将CA的证书导入到系统的信任存储中。文章以macOS为例,通过钥匙串访问导入ca/cert.pem并手动设置为始终信任。Windows系统类似,需将证书安装到“受信任的根证书颁发机构”。对于curl等命令行工具,可使用--cacert指定CA证书,或使用-k跳过验证(不推荐用于生产)。正确导入后,浏览器不再报错,且能正常显示证书信息。
Q&A
自签名TLS证书的基本概念是什么?
自签名TLS证书是由用户自己生成并签署的证书,不依赖于第三方证书机构(CA)。
生成自签名TLS证书需要哪些文件?
生成自签名TLS证书需要CA的私钥和证书、服务端的私钥、证书和CSR,以及客户端的CA证书。
如何在Nginx中配置自签名TLS证书?
在Nginx中配置自签名TLS证书需要指定服务端证书和私钥的路径,并设置SSL协议和加密套件。
自签名TLS证书的单向认证和双向认证有什么区别?
单向认证是客户端验证服务端证书,双向认证是服务端也验证客户端证书。
如何在Docker中使用自签名TLS证书?
在Docker中使用自签名TLS证书需要生成相应的证书文件,并在Docker守护进程中启用TLS。
客户端如何信任自签名TLS证书?
客户端需要导入CA证书,以信任由该CA签发的自签名TLS证书。