• 数字签名证书的事儿


    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

      

  • 相关阅读:
    Centos设置阿里云yum源
    十大排序算法之Java实现
    什么是DFS和BFS?
    计算机专业技能-Java专项练习
    Lamda 表达式
    JavaWeb实现分页的四种方法
    Linux 常用关机命令及其比较
    Chocolatey常用命令
    JAVA++:JAVA中try、catch、finally带return的执行顺序
    MySQL++:MySQL 多行数据合并 GROUP_CONCAT
  • 原文地址:https://www.cnblogs.com/frankb/p/7521775.html
Copyright © 2020-2023  润新知