• 常见的数字证书格式与格式转换


     

    常见的数字证书格式

    CER后缀的证书文件有两种编码:第一种是DER二进制编码,第二种是:ASE64编码(也就是.pem) 
    p7b一般是证书链,里面包括1个到多个证书 
    pfx是指以pkcs#12格式存储证书的公钥和相应私钥。 

    在Security编程中,有几种典型的密码交换信息文件格式: 
    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是用于存放证书,它是二进制形式存放的,不含私钥。 
    .pem跟crt/cer的区别是它以Ascii 来表示。 
    pfx/p12用于存放个人证书/私钥,他通常包含保护密码,二进制方式 
    p10是证书请求 
    p7r是CA对证书请求的回复,只用于导入 
    p7b以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥。 

    其中,我介绍如何从p12/pfx文件中提取密钥对及其长度: 
    1、首先,读取pfx/p12文件(需要提供保护密码) 
    2、通过别名(Alias,注意,所有证书中的信息项都是通过Alias来提取的)提取你想要分析的证书链 
    3、再将其转换为一个以X509证书结构体 
    4、提取里面的项,如果那你的证书项放在第一位(单一证书),直接读取 x509Certs[0](见下面的代码)这个X509Certificate对象 
    5、 X509Certificate对象有很多方法,tain198127网友希望读取RSA密钥(公私钥)及其长度(见 http://www.matrix.org.cn/thread.shtml?topicId=43786&forumId=55& amp;#reply),那真是太Easy了, 
    X509Certificate keyPairCert = x509Certs[0]; 
    int iKeySize = X509CertUtil.getCertificateKeyLength(keyPairCert); 
    System.out.println("证书密钥算法="+keyPairCert.getPublicKey().getAlgorithm()); 
    System.out.println("证书密钥长度="+iKeySize); 
    提取了他所需要的信息。 

    X.509定义了两种证书:公钥证书和属性证书   
    PKCS#7和PKCS#12使用的都是公钥证书   
    PKCS#7的SignedData的一种退化形式可以分发公钥证书和CRL   
    一个SignedData可以包含多张公钥证书   
    PKCS#12可以包含公钥证书及其私钥,也可包含整个证书链   

    PFX文件转换为JKS文件

    使用JWSDP工具包中的工具

    安装J2SE 1.5,下载并运行jdk-1_5_0_09-windows-i586-p.exe 下载并安装jave web service develop pack, jwsdp-2_0-windows-i586.exe 创建一个新的keystore文件,里面的别名取做TEMP

    keytool -genkey -alias temp -keyalg RSA -keystore server.jks

    准备好要导入的PFX文件,server.pfx,运行:

    C:Sunjwsdp-2.0xws-securityinpkcs12import.bat pkcs12import -file server.p12 -alias server -keystore server.jks

    查看server.jks 里面的证书记录:

    keytool -list -v -keystore server.jks

    JKS文件转换为PFX文件

    通过jks2pfx工具

    请下载:JKS2PFX转换工具。 将压缩包解开到 c:jks2pfx 目录下, 运行以下命令:
    JKS2PFX <导出文件名> [Java Runtime的目录]
    备注:
    KeyStore文件:指Tomcat保存SSL证书的文件
    KeyStore密码:KeyStore文件对应的密码
    Alias别名:  生成证书CSR时,所起的Alias别名
    导出文件名: 准备导出的文件名称 (不要带扩展名)
    Java Runtime的目录(可选): 指包含Java.exe和keytool.exe的目录,如:c:progra~1Javajre1.5.0_06in

    例如:
    JKS2PFX server.jks 123456 tomcat exportfile c:progra~1Javajre1.5.0_06in
    该命令将server.jks中别名为tomcat的SSL证书导出,运行后将产生3个文件 exportfile.key、exportfile.crt、exportfile.pfx,exportfile.pfx可以导入到微软的IIS 中,exportfile.key和exportfile.crt 可用于Apache或者OpenSSL兼容的系统。 可以用下面命令查看PFX文件内容:
    openssl pkcs12 -info -in exportfile.pfx

    PFX文件转换为X509证书文件和RSA密钥文件

    通过Openssl命令行

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

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

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

    总结: 

    1)P12格式的证书是不能使用keytool工具导入到keystore中的 

    2)The Sun's PKCS12 Keystore对从IE和其他的windows程序生成的pfx格式的证书支持不太好. 

    3)P7B证书链不能直接导入到keystore,需要将里面的证书导出成cer格式,再分别导入到keystore。

  • 相关阅读:
    leetcode931
    leetcode1289
    leetcode1286
    poj Meteor Shower
    noip杂题题解
    noip2007部分题
    NOIP Mayan游戏
    某模拟题题解
    codevs 1423 骑士
    noip 邮票面值设计
  • 原文地址:https://www.cnblogs.com/cioliuguilan/p/5525845.html
Copyright © 2020-2023  润新知