3

2.5.4.3=Name Surname, 1.2.300.38.22=12345678MS Crypto API を使用して、指定された SubjectDN 文字列 (例: ) から CSR を生成する作業プログラムがあります。関数CertStrToName()を使用してエンコードしますが、すべてが正常に機能していますが、1 つのことを除いて、すべての OID 値が ASN1 type で作成されますPrintableString

タイプの OID 1.2.300.38.22 を作成する方法はありますNumericStringか?

4

2 に答える 2

2

だから、私はそれを修正する2つの方法を見つけました:1.プログラムで、関数CryptEncodeObject()を使用する 2.私の暗号プロバイダーは特定のoidをサポートしているので、コードに触れずにCertStrToNameを使用できます。

于 2012-08-14T12:20:08.000 に答える
2

Microsoft の CertStrToName() メソッドは、RFC 4514 に準拠していません。#-encodings を AttributeValue-encodings として扱う代わりに、それらを OctetStrings にエンコードされる値として扱います。これは、CertStrToName メソッドからすべての識別名を生成できるわけではないことを意味します。特に、独自の識別名を生成することはできません。

識別名の文字列表現は、RFC 4514: String Representation of Distinguished Names のものです。

ここで、属性タイプがドット付き 10 進形式の場合、実際には属性値を としてエンコードし、#その後に ASN.1 AttributeValue の 16 進数で BER エンコードを行う必要があることがわかります。すなわち:

2.5.4.3=姓名、1.2.300.38.22=#12083132333435363738

次のCertStrToName()のドキュメントを読むこともできます。

番号記号 (#) で始まる値は、ASCII 16 進数として扱われ、CERT_RDN_OCTET_STRING に変換されます。埋め込まれた空白は無視されます。たとえば、1.2.3 = # AB CD 01 は 1.2.3=#ABCD01 と同じです。

于 2012-08-15T06:44:10.183 に答える