https
PKCS全称是Public-Key Cryptography Standards
是由RSA实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准
PKCS目前共发布过15个标准(不确定)
符合为Public Key Infrastructure (PKI) 制定的ITU-T X509国际标准
SSL(Secure Sockets Layer 安全套接层)
及其继任者传输层安全(Transport Layer Security,TLS)
是为网络通信提供安全及数据完整性的一种安全协议
TLS与SSL在传输层对网络连接进行加密
由于私钥和证书可以以不同格式的存储,很多时候需要转换和查看
私钥和证书可以存在同一库文件中,也可以分开存储
per、dem是编码格式,它不仅仅是代表后缀名,而.crt和.cer是后缀名
大多数常用的编码格式及说明如下:
DER:二进制编码,常用后缀(.der .cer .crt)
包含X.509证书为原始格式,使用DER ASN.1编码。
PEM:ASCII编码(文本base64编码),常用后缀(.pem .cer .crt)
加密的私钥(除基本属性外)
以“-----BEGIN ENCRYPTED PRIVATE KEY-----”开头
以“-----END ENCRYPTED PRIVATE KEY-----”结尾
私钥(除基本属性外)
以“-----BEGIN PRIVATE KEY-----”开头
以“-----END PRIVATE KEY-----”结尾
证书(除基本属性外)
以“-----BEGIN CERTIFICATE-----”开头
以“-----END CERTIFICATE-----”结尾
PKCS#7:常用后缀(.p7b .p7c)
用于传输签名或加密数据,定义在RFC 2315中。
通常以.p7b和.p7c作为后缀且可以包含整个证书链。
这种格式被Java的keytool工具支持。
PKCS#12:常用后缀(.p12 .pfx)
可以存储完整的证书链,包括私钥、证书及证书密钥等。
常用于微软的产品,不过也可以用于客户端导入证书。
关于扩展名
.crt 仅存放证书时使用的后缀名,可以是pem或der编码
.cer 微软形式的后缀格式,可被ie等识别,和.crt后缀并没有什么区别
.key 用于PCSK#8的公钥和私钥,同样也以是pem或der编码
pem或der编码最简单的识别方法就是用记事本打开证书看下内容是否文本(pem非乱码)
使用keytool可生成p12格式证书
如果需要base64的X.509证书可在windows下可直接安装p12证书,安装后可在ie的中进行导出
internet选项 》 内容 》 证书 》 选中之前导入的证书进行导出cer格式
x.509证书包括两格格式:二进制(D)或Base64格式(S)的
############################################################
### 1、Keytool生成P12证书.bat
############################################################
rem keytool -genkey
rem -keystore E:\my_keystore 证书库路径,不写路径默认为当前脚本所有目录,里面可以放很多证书(这里网上很多地方都没说清楚)
rem -storetype PKCS12 证书类型,为了能导入至IE和Firefox,证书格式应该是PKCS12(这种类型的库不支持存储私钥),默认是jks
rem -storepass abc123456 证书库的密码
rem -alias mycert 证书名称“mycert”,这里指在证书库里放的其中一个证书
rem -keypass abc123 证书密码,PKCS12类型的库不支持私钥,可不设置,这里指在证书库里“web.p12”的密码,即私钥
rem -keyalg RSA 证书算法
rem -keysize 1024 证书长度
rem -validity 36500 证书有效期,单位天,36500表示100年,默认值是90天
rem -dname "CN=(名字与姓氏,实际填写的是IP或域名), OU=(组织单位名称), O=(组织名称), L=(城市或区域名称), ST=(州或省份名称), C=(单位的两字母国家代码)"
keytool -genkey -storetype PKCS12 -keystore my_keystore -storepass abc123456 -alias mycert -keypass abc123 -keyalg RSA -keysize 1024 -validity 36500 -dname "CN=127.0.0.1, OU=TEAM, O=WEB, L=GZ, ST=GD, C=CN"
pause
############################################################
### 2、P12证书转x.509二进制.bat
############################################################
keytool -keystore my_keystore -storepass abc123456 -export -alias mycert -file mycert.der
pause
############################################################
### 3、查看证书.bat
############################################################
rem 缺省情况下,-list 命令打印证书的 MD5 指纹。
rem 而如果指定了 -v 选项,将以可读格式打印证书。
rem 如果指定了 -rfc 选项,将以可打印的编码格式输出证书。
keytool -list -v -keystore my_keystore -storepass abc123456
pause
keytool -list -rfc -keystore my_keystore -storepass abc123456
pause
############################################################
### openssl转换
############################################################
1、使用openssl把PKCS12文件(my_keystore)转换成我们需要的pem文件(mycert.pem),该pem带私钥信息
openssl pkcs12 -in my_keystore -out mycert.pem -passin pass:abc123456 -passout pass:abc123456
2、分离各种格式文件
通常jks文件包含了服务器的私钥、客户端证书、CA证书
-nocerts(私钥:server.key)
-nokeys -clcerts(客户端/服务器证书:server.crt)
-nokeys -cacerts(CA证书:ca.crt)
openssl pkcs12 -in my_keystore -nodes -nocerts -out server.key
openssl pkcs12 -in my_keystore -nodes -nokeys -clcerts -out server.crt
openssl pkcs12 -in my_keystore -nodes -nokeys -cacerts -out ca.crt
3、格式转换,该转换不带私钥信息
PEM转为DER:
openssl x509 -in mycert.pem -inform pem -outform der -out mycert.der
DER转为PEM:
openssl x509 -in mycert.der -inform der -outform pem -out mycert.pem