CA证书的生成https证书、转换格式、导出公钥私钥(.pem、.crt、.cer、.pfx)
格式说明PKCS 全称是 Public-Key Cryptography Standards ,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准,PKCS 目前共发布过 15 个标准。 常用的有:PKCS#7 Cryptographic Message Syntax StandardPKCS#10 Certification Request StandardPKCS#
格式说明
PKCS 全称是 Public-Key Cryptography Standards ,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准,PKCS 目前共发布过 15 个标准。 常用的有:
PKCS#7 Cryptographic Message Syntax Standard
PKCS#10 Certification Request Standard
PKCS#12 Personal Information Exchange Syntax Standard
X.509是常见通用的证书格式。所有的证书都符合为Public Key Infrastructure (PKI) 制定的 ITU-T X509 国际标准。
PKCS#7 常用的后缀是: .P7B .P7C .SPC
PKCS#12 常用的后缀有: .P12 .PFX
X.509 DER 编码(ASCII)的后缀是: .DER .CER .CRT
X.509 PAM 编码(Base64)的后缀是: .PEM .CER .CRT
.cer/.crt是用于存放证书,它是2进制形式存放的,不含私钥。
.pem跟crt/cer的区别是它以Ascii来表示。
pfx/p12用于存放个人证书/私钥,他通常包含保护密码,2进制方式
p10是证书请求
p7r是CA对证书请求的回复,只用于导入
p7b以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥。
PEM格式
PEM格式是证书颁发机构颁发证书的最常见格式.PEM证书通常具有扩展名,例如.pem,.crt,.cer和.key。它们是Base64编码的ASCII文件,包含“----- BEGIN CERTIFICATE -----”和“----- END CERTIFICATE -----”语句。服务器证书,中间证书和私钥都可以放入PEM格式。
Apache和其他类似服务器使用PEM格式证书。几个PEM证书,甚至私钥,可以包含在一个文件中,一个在另一个文件之下,但是大多数平台(例如Apache)希望证书和私钥位于单独的文件中。
DER格式
DER格式只是证书的二进制形式,而不是ASCII PEM格式。它有时会有.der的文件扩展名,但它的文件扩展名通常是.cer所以判断DER .cer文件和PEM .cer文件之间区别的唯一方法是在文本编辑器中打开它并查找BEGIN / END语句。所有类型的证书和私钥都可以用DER格式编码。DER通常与Java平台一起使用。SSL转换器只能将证书转换为DER格式。如果您需要将私钥转换为DER,请使用此页面上的OpenSSL命令。
PKCS#7 / P7B格式
PKCS#7或P7B格式通常以Base64 ASCII格式存储,文件扩展名为.p7b或.p7c。P7B证书包含“----- BEGIN PKCS7 -----”和“----- END PKCS7 -----”语句。P7B文件仅包含证书和链证书,而不包含私钥。多个平台支持P7B文件,包括Microsoft Windows和Java Tomcat。
PKCS#12 / PFX格式
PKCS#12或PFX格式是二进制格式,用于将服务器证书,任何中间证书和私钥存储在一个可加密文件中。PFX文件通常具有扩展名,例如.pfx和.p12。PFX文件通常在Windows计算机上用于导入和导出证书和私钥。
将PFX文件转换为PEM格式时,OpenSSL会将所有证书和私钥放入一个文件中。您需要在文本编辑器中打开该文件,并将每个证书和私钥(包括BEGIN / END语句)复制到其各自的文本文件中,并将它们分别保存为certificate.cer,CACert.cer和privateKey.key。
安装环境
本文用到了openssl,所以要下载安装openssl。
下载地址:https://slproweb.com/products/Win32OpenSSL.html
使用openssl工具生成一个RSA私钥KEY
$openssl genrsa -des3 -out server.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
..........+++++
...................................................+++++
e is 65537 (0x010001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
生成CSR(证书签名请求)
$openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:
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) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:jn
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:test
Email Address []:test@domain.cn
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:1
string is too short, it needs to be at least 4 bytes long
A challenge password []:123456
An optional company name []:123456
说明:需要依次输入国家,地区,城市,组织,组织单位,Common Name和Email。其中Common Name,可以写自己的名字或者域名,如果要支持https,Common Name应该与域名保持一致,否则会引起浏览器警告。
可以将证书发送给证书颁发机构(CA),CA验证过请求者的身份之后,会出具签名证书,需要花钱。另外,如果只是内部或者测试需求,也可以使用OpenSSL实现自签名。
删除密钥中的密码
$openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:
writing RSA key
说明:如果不删除密码,在应用加载的时候会出现输入密码进行验证的情况,不方便自动化部署。
生成自签名证书CRT
$openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=C = AU, ST = Some-State, L = jn, O = Internet Widgits Pty Ltd, CN = test, emailAddress = test@domain.cn
Getting Private key
这就是的HTTPS证书了,不过内部或者测试使用,只要忽略证书提醒就可以了。
自签名的证书,不被浏览器信任,适合内部或者测试使用。
生产环境需要买证书吧。
CRT转换生成pem格式的公钥
$openssl x509 -in server.crt -out server.pem -outform PEM
有些服务,需要把crt转换成pem格式的证书才能正常加载。
x509转换生成PFX格式证书
$openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt
Enter Export Password:
Verifying - Enter Export Password:
PEM 到 PKCS#12 的转换
$openssl pkcs12 -export -in server.pem -out server.p12 -inkey server.key
Enter Export Password:
Verifying - Enter Export Password:
导出私钥
$openssl rsa -in server.key -out pri.pem
writing RSA key
导出公钥
$openssl rsa -in server.key -pubout -out pub.pem
writing RSA key
参考
https://www.cnblogs.com/jtlgb/p/6762050.html
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)