dmli的博客小屋

专注IT运维

常用证书合成命令

目前有很多网站都提供证书工具,比如我常用的 https://www.chinassl.net/ssltools/index.html 。但理论上来说在这些网站上合成证书,有可能造成信息泄露,所以很有必要掌握本地转换命令。

基本概念

X.509  ----  一种证书标准,规定了证书应该包含哪些内容,SSL使用的就是该标准定义的证书。

PEM  ----  用BASE64编码的ASCII证书文件,可以直接用文本编辑器打开,内容以“-----BEGIN ...”开头,以“-----END ...”结尾,linux环境下最常用的编码格式。

DER  ----  用二进制格式编码的证书文件,不能用文本编辑器打开,一般在windows环境中使用较多。

PFX  ----  用二进制格式编码的证书文件,包含公钥和私钥,带密码验证,一般用在windows环境。

关于证书扩展名

PEM格式的证书文件,常用扩展名包括: .pem / .crt / .cer / .key

DER格式的证书文件,常用扩展名包括: .der / .cer

PFX格式的证书文件,常用扩展名包括: .pfx / .p12

所以,判断证书的编码方式,不能只看扩展名,应该尝试用文本编辑器打开,如果可以显示内容,则为PEM格式,否则为DER或PFX格式。

自签名PEM/CRT证书(适用apache/nginx)

openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out certificate.pem

斜体部分可以使用其他参数,该命令生成两个文件:key.pemcertificate.pem,分别为私钥和公钥。执行命令后会提示输入一些证书信息,把Common Name填一下,其他都可以不填。

# openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out certificate.pem
Generating a 2048 bit RSA private key
..........+++
.......................................................................................+++
writing new private key to 'key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:www.muzifei.com
Email Address []:

上面的命令是使用操作系统根证书进行签发,其实可以自建CA,然后使用自建CA对证书进行签发:

#生成CA私钥
openssl genrsa -out ca.key 2048

#生成CA公钥(CA本身也是ssl证书)
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt

#生成服务器证书私钥
openssl genrsa -out server.key 2048

#生成服务器证书请求文件
openssl req -new -key server.key -out server.csr

#使用CA公钥对请求文件进行签发
openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt

将PEM证书转换为JSK证书(适用tomcat/weblogic)

步骤1、使用PEM证书合成PFX格式证书:

openssl pkcs12 -inkey key.pem -in certificate.pem -export -out certificate.p12 -name pname

此命令需要输入PFX证书密码,运行后得到一个certificate.p12证书,别名为“pname”。

# openssl pkcs12 -inkey key.pem -in certificate.pem -export -out certificate.p12 -name pname
Enter Export Password:
Verifying - Enter Export Password:

如果是从namecheap等机构购买的证书,还会包含CA的“证书链”文件,可以把证书链信息也合成至PFX证书里:

openssl pkcs12 -inkey key.pem -in certificate.pem -certfile domain.ca-bundle -export -out certificate.p12 -name pname

步骤2、将PFX证书转换成JKS证书:

这里需要用到JDK自带的keytool工具,OPEN JDK或者SUN JDK都有这个工具:

keytool -importkeystore -srckeystore certificate.p12 -srcstoretype PKCS12 -srcstorepass 123456 -srcalias pname -destkeystore certificate.jks -deststoretype jks -deststorepass 123456 -destalias jname

srcstorepass和deststorepass分别为pfx和jks证书的密码,srcalias和destalias分别为pfx和jks证书的别名。

此命令会生成一个certificate.jks证书,别名为”jname“,密码为”123456“

发表评论:

Copyright© dmli 2015-2019