生成证书
合作伙伴可以购买使用商业CA签发的证书,也可以使用OpenSSL工具生成的免费证书。对于使用OpenSSL工具生成证书的命令较多,这里给出推荐的生成证书的OpenSSL命令供参考。
- 生成CA的RSA公私钥对。
命令:openssl genrsa [-out filename] [-aes256] [numbits]
样例:openssl genrsa -out CAkey.pem -aes256 2048
命令执行时会在OpenSSL界面上提示用户自己手动输入生成的私钥文件的保护口令。该口令会自动派生出加密密钥,对私钥文件做加密保护。
表1 生成CA的RSA公私钥对参数说明 参数
说明
[-out filename]
输出的存放公私钥对的文件名及路径。
[-aes256]
表明私钥文件的加密算法是AES256-CBC。
这里也可以选择-des、-des3、-aes128、-idea等加密算法,对称加密算法建议使用:AES(128位及以上),所以这里我们推荐使用-aes256加密算法。如果在生成公私钥对的命令中不指定加密算法,则生成的公私钥文件是没有口令保护的。
[numbers]
指生成的公私钥对的长度,非对称加密算法建议使用:RSA(2048位及以上),所以这里推荐的公私钥对长度为2048bit。
- 使用CA自己的私钥签发自签名CA根证书。
命令:openssl req [-x509] [-new] [-key filename] [-out filename] [-md2|-md5|-sha1|-mdc2|-sha256] [-days n] [-config path of openssl.cnf]
样例:openssl req -x509 -new -key CAkey.pem -sha256 -out CA.pem -days 3650 -config openssl.cnf
样例中的“Cakey.pem”为1中生成的私钥文件。命令执行时会在OpenSSL界面上提示用户自己手动输入1生成的私钥文件的保护口令以及输入证书申请者的信息值。
表2 使用CA自己的私钥签发自签名CA根证书参数说明 参数
说明
[-x509]
本参数将产生自签名的证书,即Root CA根证书,证书的扩展项在config文件里面指定。
[-new]
本参数产生一个新的证书请求文件CSR(Certificate Secure Request,如果该参数和-x509参数一起使用,则是生成一个自签名的根证书文件),它会要用户输入创建CSR的一些必须的信息。至于需要哪些信息,是在config文件里面定义好了的。
[-key filename]
指定证书私钥文件的来源。允许该文件的格式是PKCS#8。
[-out filename]
输出证书请求文件(如果前面有-x509参数,则表明此处输出的是自签名根证书文件),默认为标准输出。
[-md2|-md5|-sha1|-mdc2|-sha256]
指定证书的哈希算法,建议签名场景使用SHA256,另外因为在1中生成的是RSA的公私钥对,所以此处的签名算法为SHA256RSA。
[-days n]
指定被签名证书的有效期限。如果不指定该参数,则生成证书的有效期默认为30天。一般我们建议生成的证书有效期为10年,即n取值为3650。
[-config path of openssl.cnf]
指定openssl.cnf配置文件的绝对路径和文件名。
- 生成设备证书的公私钥对。
生成设备证书公私钥对的命令,同生成CA证书公私钥对的命令。
样例:openssl genrsa -out Devicekey.pem -aes256 2048
这里的Devicekey.pem为存放设备证书公私钥的文件。命令执行时会在OpenSSL界面上提示用户自己手动输入生成的私钥文件的保护口令。该口令会自动派生出加密密钥,对私钥文件做加密保护。
- 生成设备证书的证书请求文件。
命令:openssl req [-new] [-key filename] [-out filename] [-config path of openssl.cnf]
样例:openssl req -new -key Devicekey.pem -out DeviceCert.csr -config openssl.cnf
样例中的“Devicekey.pem”为3中生成的私钥文件。命令执行时会在OpenSSL界面上提示用户自己手动输入3生成的私钥文件的保护口令以及输入证书申请者的信息值。
命令中的参数说明请参见表2。
- 使用CA私钥签发设备证书。
命令:openssl x509 [-req] [-in filename] [-out filename] [-CA filename] [-CAkey filename] [-md2|-md5|-sha1|-mdc2|-sha256] [-days arg] [-CAcreateserial] [-extfile filename] [-extensions v3_req]
样例:openssl x509 -req -in DeviceCert.csr -out DeviceCert.pem -CA CA.pem -CAkey CAkey.pem -sha256 -days 3650 -CAcreateserial -extensions v3_req -extfile openssl.cnf
命令执行时会在OpenSSL界面上提示用户自己手动输入1生成的根CA私钥文件的保护口令。
表3 使用CA私钥签发设备证书参数说明 参数
说明
[-req]
在x509命令中,该参数说明输入文件(“-in”参数后面的文件)是证书请求文件CSR。
[-in filename]
指定输入文件名,这里我们输入的文件是4中生成的设备证书请求文件。
[-out filename]
指定输出文件名,这里指被签名后的设备证书文件。
[-CA filename]
指定签名用的CA的证书文件名,即2中生成的证书请求文件。
[-CAkey filename]
指定CA私有密钥文件,即1生成CA的RSA公私钥对。
[-md2|-md5|-sha1|-mdc2|-sha256]
指定证书的哈希算法,建议签名场景使用SHA256,另外因为在1中生成的是RSA的公私钥对,所以此处的签名算法为SHA256RSA。
[-days n]
指定被签名证书的有效期限。如果不指定该参数,则生成证书的有效期默认为30天。一般我们建议生成的证书有效期为10年,即n取值为3650。
[-CAcreateserial]
如果没有CA系列号文件(默认文件名为CA.srl),那么本option将生成一个,如果有默认的CA.srl文件,则直接使用该文件,且以后每签发一个证书,序列号增加1。
[-extfile filename]
指定包含证书扩展项的文件名,这里为openssl.cnf文件。如果没有该参数,那么生成的证书将没有任何扩展项,即生成的是x.509 v1版本的证书。
[-extensions section]
指定签发的证书文件中包含要增加的扩展项,如果不指定该参数,则默认为v3_ca,即CA根证书,这里要签发设备证书,所以此处的section取值为v3_req,代表生成的证书中证书的基本约束是“Subject Type=End Entity”,即该证书是终端实体证书。
- 5中生成的DeviceCert.pem文件正文去头尾即为IDP Metadata.xml示例(使用UTF-8编码保存)中<ds:X509Certificate> </ds:X509Certificate>内的值。