一、生成RSA证书密钥对

下载OpenSSL windows版本

https://pan.baidu.com/s/1cBvJ-mwqzuyRwfq2xqHsLg

1)生成RSA私钥:

openssl genrsa -out rsa_2048_private_key.pem 2048

该命令会生成2048位的私钥,生成成功的界面如下:


此时我们就可以在当前路径下看到rsa_private_key.pem文件了。

2)把RSA私钥转换成PKCS8格式

输入命令并回车

openssl pkcs8 -topk8 -inform PEM -in rsa_2048_private_key.pem -outform PEM -nocrypt

得到生成功的结果,这个结果就是PKCS8格式的私钥,如下图:


3)生成 pks8 格式的 rsa 私钥

openssl pkcs8 -topk8 -in rsa_2048_private_key.pem -out pkcs8_rsa_2048private_key.pem -nocrypt

或者:

openssl pkcs8 -topk8 -inform PEM -in rsa_2048_private_key.pem -outform PEM –nocrypt -out pkcs8_rsa_2048private_key.pem

4) 生成RSA公钥

输入命令并回车,

openssl rsa -in rsa_2048_private_key.pem -pubout -out rsa_2048_public_key.pem

得到生成成功的结果,如下图:


此时,我们可以看到一个文件名为rsa_public_key.pem的文件,打开它,可以看到-----BEGIN PUBLIC KEY-----开头,

-----END PUBLIC KEY-----结尾的没有换行的字符串,这个就是公钥。

二、生成IOS端及JAVA端使用的RSA证书

1)生成RSA私钥:

openssl genrsa -out rsa_2048_private_key.pem 2048

2. 生成证书请求文件rsaCertReq.csr

openssl req -new -key rsa_2048_private_key.pem -out rsaCerReq.csr

注意:这一步会提示输入国家、省份、mail等信息,可以根据实际情况填写,或者全部不用填写,直接全部敲回车.

3. 生成证书rsaCert.crt,并设置有效时间为10年

openssl x509 -req -days 3650 -in rsaCerReq.csr -signkey rsa_2048_private_key.pem -out rsaCert.crt

4. 生成供iOS使用的公钥文件public_key.der

openssl x509 -outform der -in rsaCert.crt -out public_key.der

5. 生成供iOS使用的私钥文件private_key.p12

openssl pkcs12 -export -out private_key.p12 -inkey rsa_private_key.pem -in rsaCert.crt

注意:这一步会提示给私钥文件设置密码,直接输入想要设置密码即可,然后敲回车,然后再验证刚才设置的密码,再次输入密码,然后敲回车,完毕!

在解密时,private_key.p12文件需要和这里设置的密码配合使用,因此需要牢记此密码.

6. 生成供Java使用的公钥rsa_public_key.pem

openssl rsa -in rsa_2048_private_key.pem -out rsa_2048_public_key.pem -pubout

7. 生成供Java使用的私钥pkcs8_private_key.pem

openssl pkcs8 -topk8 -in rsa_2048_private_key.pem -out pkcs8_rsa_2048private_key.pem -nocrypt

或者:

openssl pkcs8 -topk8 -inform PEM -in rsa_2048_private_key.pem -outform PEM –nocrypt -out pkcs8_rsa_2048private_key.pem

全部执行成功后,会生成如下文件,其中public_key.der和private_key.p12就是iOS需要用到的文件

1.从pfx格式的证书提取出密钥和证书

set OPENSSL_CONF=openssl.cnf

openssl pkcs12 -in my.pfx -nodes -out server.pem

openssl rsa -in server.pem -out server.key

openssl x509 -in server.pem -out server.crt

PEM格式的证书与DER格式的证书的转换

openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER

openssl x509 -in ca.cer -inform DER -out ca.pem -outform  PEM

几种典型的密码交换信息文件格式:

DER-encoded certificate: .cer, .crt

PEM-encoded message: .pem

PKCS#12 Personal Information Exchange: .pfx, .p12

PKCS#10 Certification Request: .p10

PKCS#7 cert request response: .p7r

PKCS#7 binary message: .p7b

.cer/.crt是用于存放证书,它是2进制形式存放的,不含私钥。

.pem跟crt/cer的区别是它以Ascii来表示。

pfx/p12用于存放个人证书/私钥,他通常包含保护密码,2进制方式

p10是证书请求

p7r是CA对证书请求的回复,只用于导入

p7b以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥

算法

base64不是加密算法,但也是SSL经常使用的一种算法,它是编码方式,用来把asc码和二进制码转来转去的。

openssl x509部分命令

打印出证书的内容:

openssl x509 -in cert.pem -noout -text

打印出证书的系列号

openssl x509 -in cert.pem -noout -serial

打印出证书的拥有者名字

openssl x509 -in cert.pem -noout -subject

以RFC2253规定的格式打印出证书的拥有者名字

openssl x509 -in cert.pem -noout -subject -nameopt RFC2253

在支持UTF8的终端一行过打印出证书的拥有者名字

openssl x509 -in cert.pem -noout -subject -nameopt oneline -nameopt -escmsb

打印出证书的MD5特征参数

openssl x509 -in cert.pem -noout -fingerprint

打印出证书的SHA特征参数

openssl x509 -sha1 -in cert.pem -noout -fingerprint

把PEM格式的证书转化成DER格式

openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER

把一个证书转化成CSR

openssl x509 -x509toreq -in cert.pem -out req.pem -signkey key.pem

给一个CSR进行处理,颁发字签名证书,增加CA扩展项

openssl x509 -req -in careq.pem -extfile openssl.cnf -extensions v3_ca -signkey key.pem -out cacert.pem

给一个CSR签名,增加用户证书扩展项

openssl x509 -req -in req.pem -extfile openssl.cnf -extensions v3_usr -CA cacert.pem -CAkey key.pem -CAcreateserial