Minimales Beispiel für das Ganze
1.3.36.8.3.2 = ASN1:SEQUENCE:procuration [procuration] country = EXP:1, PRINTABLE:EN typeOfSubstitution = EXP:2, UTF8:My Type of Substitution thirdPerson = EXP:3, EXP:0, EXP:1, IA5:fred@example.com
Um einen Testfall zu erhalten, habe ich die folgende ASN.1- Wertnotation mit asn1-playground erstellt :
procuration ProcurationSyntax ::= { country "EN", typeOfSubstitution utf8String : "My Type of Substitution", signingFor thirdPerson rfc822Name : "fred@example.com" }
Ich habe dieses Schema verwendet .
[proc]
Achten Sie auf die verschiedenen Arten von Zeichenfolgen.
country
ist als PrintableString definiert (dies ist nur eine Teilmenge von IA5String):
country = EXPLICIT:1, PRINTABLE:EN
typeOfSubstitution
ist als DirectoryString definiert. Dies ist eine WAHL zwischen TeletexString, PrintableString, UniversalString, UTF8String oder BMPString - einige davon sind Teilmengen von IA5String, andere sind Supersets, der eigentliche IA5String ist jedoch nicht zulässig. Gehen wir also zu UTF-8 Unicode:
; ┌── tag for ProcurationSyntax sequence ; ¦ typeOfSubstitution = EXPLICIT:2, UTF8:My Type of Substitution
(Die Online-Version von asn1step besagt, dass es keinen eigenen Tag für DirectoryString gibt; ich denke, das liegt daran, dass alle möglichen Optionen bereits eindeutige 'universelle' Tags haben.)
Da signingFor
es sich um eine WAHL zwischen thirdPerson
vs handelt certRef
, können Sie die eine oder die andere Option verwenden. Es liegt an Ihnen, den geeigneten Typ auszuwählen.
thirdPerson
ist definiert als [0] GeneralName, was eine WAHL zwischen verschiedenen weiteren Typen ist - genau dieselbe Auswahl wie in der Erweiterung subjectAltName. Beispielsweise können Sie eine E-Mail-Adresse angeben (in Form von rfc822Name [1] IA5String):
; ┌── tag for ProcurationSyntax sequence ; │ ┌── tag for SigningFor choice ; │ │ ┌── tag for GeneralName choice ; ¦ ¦ ¦ thirdPerson = EXP:3, EXP:0, EXP:1, IA5:fred@example.com
Oder ein dNSName (definiert als [2] IA5String):
thirdPerson = EXP:3, EXP:0, EXP:2, IA5:example.com
(Oder ein anderer Name, der ein MPEG-Video eines Kätzchens enthält.)
Wenn Sie stattdessen eine auswählen möchten certRef
, ist dies eine ganze verschachtelte SEQUENCE.
; ┌── tag for ProcurationSyntax sequence ; │ ┌── tag for SigningFor choice ; ¦ ¦ certRef = EXP:3, IMP:1, SEQUENCE:proc_certref
[proc_certref]
Innerhalb des [proc_certref]
Abschnitts müssen Sie mindestens issuer
und definieren serial
.
issuer
ist GeneralNames, eine Folge von GeneralName-Werten.
issuer = IMP:0, SEQUENCE:proc_certref_issuer ; └── tag for IssuerSerial sequence
serial
is CertificateSerialNumber ist einfach eine ganze Zahl.
serial = IMP:1, INTEGER:0x123456
Hinweis: Ich bin sehr unsicher, ob diese implizite Tags enthalten sollen oder nicht.
[proc_certref_issuer]
Großartig. Ein weiterer Abschnitt und ein GeneralNames dazu . Zum Glück gibt es nur einen davon. Leider gibt es mehr als null davon.
Der einfachste gültige Wert wäre ein einzelner GeneralName, der nur ein rfc822Name oder ein dNSName (beide IA5String) ist:
issuer.0 = IMP:1, IA5:fred@example.com ; └── tag for GeneralName choice
… Eigentlich haben wir schon einmal einen verzeichnisnamen gemacht, oder? Da dies issuer.0
ein GeneralName ist, verwendet er dasselbe Format wie admissionAuthority
in Ihrer vorherigen Erweiterung (mit dem gleichen Tagging und allem), so dass ich nicht versuche, es hier erneut zu implementieren.