从私有模数创建PEM,pfx,...

时间:2014-02-27 19:46:08

标签: openssl rsa pki pem pfx

当我要求私钥时,我从一些遗留系统收到以下内容: MODULUS,PUBLIC EXP,PRIVATE EXP,PRIME_P,PRIME_Q,PARAM_P,PARAM_Q,Q_MOD_INV

所有这些数据都是十六进制,我如何将其转换为openssl PEM文件或PFX?

谢谢你,最诚挚的问候!

1 个答案:

答案 0 :(得分:3)

使用openssl:

生成RSA密钥
openssl genrsa -out rsa.pem 2048

将RSA密钥从PEM格式转换为DER格式:

openssl rsa -inform PEM -in rsa.pem -outform DER -out rsa.der

ASN.1 Editor中打开文件rsa.der:

File rsa.der opened in ASN.1 Editor

RSA私钥的ASN.1结构在PKCS#1(RFC 3447)中定义:

  RSAPrivateKey ::= SEQUENCE {
      version           Version,
      modulus           INTEGER,  -- n
      publicExponent    INTEGER,  -- e
      privateExponent   INTEGER,  -- d
      prime1            INTEGER,  -- p
      prime2            INTEGER,  -- q
      exponent1         INTEGER,  -- d mod (p-1)
      exponent2         INTEGER,  -- d mod (q-1)
      coefficient       INTEGER,  -- (inverse of q) mod p
      otherPrimeInfos   OtherPrimeInfos OPTIONAL
  }

在ASN.1编辑器中编辑必填字段(右键单击该项目并选择“以十六进制模式编辑”)并按照此映射粘贴数据:

  MODULUS = modulus
  PUBLIC EXP = publicExponent
  PRIVATE EXP = privateExponent
  PRIME_P = prime1
  PRIME_Q = prime2
  PARAM_P = exponent1
  PARAM_Q = exponent2
  Q_MOD_INV = coefficient

根据评论进行编辑:私钥的各个部分是大整数。当值的最左边的位为1(或最左边的字节等于或大于0x80)时,需要将0x00字节预先添加到该值以指示它是正数。

最后保存修改后的文件,并使用openssl:

将其从DER格式转换为PEM格式
openssl rsa -inform DER -in rsa.der -outform PEM -out rsa.pem