1.证书和编码
X.509 这是一种证书标准,主要定义了证书中应该包含哪些内容,其详情可以参考RFC5280,SSL使用的就是这种证书标准
2.X509 File Extensions
2.1 编码格式:
同样的X.509证书,可能有不同的编码格式,目前有以下两种编码格式,
a. PEM ---Privacy Enhanced Mail, 打开看文本格式,以"-----BEGIN...."开头,"------END......" 结尾,内容是BASE64编码.
b。 DER --Distinguished Encoding Rules, 打开看是二进制格式, 不可读,Proper English usage would be “I have a DER encoded certificate” not “I have a
DER certificate”.
2.2 相关的扩展名
虽然知道有PEM和DER这两种编码格式,但文件扩展名不一定就叫“PEM” 或者”DER“, 常见的扩展名除了PEM和DER还有以下这些,它们除了编码格式可能不同之外,内容也有差别,但大多数都能相互转换
a. CRT ---certificate 的三个字母,其实还是证书的意思,常见于*NIX系统,有可能是PEM编码,也有可能是DER编码,大多数是PEM编码
b. CER --还是certificate,还是证书,常见于Windows 系统, 同样的,可能是PEM编码,也可能是DER编码,大多数是DER编码, CER & CRT 几乎是同义词
c. KEY-- 通常用来存放一个公钥或者私钥,并非X.509证书, 编码同样的,可能是PEM,也可能是DER
查看KEY的方法: openssl rsa -in mykey.key -text -noout
如果是DER格式的话,同理应该这样了: openssl rsa -in mykey.key -text -noout -inform der
d.CSR --Certificate Signing Request, 即证书签名请求,这个并不是证书, 而是向权威证书颁发机构获得签名证书的申请,其核心内容是一个公钥,在生成这个申请的时候,同时也会生成一个私钥,私钥自己保存好
查看到办法: openssl req -noout -text in my.csr(如果是DER格式的话就加上 -inform der )
e.PFX/P12--predecessor of PKCS#12,对*nix服务器来说,一般CRT和KEY是分开存放在不同文件中的,但是windows的IIS则将它们存在一个PFX文件中,(因此这个文件包含了证书以及私钥,通常也很安全,因为当你要读取里面的东西的 话,需要提供密码),将P12转化为PEM编码
openssl pkcs12 -in *.p12 -out *.pem -nodes [-password pass:yourpassword]
反向生成p12: openssl pkcs12 -export -in cetificate.crt -inkey private.key -out certificate.p12 -certifile CACert.crt
其中CACert.crt 是CA(权威证书颁发机构)的根证书,有的话也通过-certfile参数一起带进去。
f. JKS: Java Key Storage,这是Java的专利,跟OpenSSL关系不大,利用java的一个叫“keytool”的工具。
2.3 View PEM 编码的证书
openssl x509 -in cert.pem -text -noout
openssl x509 -in cert.cer -text -noout
openssl x509 -in cert.crt -text -noout
2.4 View DER 编码的证书
openssl x509 -in certificate.der -inform der -text -noout
2.5 PEM 转换为DER
openssl x509 -in cert.crt -outform der -out cert.der
2.6 DER 转换为PEM
openssl x509 -in cert.crt -inform der -outform pem -out cert.pem
提示:要转换KEY文件也类似,只不过把x509换成rsa, 要转CSR的话,把x509换成req
3.获得证书,两种工具keytool,openssl
3.1 keytool 的使用方法
keytool 是java自带的一种工具,在JDK1.4以后都包含了这一工具
引用自 http://blog.csdn.net/wzyzzu/article/details/44746385
3.11.创建证书
keytool -genkeypair -alias "test1" -keyalg "RSA" --keystore "test.keystore"
创建了一个别名为test1的证书条目,该条目存放在名为 test.keystore 的密钥库中,若test.keystore 密钥库不存在则创建.
参数说明;
-genkeypair:生成一对非对称密钥;
-alias:指定密钥对的别名,该别名是公开的;
-keyalg:指定加密算法,本例中采用通用的RAS加密算法;
-keystore 密钥库的路劲及名称,不指定的话,默认在操作系统的用户目录下生成一个".keystore"的文件
注意: 名字和姓氏应该是域名,而不是姓名
3.12. 查看证书
keytool --list -keystore test.keystore
3.13. 导出到证书文件
keytool -export -alias test1 -file test.crt -keystore test.keystore
将名为test.keystore 的证书库中别名为test1d的证书条目导出到证书文件test.crt 中
3.14.导入证书的信息
keytool -import -keystore test_cacerts -file test.crt
将证书文件test.crt 导入到名为 test_cacerts 的证书库中
3.15.查看证书信息
keytool -printcert -file "test.crt"
查看证书文件test.crt 的信息
3.16. 删除密钥库中的条目
keytool -delete -keystore test.keystore -alias test1
3.17.修改证书条目的口令
keytool -keypasswd -alias test1 -keypass testtesttest1 -new testtest1 -storepass testtest -keystore test.keystore
将密钥库test.keystore 中别名为test1的证书条目的密码修改为testtest1
keytool -keypasswd -alias test1 -keystore test.keystore(交互式修改)
删除密钥库test.keystore中别名为test1的证书条目
3.2 openssl 使用方法
简单地说,OpenssL是SSL的一个实现,SSL只是一种规范, 理论上来说,SSL这种规范是安全的,目前的技术水平很难破解,但SSL的实现就可能有些漏洞,
如著名的“心脏出血”,OpenSSL还提供了一大堆强大的工具软件
向权威证书颁发机构申请证书
用这个命令生成一个csr: openssl req -newkey rsa:2048 -new -nodes -keyout my.key -out.csr
把csr交给权威证书颁发机构,权威证书颁发机构对此进行签名,完成,保留好csr,当权威证书颁发机构颁发的证书过期的时候,可以用同样的csr来申请新的证书, 可以保持不变
或者生成自签名证书:
openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem
3.3 keytool 和 openssl的区别和转换
keytool 不支持导出私钥,java只能使用密钥库(jks)中包含的证书/密钥,这些证书和密钥是使用keytool生成的,而不是openssl。
keytool和Openssl生成的证书之间无法识别,keytool生成的为jks文件,openssl默认生成的为PEM格式文件,两者之间需要转换,
首先需要转换为 pkcs12 格式,然后在使用对方的命令去转换成需要的格式
PEM格式的证书转换为jks格式的证书
PME---->pkcs12--->jks
openssl pkcs12 -export -in public.crt -inkey private.pem -out serer.p12 -name server -passin pass:${passwd} -passout pass:${passwd}
keytool -importkeystore -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass ${Passwd} -alias server -deststorepass ${passwd} -destkeystore ServerCert.jks
Comodo 测试证书是否安装成功
https://sslanalyzer.comodoca.com/?url=domainname.com