openssl命令方式生成公钥、私钥、证书(pkcs1)
安装openssl,不在赘述。
1.生成私钥文件
openssl genrsa -des3 -out privkey.pem 2048
这个命令会生成一个2048位的密钥,同时有一个des3方法加密的密码
如果你不想要每次都输入密码,可以改成:
openssl genrsa -out privkey.pem 2048
生成的私钥文件名:privkey.pem
2.生成证书文件
openssl req -new -key privkey.pem -out cert.csr
这个命令将会生成一个证书请求,当然,用到了前面生成的密钥privkey.pem文件
这里将生成一个新的文件cert.csr,即一个证书请求文件,你可以拿着这个文件去数字证书颁发机构(即CA)申请一个数字证书。CA会给你一个新的文件cacert.pem,那才是你的数字证书。
如果是自己做测试,那么证书的申请机构和颁发机构都是自己。就可以用下面这个命令来生成证书:
openssl req -new -x509 -key privkey.pem -out cacert.pem -days 3650
这个命令将用上面生成的密钥privkey.pem生成一个数字证书cacert.pem,有效期为3650天
3.生成公钥文件
openssl rsa -in privkey.pem -inform pem -pubout -out pubkey.pem
生成的公钥文件pubkey.pem
4.查看密钥信息
openssl rsa -noout -text -in privkey.pem
PS:
pkcs1格式的证书,一般是C使用的(标准RSA秘钥对标准规范,未加密)
pkcs8格式的证书,一般是Java使用的(加密后的秘钥对)
pkcs12格式的证书,一般是IOS使用的,后缀为.pfx
这三种证书可以相关转换。
X509 文件扩展名
首先我们要理解文件的扩展名代表什么。DER、PEM、CRT和CER这些扩展名经常令人困惑。很多人错误地认为这些扩展名可以互相代替。尽管的确有时候有些扩展名是可以互换的,但是最好你能确定证书是如何编码的,进而正确地标识它们。正确地标识证书有助于证书的管理。
编码 (也用于扩展名)
.DER : 扩展名DER用于二进制DER编码的证书。这些证书也可以用CER或者CRT作为扩展名。比较合适的说法是“我有一个DER编码的证书”,而不是“我有一个DER证书”。
.PEM : 扩展名PEM用于ASCII(Base64)编码的各种X.509 v3 证书。文件开始由一行"—– BEGIN …“开始。如“BEGIN RSA PRIVATE KEY”
常用的扩展名
CRT : 扩展名CRT用于证书。证书可以是DER编码,也可以是PEM编码。扩展名CER和CRT几乎是同义词。这种情况在各种unix/linux系统中很常见。
CER : CRT证书的微软型式。可以用微软的工具把CRT文件转换为CER文件(CRT和CER必须是相同编码的,DER或者PEM)。扩展名为CER的文件可以被IE识别并作为命令调用微软的cryptoAPI(具体点就是rudll32.exe cryptext.dll, CyrptExtOpenCER),进而弹出一个对话框来导入并/或查看证书内容。
KEY : 扩展名KEY用于PCSK#8的公钥和私钥。
这些公钥和私钥可以是DER编码或者PEM编码。
CRT文件和CER文件只有在使用相同编码的时候才可以安全地相互替代。
公钥加密标准(Public Key Cryptography Standards, PKCS),BEGIN RSA PRIVATE KEY是PKCS#1,BEGIN PRIVATE KEY是PKCS#8
PEM转换为DER
openssl x509 -in myserver.pem -outform der -out myserver.[der|crt]
DER转换为PEM
openssl x509 -inform der -in myserver.[cer|crt] -out myserver.pem
PEM证书生成公钥文件
openssl x509 -outform PEM -in cert.pem -pubkey -out pub.key
(打印出来的是公钥,可以粘贴出来;生成的pub.key不是公钥,而是证书。)
检查PEM公钥格式,公钥前缀后缀
PKCS12(.pfx后缀)转PKCS1(C使用)
PKCS12生成PKCS1私钥(参数-nodes是生成的私钥不加密)
openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem -nodes
privateKey.pem为生成的私钥文件
PKCS12生成PKCS1证书文件
openssl pkcs12 -in yourP12File.pfx -clcerts -nokeys -out CertFile.crt
CertFile.crt为生成的证书文件
将生成的PKCS1私钥转化成PKCS1公钥
openssl rsa -in privateKey.pem -inform pem -pubout -out pubkey.pem
pubkey.pem为生成的公钥文件