我正在尝试了解证书生成、签名以及成为 CA 所需的条件。
我正在开发一个 HTTP 代理,它将成为浏览器和实际 Web 服务器之间的中间代理,用于记录浏览器和实际 Web 服务器之间发送和接收的 HTTPS 消息。
我需要为在 HTTP 代理中浏览的域生成动态证书,我正在开发Ubuntu 14 64位机器。我希望 chrome 在浏览各种网站时能够顺畅运行。
我目前所做的:
使用以下命令为 CA 创建密钥和自签名证书。
certtool --generate-privkey --outfile ca-key.pem certtool --generate-self-signed --template cert.cfg --load-privkey ca-key.pem --outfile ca-cert.pem
在系统证书存储中明确设置 ca 证书。
使用以下命令将 pem 转换为 crt 证书
openssl x509 -in ca-cert.pem -inform PEM -out ca-cert.crt
(需要在certtool中找到对应的命令)
然后将
ca-cert.crt
文件复制到/usr/share/ca-certificates/extra
路径并执行以下命令在系统中明确设置 ca 证书。sudo dpkg-reconfigure ca-certificates
这样我就可以看到一个系统窗口,我选择
ca-cert.crt
并按“确定”以在系统中明确设置证书。我的理解是,由于 ca-cert.crt 已在系统中明确设置,因此由该 ca-cert 和 ca-key 签名的任何其他证书都将在系统中受到信任(使用自己的证书存储的应用程序除外,例如 Firefox)。接下来我使用以下命令为 HTTP 代理创建密钥:
certtool --generate-privkey --outfile key.pem
然后我使用以下命令为 HTTP 代理创建了 csr。
certtool --generate-request --load-privkey key.pem --template cert.cfg --outfile request.pem*
然后我使用以下命令签署了 csr。
certtool --generate-certificate --load-request request.pem --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem --template cert.cfg --outfile cert.pem
最后我得到了 cert.key 和 cert.pem。现在这些证书文件用于浏览器和我的 HTTP 代理之间的通信。
我发现 Chrome 不会显示收到的内容。但是,如果我以ignore-certificate-errors
模式启动 Chrome,Chrome 就会正常工作并正确显示网站内容。
有人可以指导我做错了什么,导致 Chrome 无法显示收到的内容吗?
答案1
您看过模板文件了吗cert.cfg
?同一个文件名出现在 的两个不同调用中certtool
,这两个调用的目的是相互补充的。
检查两种情况下的模板是否相同。特别是,您应该注意ca
每个文件中的 -instruction,以确保它们匹配。