在Openssl库生成数字证书总结(适配win2000)一文中我们已经实现了crt后缀证书的生成,现在说一下怎么生成pem后缀的证书。大体思路很简单,就是使用OpenSSL生成一个CA根证书,并用这个根证书颁发两个子证书server和client。下面就来说一下实现的具体步骤:
一、命令行进入openssl的out32dll路径下,新建一个private文件夹用于放置我们生成的各种证书文件。
二、生成根证书
1、生成根证书私钥 -- pem文件
openssl genrsa -out private/cakey.pem 1024
genrsa——使用RSA算法产生私钥
-out——输出文件的路径
1024——指定私钥长度
2、生成根证书签发申请文件 -- csr文件
openssl req -new -key private/cakey.pem -out private/ca.csr -config ../apps/openssl.cnf
req——执行证书签发命令
-new——新证书签发请求
-key——指定私钥路径
-out——输出的csr文件的路径
3、自签发根证书 -- cer文件
openssl x509 -req -days 365 -sha1 -extensions v3_ca -signkey private/cakey.pem -in private/ca.csr -out private/ca.cer
x509——生成x509格式证书
-req——输入csr文件
-days——证书的有效期(天)
-sha1——证书摘要采用sha1算法
-extensions——按照openssl.cnf文件中配置的v3_ca项添加扩展
-signkey——签发证书的私钥
-in——要输入的csr文件
-out——输出的cer证书文件
4、生成根证书签发申请文件 -- pem文件
openssl req -new -x509 -key private/cakey.pem -out private/cacert.pem -config ../apps/openssl.cnf
二、用根证书签发服务端证书
1、生成服务端私钥
openssl genrsa -out private/server-key.pem 1024
2、生成根证书请求文件
openssl req -new -key private/server-key.pem -out private/server.csr -config ../apps/openssl.cnf
3、使用根证书签发服务端证书
openssl x509 -req -days 365 -sha1 -extensions v3_req -CA private/ca.cer -CAkey private/cakey.pem -CAserial ca.srl -CAcreateserial -in private/server.csr -out private/serverCert.pem
-CA——指定CA证书的路径
-CAkey——指定CA证书的私钥路径
-CAserial——指定证书序列号文件的路径
-CAcreateserial——表示创建证书序列号文件(即上方提到的serial文件),创建的序列号文件默认名称为-CA,指定的证书名称后加上.srl后缀
三、用根证书签发客户端证书
1、生成客户端私钥
openssl genrsa -out private/client-key.pem 1024
2、 生成证书请求文件
openssl req -new -key private/client-key.pem -out private/client.csr -config ../apps/openssl.cnf
3、 使用根证书签发客户端证书
openssl x509 -req -days 365 -sha1 -extensions v3_req -CA private/ca.cer -CAkey private/cakey.pem -CAserial ca.srl -in private/client.csr -out private/clientCert.pem
以上步骤操作无误的话,打开private文件夹如图:
其中cacert.pem、clientCert.pem、client-key.pem、serverCert.pem、server-key.pem就是我们需要的文件了。使用win2000环境下使用openssl-0.9.6i实现通信加密 里的代码进行测试:
测试结果显示通信正常,证书可以正常使用。