作为Microsoft下载pvkimprt的
链接已经失效,而我是OpenSSL的粉丝,所以在这里提供两个使用OpenSSL的解决方案。
变体#1 - 自签名证书
首先,您需要下载
OpenSSL和此配置
文件。@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
让我们创建证书申请,通用名称必须设置为机器名称:
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文件。
- 选择“本地计算机”选项,然后点击下一步。
- 输入密码并勾选“将此密钥标记为可导出”复选框。
- 选择单选按钮“将所有证书放入以下存储区”。
- 选择“个人”存储区,然后点击下一步。
通过这些步骤应该可以工作。
VARIANT #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
非常重要的是将通用名称设置为服务器的机器名称。
验证此证书请求的信息:
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文件)。
如有任何更改或建议,请随意提出。