0

CRMF (mozilla certificate request) を取得して PKCS#10 に似た CSR に変換する方法を理解するために、サンプル コードを作成しました。

Base 64 CRMFRequest を ASN1InputStream タイプとして取得しました。

CertReqMsg 型に変換します (Bouncycastle)

デバッグすると、CertReqMsg に公開鍵、サブジェクト (CN、O、OU など) などの別のデータがあることがわかりますが、さらに重要なのは、署名と AlgoritmIdentifier があることです。

しかし、オブジェクトにはゲッターがありません

署名を DERBitString として抽出するにはどうすればよいですか? CertificationRequest オブジェクトへのパラメーターとして使用する必要があります (必要に応じて CSR を返します)。

ちなみに、CertificationRequest には、パラメータとして CertificationRequestInfo オブジェクトが必要です。その内部 (CertificationRequestInfo ) で、パラメーターとして属性を受け取ります。この属性は次のようなものだと思います。

distributionPoint、通知、policyOID、subjectAlternativeNameDN

私はそれがで始まることを知っています

    ASN1Set attributes = null;
    attributes = new DERSet();

しかし、このパラメーターを埋める方法がわかりません

     CertificationRequestInfo info = new CertificationRequestInfo(subject, infoPublicKey, attributes);

いくつかの質問が明白に思われる場合は申し訳ありません...しかし、私は解決策を見つけることができません..

前もって感謝します

4

1 に答える 1

0

CRMF 形式を PKCS#10 CSR に変換することはできません。

CSR は次のように構成され、サブジェクトの秘密鍵によって署名されます。

CertificationRequest ::= SEQUENCE {
    certificationRequestInfo CertificationRequestInfo,
    signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }},
    signature BIT STRING
}

(基本的に、発行者と有効期限のない、自己署名 X.509 証明書に非常に似ています。)

CRMF リクエストを受け取った時点ではサブジェクトの秘密鍵を持っていないため、この署名を作成することはできません。

ある種の CA ソフトウェアを作成している場合、これは実際には必要ありません。CRMF 要求と CSR 要求の処理は、ほぼ同等です。いずれにせよ、CA は実際には CSR が望むことをやみくもに行うべきではありません。そのため、公開鍵と ID に関連付ける属性を別の方法で精査する必要があります。

于 2012-05-10T00:58:48.780 に答える