谁能建议一种在本地主机上生成自签名证书的现代方法,该方法将被 Chrome 和 Mozilla 接受?
我尝试了 openssl 生成,但是 Mozilla 抱怨发行者不受信任。
Centos 7、nginx
答案1
警告:在您深入运行自己的证书颁发机构的雷区之前,您可能需要研究安全隐患!
但如果您必须这样做,请继续阅读快速而肮脏的 CA,它将https://localhost/
在没有警告消息的情况下为您提供...
创建以下文本文件:
# OpenSSL configuration for Root CA
[ req ]
prompt = no
string_mask = default
# The size of the keys in bits:
default_bits = 2048
distinguished_name = req_distinguished_name
x509_extensions = x509_ext
[ req_distinguished_name ]
# Note that the following are in 'reverse order' to what you'd expect to see.
countryName = gb
organizationName = Test
commonName = Test Root CA
[ x509_ext ]
basicConstraints=critical,CA:true,pathlen:0
keyUsage=critical,keyCertSign,cRLSign
另存为root.cnf
然后生成请求:
$ openssl req -x509 -new -keyout root.key -out root.cer -config root.cnf
这将创建您的根 CA 证书 ( ) 和您必须保密的root.cer
根 CA 私钥 ( )。root.key
它将提示输入私钥密码 - 确保您选择一个强密码。
现在为服务器证书创建一个配置文件:
# OpenSSL configuration for end-entity cert
[ req ]
prompt = no
string_mask = default
# The size of the keys in bits:
default_bits = 2048
distinguished_name = req_distinguished_name
x509_extensions = x509_ext
[ req_distinguished_name ]
# Note that the following are in 'reverse order' to what you'd expect to see.
countryName = gb
organizationName = Test
commonName = localhost
[ x509_ext ]
keyUsage=critical,digitalSignature,keyAgreement
subjectAltName = @alt_names
# Multiple Alternate Names are possible
[alt_names]
DNS.1 = localhost
# DNS.2 = altName.example.com
将其保存为server.cnf
并生成请求:
openssl req -nodes -new -keyout server.key -out server.csr -config server.cnf
以上将生成另一个server.key
您必须保护的私钥 ( )。在这种情况下,密钥不受密码保护,但您可以通过删除该-nodes
选项来添加密码。
最后,使用新的根 CA 和文件中的扩展名签署请求server.cnf
(为了方便起见):
$ openssl x509 -req -in server.csr -CA root.cer -CAkey root.key -set_serial 123 -out server.cer -extfile server.cnf -extensions x509_ext
注意:为该选项选择任意随机数-set_serial
。
它将要求您输入生成根 CA 时输入的密码。
server.cer
将生成服务器证书 ( )。
现在,将根 CA 证书 ( root.cer
) 添加到 Firefox 的信任锚存储,以便浏览器信任您的新 CA。
使用 OpenSSL 作为临时 Web 服务器运行测试:
$ sudo openssl s_server -key server.key -cert server.cer -accept 443 -www
注意:如果您已经有一个服务器在端口 443 上运行,则可能会出现错误。在这种情况下,请停止正在运行的服务器,或者将上面的端口号更改为另一个未使用的端口,方法是将结尾更改为(例如)-accept 8443 -www
当您使用 Firefox 导航到https://localhost
(或者https://localhost:8443
如果您更改了上面的端口号)时,您现在应该不会看到任何警告,并且会看到您安装的 OpenSSL 可以提供的密码列表。
一旦您对结果感到满意,请将server.key
和添加server.cer
到您的原始网络服务器并进行相应配置。