certificate keytool openssl

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编码

[-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以后都包含了这一工具

引用自

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