证书有2种格式:PEM(base64格式)、DER(二进制)
crt、cer都为证书(证书包含公钥,crt常见linux、cer常见windows)
csr为证书请求文件
pfx、p12为带证书的私钥
pem为base64格式的文件
der为二进制格式的文件
http://blog.sina.com.cn/s/blog_3d5517850102w2rs.html
一、生成私钥:生成des3加密的私钥private.pem(1024/2048位的密钥)
openssl genrsa -des3 -out private.pem 2048
生成无密的私钥
openssl genrsa -out private.pem 2048
去除掉密钥文件保护密码
openssl rsa -in prikey.pem -out prikey.pem
如下信息表示私钥已加密
(JAVA需要使用的私钥需要经过PKCS#8编码,PHP程序不需要,可以直接略过)
openssl pkcs8 -topk8 -inform PEM -in private.pem -outform PEM
生成无密的私钥
openssl pkcs8 -topk8 -inform PEM -in private.pem -outform PEM -nocrypt
二、生成公钥
openssl rsa -in private.pem -pubout -out public.pem
三、生成证书:生成X509格式的CA自签名证书(有效期一年)
openssl req -new -x509 -key private.pem -out ca.crt -days 3650
生成der格式的证书:
openssl req -new -x509 -key private.pem -out ca.crt -days 3650 -outform der
向权威证书颁发机构申请证书(只需要提交private.pem、证书请求文件server.csr)
1、根据私钥生成csr(证书请求文件)
openssl req -new -key private.pem -out server.csr
2、向权威证书颁发机构申请证书(此时ca.crt为颁发机构的证书、server.crt 就是我们需要的证书)
openssl x509 -req -days 3650 -in server.csr \
-CA ca.crt -CAkey private.pem \
-CAcreateserial -out server.crt
如果要在google等浏览器显示出安全的绿锁标志,自己颁发的证书肯定不好使,得花钱向第三方权威证书颁发机构申请
ca.srl文件-CAcreateserial——表示创建证书序列号文件
http://www.cnblogs.com/yjmyzz/p/openssl-tutorial.html
四、生成pfx或p12(pfx带证书跟私钥的二进制)
openssl pkcs12 -export -out private.pfx -inkey private.pem -in ca.crt
pfx转pem(pem带证书跟私钥的base64格式)
openssl pkcs12 -in private.pfx -nodes -out private.pem
包含证书与私钥的pem或pfx或p12分离出私钥
openssl rsa -in private.pem -out private.key
pem分离出证书
openssl x509 -in server.pem -out ca.crt
五、加密与验证
对文件进行签名
open rsautl -sign -inkey prikey.pem -in a.txt -out sig.dat
验证签名
openssl rsautl -verify -inkey prikey.pem -in sig.dat
用公钥对文件加密
openssl rsautl -encrypt -pubin -inkey pubkey.pem -in a.text -out b.text
用私钥解密
openssl rsautl -decrypt -inkey prikey.pem -in b.text
用证书中的公钥加密
opensll rsautl -encrypt -certin -inkey cert1.pem -in a.txt
六、格式转换
将der格式的证书转成pem格式
openssl x509 -inform PEM -outform DER -in public.der -out public.pem
将pem转化成der
openssl x509 -outform der -in public.pem -out public.der
PEM–DER/CER(BASE64–DER编码的转换)
openssl x509 -outform der -in certificate.pem -out certificate.der
PEM–P7B(PEM–PKCS#7)
openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer
PEM–PFX(PEM–PKCS#12)
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
PEM–p12(PEM–PKCS#12)
openssl pkcs12 -export -out Cert.p12 -in Cert.pem -inkey key.pem
CER/DER–PEM(编码DER–BASE64)
openssl x509 -inform der -in certificate.cer -out certificate.pem
P7B–PEM(PKCS#7–PEM)
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
P7B–PFX(PKCS#7–PKCS#12)
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer
PFX/p12–PEM(PKCS#12–PEM)
openssl pkcs12 -in certificate.pfx -out certificate.cer
如无需加密pem中私钥,可以添加选项-nodes;
如无需导出私钥,可以添加选项-nokeys;
PEM BASE64–X.509文本格式
openssl x509 -in Key.pem -text -out Cert.pem
PFX文件中提取私钥(.key)
openssl pkcs12 -in mycert.pfx -nocerts -nodes -out mycert.key
PEM–SPC
openssl crl2pkcs7 -nocrl -certfile venus.pem -outform DER -out venus.spc
PEM--PVK(openssl 1.x开始支持)
openssl rsa -in mycert.pem -outform PVK -pvk-strong -out mypvk.pvk
PEM--PVK(对于openssl 1.x之前的版本,可以下载pvk转换器后通过以下命令完成)
pvk -in ca.key -out ca.pvk -nocrypt -topvk