2017-12-20 5 views
5

Ich versuche, cert für Elasticsearch Searchguard zu erstellen. Eine Voraussetzung ist, dass das Zertifikat oid:1.2.3.4.5.5 in SANs enthalten muss. Ich verwende GO, um dieses Zertifikat zu generieren. Nach einigem Versuch und Irrtum habe ich herausgefunden, dass, wenn ich []byte{0x88, 0x05, 0x2A, 0x03, 0x04, 0x05, 0x05} als Raw ASN.1 Bytes verwende, dies in SANs oid:1.2.3.4.5.5 wird. Ich möchte verstehen, wie diese Bytes den Wert oid:1.2.3.4.5.5 darstellen. Ich habe this gelesen, aber ich bin immer noch verwirrt. Kannst du mir helfen zu verstehen, wie dieses [] Byte oid:1.2.3.4.5.5 darstellt?Wie parsen Sie die Bytes?

Antwort

5

Meist übertölpeln How does ASN.1 encode an object identifier?

Die Codierung des (X.509 = PKIX) SAN-Erweiterung Wert in rfc5280 ist definiert als:

SubjectAltName ::= GeneralNames 
GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName 
GeneralName ::= CHOICE { // tags implicit 
    otherName     [0] AnotherName, 
    rfc822Name    [1] IA5String, 
    dNSName     [2] IA5String, 
    x400Address    [3] ORAddress, 
    directoryName    [4] Name, 
    ediPartyName    [5] EDIPartyName, 
    uniformResourceIdentifier [6] IA5String, 
    iPAddress     [7] OCTET STRING, 
    registeredID    [8] OBJECT IDENTIFIER } 

für diese Wahl, Ihre erste Oktett 0x88 ist der Wert-Tag für kontextspezifische # 8 (dh registrierteID) und Ihr zweites Oktett 0x05 ist die Länge des Wertes, der als 0x2A 0x03 0x04 0x05 0x05 codiert ist.

BER-Codierung: Da dieser Wert eine Objektkennung ist, wird in dem Abschnitt über Codierung unter OBJECT IDENTIFIER im Kaliski Dokument aussehen zu dekodieren. Primitiv. Inhalt Bytes sind wie folgt, wobei Wert1, ..., valueN die ganzzahligen Werte der Komponenten in der vollständige Objektkennung bezeichnen:

  1. Das erste Oktett Wert 40 * Wert1 + Wert2 hat. (Dies ist unzweideutig, da Wert1 auf Werte 0, 1 und 2 begrenzt ist; Wert2 ist begrenzt auf den Bereich 0 bis 39, wenn Wert1 0 oder 1 ist; und gemäß X.208 ist n immer mindestens 2 .)

  2. Die folgenden Oktette, falls vorhanden, kodieren Wert3, ..., Wert. Jeder Wert ist die codierte Basis 128, die höchstwertige Stelle zuerst, mit so wenig Ziffern wie möglich, und das höchstwertige Bit jedes Oktetts außer der letzte in der Codierung des Wertes ist auf "1" gesetzt.

Der erste Wert Oktett 0x2A dezimal 42 und 42 = 40 * 1 + 2, so dass die ersten beiden Komponenten der OID wird, sind 1 und 2. Alle verbleibenden Oktette müssen nicht ihre Meist signifikantes Bit gesetzt, so dass sie jeweils eine Komponente kodieren: 3 4 5 5. Die OID bestehend aus den Komponenten 1 2 3 4 5 5 ist in der üblichen Kurzschreibweise 1.2.3.4.5.5 (es gibt jedoch andere äquivalente Schreibweisen wie in Kaliski gezeigt) .

Übrigens ist diese OID ungültig, weil sie unter dem Mitgliedsland des Landes mit ISO3166 numerischen Code 3 sein müsste, und es gibt kein solches Land.

+0

Vielen Dank für die Erklärung @ dave_thompson_085! – codefx

Verwandte Themen