2016-08-10 15 views
0

私はBouncyCastleを使用して証明書を生成しています。 GeneralName.OtherNameにカスタムOid = 1.3.6.1.4.1.311.20.2.3(User Principal Name(UPN)の略)という件名の代替名の拡張子を追加しようとするまで、すべて正常に機能します。だから、結果は次のようにする必要があります: サブジェクトの別名セクション - > OtherName - >ユーザープリンシパル名=ユーザー@ドメインBouncycastleでサブジェクト代替名にカスタムOidを使用する

私はこのようにそれをやっている:

Asn1EncodableVector vector = new Asn1EncodableVector 
{ 
    new GeneralName(GeneralName.OtherName, 
        new KeySpecificInfo(new DerObjectIdentifier("1.3.6.1.4.1.311.20.2.3"), new DerOctetString(GetBytes("[email protected]")))) 
} 
DerSequence seq = new DerSequence(vector); 
GeneralNames subjectAltName = GeneralNames.GetInstance(seq); 
// Adding extension to X509V3CertificateGenerator 
certGen.AddExtension(X509Extensions.SubjectAlternativeName, false, subjectAltName); 

そして、それの後に、私は奇妙なシリアライズさを受け取ります作成された証明書のSubjectAlternativeNameセクションになります。 OtherNameセクションの追加が間違っているのは明らかですが、BouncyCastleのカスタムoidの追加に関する情報は見つかりませんでした。 アイデア

+0

JavaまたはC#どのバージョンのライブラリを使用していますか? –

+0

C#しかし、私もJavaを試してみました(それらの間にはいくつかの違いがあります)。 –

答えて

1

これは、C#のはBouncyCastleの証明書にもある:答えhereを発見

//Subject Alternative Name 
if (! (String.IsNullOrEmpty(_subjectAlternativeName))) { 
    //Here we signify ip address instead of DNS SAN. This could be condition upon further development. 
    GeneralNames subjectAltName = new GeneralNames(new GeneralName(GeneralName.IPAddress, _subjectAlternativeName)); 
    certificateGenerator.AddExtension(X509Extensions.SubjectAlternativeName, false, subjectAltName); 

} 
0

。それはJavaですが、C#のコードは事実上同じです。

ここはC#の私のバージョンです。

Asn1EncodableVector otherName = new Asn1EncodableVector(); 
otherName.Add(new DerObjectIdentifier("1.3.6.1.4.1.311.20.2.3")); 
otherName.Add(new DerTaggedObject(true, GeneralName.OtherName, new DerUtf8String(siteName))); 
Asn1Object upn = new DerTaggedObject(false, 0, new DerSequence(otherName)); 
Asn1EncodableVector generalNames = new Asn1EncodableVector(); 
generalNames.Add(upn); 

// Adding extension to X509V3CertificateGenerator 
certificateGenerator.AddExtension(X509Extensions.SubjectAlternativeName, false, new DerSequence(generalNames)); 
関連する問題