Openssl格式转换

来源:互联网 发布:免费国际长途电话软件 编辑:程序博客网 时间:2024/06/03 06:30

格式简介

Certificate 和 key 可以存成多种格式, 常见的有 DER , PEM , PFX

  • DER

    將 certificate 或 key 用 DER ASN.1 编码的原始格式, certificate 就是依照X.509的方式编码, key 則是又能分為PKCS#1 和PKCS#8

  • PEM

    把 DER 格式的 certificate 或 key 使用 base64-encoded编码后在头尾上资料标明档案类型

    Certificate
    -----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----

    RSA private key (PKCS#1)
    -----BEGIN RSA PRIVATE KEY----------END RSA PRIVATE KEY-----

    RSA public key (PKCS#1)
    -----BEGIN RSA PUBLIC KEY-----...-----END RSA PUBLIC KEY-----

    RSA private key (PKCS#8, key 沒加密 )
    -----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----

    RSA public key (PKCS#8)
    -----BEGIN PUBLIC KEY-----...-----END PUBLIC KEY-----

    RSA private key (PKCS#8, key 有加密 )
    -----BEGIN ENCRYPTED PRIVATE KEY-----...-----END ENCRYPTED PRIVATE KEY-----



  • PKCS#7



    这个格式用来传递签署或加密的资料,档案里可以包含整个用到的 certificate chain



  • PKCS#12 (PFX)



    这个格式可以把 private key和整个 certificate chain 存程一个档案


    格式转换


    openssl 预设输入输出的格式都是PEM, 要转换格式很简单,搭配 informoutform 参数就可以了


    Certificate PEM 转 DER
    openssl x509 -in cert.pem -outform der -out cert.der

    Certificate DER转 PEM
    openssl x509 -inform der -in cert.der -outform der -out cert.pem

    RSA key 的转换比较多一些, 有 private/public key, PKCS#1/PKCS#8, DER/PEM, 以下只都是用 PEM 格式, 要转成 DER 只要加入informoutform 参数就可以了

    输出 public key 指令

    certificate 输出
    openssl x509 -in cert.pem -pubkey -noout > public.pem

    从 private key 输出
    openssl rsa -in private.pem -pubout -out public.pem

    PKCS#1/PKCS#8转换
    openssl 有多个指令会产生 private key,genpkey会产生PKCS#8格式genrsa会产生PKCS#1格式,
    上面兩个输出 public key的指令都是PKCS#8格式

    Public key 格式转换,主要是搭配 RSAPublicKey_in,RSAPublicKey_out, 這兩个参数, rsa command的 help沒有显示这两个参数,说明文件才有

    Public key: PKCS#8 -> PKCS#1
    openssl rsa -pubin -in public.pem -RSAPublicKey_out -out public_pkcs1.pem

    Public key: PKCS#1 -> PKCS#8
    openssl rsa  -RSAPublicKey_in -in public_pkcs1.pem  -out public_pkcs8.pem

    也可以在从 private key 输出時直接设定输出格式
    openssl rsa -in private.pem -RSAPublicKey_out -out public_pkcs1.pem

    Private key 格式转换,主要是用pkcs8指令,搭配topk8参数作转换,若不加密就再加上nocrypt

    Private key: PKCS#1 -> PKCS#8
    openssl pkcs8 -in private_pkcs1.pem -topk8 -nocrypt -out private_pkcs8.pem

    Private key: PKCS#8 -> PKCS#1
    openssl pkcs8 -in private_pkcs8.pem -nocrypt -out private_pkcs1.pem
    用OpenSSL 0.9.8可以,之后的版本用pkcs8这个指令输出都是PKCS#8,這指令只是用於0.9.8


    用0.9.8之后的版本直接用rsa转换即可
    openssl rsa -in private_pkcs8.pem -out private_pkcs1.pem


    从PKCS#7 输出 certificate
    目前最常遇到的是 DOCSIS secure upgrade 用的 Code File, 前面會有一段 DER 编码的资料, 包含1~2张CVC
    openssl pkcs7 -in code.p7b -print_certs -out certs.pem


    从 PKCS#12(PFS)输出 certificate 和 private key
    openssl pkcs12 -in key_cert.pfx -nodes -out key_cert.pem
    打完指令会要求输入 pfx file 的密码,若上述指令没加入nodes,会再要求输入输出的 private key 要用的密碼

    把 private key 和 certificate 以及 CA 打包成 PKCS#12
    者功能我是用来制作 FreeRADIUS client 端,给 windows 用的懒人包,输入的 private key (client.key), certificate (client.crt), certificate-chain(cert-chain.crt) 都是用 PEM 格式
    openssl pkcs12 -export -out client.p12 -inkey client.key -in client.crt -certfile cert-chain.crt
    打完指令会要求输入 pfx file 的密码, 之後在 windows下直接开启 client.p12 敲完密码,下一步到底,凭证就会放到对的地方了


  • 0 0