由于要下载 pvkimprt 的 Microsoft link 已损坏,而我是 OpenSSL 的粉丝,我在这里留下了两个 OpenSSL 解决方案。
变体 #1 - 自签名证书
首先您需要下载OpenSSL 和此配置file。 @Tung 说过您可以使用完美的自签名证书。将下载的配置文件复制到您将运行 OpenSSL 命令的同一文件夹中。
让我们生成证书颁发机构的私钥和证书:
openssl req -x509 -config openssl.cnf -newkey rsa:4096 -sha256 -out ssl-cacert.pem -keyout ssl-cakey.pem -outform PEM
*使用 -nodes 参数省略密码,但出于安全考虑,我个人不推荐。
如果您想查看 CA 证书信息,请执行以下命令:
openssl x509 -purpose -in ssl-cacert.pem -inform PEM
让我们创建证书请求,Common Name 必须设置为机器名称:
openssl req -config openssl.cnf -newkey rsa:2048 -keyout ssl-serverkey.pem -sha256 -out ssl-server.csr -outform PEM
*-nodes 参数的注释相同。
如果要查看证书请求信息,请执行以下命令:
openssl req -text -noout -verify -in ssl-server.csr
使用生成的 CA 证书签署证书请求:
openssl x509 -req -days 365 -CA ssl-cacert.pem -CAkey ssl-cakey.pem -CAcreateserial -in ssl-server.csr -out ssl-server-certificate.pem
让我们制作 PFX 格式的自签名证书:
openssl pkcs12 -export -out ssl-certificate.pfx -inkey ssl-serverkey.pem -in ssl-server-certificate.pem -certfile ssl-cacert.pem -name "SSL Self Signed Certificate"
现在您应该导入 .pfx 证书。
- 双击 ssl-certificate.pfx 文件。
- 选择“本地计算机”选项并下一步。
- 输入密码并选中复选框“将此密钥标记为可导出。”
- 选择单选按钮“将所有证书放入以下存储区”。
- 选择个人商店并点击下一步。
这个步骤必须工作。
变体 #2 - 生成 CA 证书和服务器证书
我个人更喜欢这个解决方案而不是第一个,因为我只需要将根 CA 证书分发给客户端。
首先下载this配置文件。
我们将生成带有对应私钥的根 CA 证书:
openssl req -x509 -config openssl.cnf -newkey rsa:4096 -sha256 -keyout ssl-cakey.pem -out ssl-cacert.pem -outform PEM
让我们检查证书属性:
openssl x509 -purpose -in ssl-cacert.pem -inform PEM
必须显示的信息应如下所示:
Certificate purposes:
SSL client : No
SSL client CA : Yes
SSL server : No
SSL server CA : Yes
Netscape SSL server : No
Netscape SSL server CA : Yes
S/MIME signing : No
S/MIME signing CA : Yes
S/MIME encryption : No
S/MIME encryption CA : Yes
CRL signing : Yes
CRL signing CA : Yes
Any Purpose : Yes
Any Purpose CA : Yes
OCSP helper : Yes
OCSP helper CA : Yes
Time Stamp signing : No
Time Stamp signing CA : Yes
-----BEGIN CERTIFICATE-----
MIIGLjCCBBagAwIBAgIJANCzs7UBFJMpMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNV
...
im1yDnB5nPwkPwZ9eRmlzIc6OaLZcfbFfSeSw8/ipKZcEJ1u+EFrB0JhuSbeLXtQ
N/8=
-----END CERTIFICATE-----
使用以下命令创建证书请求:
openssl req -config openssl.cnf -newkey rsa:2048 -sha256 -keyout ssl-serverkey.pem -out ssl-servercert.csr -outform PEM
Common Name 设置为服务器的机器名非常重要。
验证此证书请求的信息:
openssl req -text -noout -verify -in ssl-servercert.csr
信息显示必须有以下格式,请检查主题部分中的CN字段是否为服务器机器的名称。
verify OK
Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=US, ST=..., L=..., O=..., OU=..., CN=SERVERNAME
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:aa:92:bd:87:75:18:6c:c0:23:3f:0b:5a:46:1a:
...
fe:13
Exponent: 65537 (0x10001)
Attributes:
Requested Extensions:
X509v3 Subject Key Identifier:
7E:7D:79:F4:CD:71:0E:90:3A:9A:F8:3F:83:7D:89:90:4D:D4:F0:12
X509v3 Basic Constraints:
CA:FALSE
X509v3 Key Usage:
Digital Signature, Key Encipherment, Data Encipherment
Signature Algorithm: sha256WithRSAEncryption
34:e1:b4:db:b2:87:cc:11:3e:85:3c:ed:ac:8d:d9:43:ae:b0:
...
56:84:29:f9
创建证书文件夹:
mkdir certificates
创建数据库索引文件:
Windows: type NUL > index.txt
Unix: touch index.txt
创建存储当前序列号的serial.txt文件:
echo '01' > serial.txt
使用该命令创建对证书请求进行 2 年签名的服务器证书。如果您使用 -nodes 参数,系统会提示您输入 CA 证书的密码:
openssl ca -config openssl.cnf -days 730 -policy signing_policy -extensions v3_req -out ssl-servercert.pem -infiles ssl-servercert.csr
然后显示一个文本,格式为:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'US'
stateOrProvinceName :ASN.1 12:'...'
localityName :ASN.1 12:'...'
organizationName :ASN.1 12:'...'
organizationalUnitName:ASN.1 12:'...'
commonName :ASN.1 12:'SERVERNAME'
Certificate is to be certified until Jul 4 23:26:59 2018 GMT (730 days)
Sign the certificate? [y/n]:
选择y会提示以下文字,再选择y一次:
1 out of 1 certificate requests certified, commit? [y/n]
将生成的证书导出为 PFX 格式:
openssl pkcs12 -export -out ssl-certificate.pfx -inkey ssl-serverkey.pem -in ssl-servercert.pem -name "SSL Signed Certificate"
您需要执行以下步骤才能顺利启用 SSL:
在服务器机器上:
- 在选择计算机帐户的受信任的根证书颁发机构商店中导入根 CA 证书(ssl-cacert.pem 文件)。
- 在选择计算机帐户的个人商店中导入 SSL 服务器证书(ssl-certificate.pfx 文件)。
在客户端计算机上:
- 在每台客户端计算机上,您需要在受信任的根证书颁发机构商店中选择计算机帐户导入根 CA 证书(ssl-cacert.pem 文件)。
随时提出任何更改或建议。