Próbuję utworzyć certyfikat dla Elasticsearch Searchguard. Jednym z wymogów jest to, że certyfikat musi zawierać oid:1.2.3.4.5.5
w sieciach SAN. Używam GO do wygenerowania tego certyfikatu. Po kilku próbach i błędach zorientowałem się, że jeśli użyję []byte{0x88, 0x05, 0x2A, 0x03, 0x04, 0x05, 0x05}
jako Raw ASN.1 bytes, zmieni się to w oid:1.2.3.4.5.5
w SAN. Chcę zrozumieć, jak te bajty reprezentują wartość oid:1.2.3.4.5.5
. Przeczytałem this, ale nadal jestem zdezorientowany. Czy możesz mi pomóc zrozumieć, jak ten bajt [] reprezentuje oid:1.2.3.4.5.5
?Jak analizować DER bajtów?
Odpowiedz
Głównie dupe How does ASN.1 encode an object identifier?
kodowania wartości (X.509 = PKIX) św abonenta wewnętrznego jest zdefiniowane w rfc5280 jak:
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 }
ich wyboru, twój pierwszy oktet 0x88 jest wartość tag dla specyficznego dla kontekstu numeru 8 (oznaczającego registeredID), a drugi oktet 0x05 to długość wartości, która jest zakodowana jako 0x2A 0x03 0x04 0x05 0x05. Ponieważ ta wartość jest identyfikatorem obiektu, aby zdekodować wyglądać na odcinku o kodowaniu pod PRZEDMIOT identyfikator w dokumencie Kaliski:
kodowanie BER. Prymitywny. Zawartość oktetów jest następujący, wartosc1, ..., wartośćn oznaczają wartości całkowite składników w identyfikatorze pełnego obiektu:
Pierwszy oktet ma wartość 40 * Value1 + wartość2. (Jest to jednoznaczne, ponieważ wartość 1 jest ograniczona do wartości 0, 1 i 2, wartość 2 to ograniczona do zakresu od 0 do 39, gdy wartość 1 wynosi 0 lub 1, a zgodnie z X.208, n wynosi zawsze co najmniej 2 .)
Następujące oktety, jeśli istnieją, kodują wartość3, ..., wartość. Każda wartość jest kodowana jako podstawa 128, najważniejsza cyfra pierwsza, z jak najmniejszą liczbą cyfr , a najbardziej znaczący bit każdego oktetu oprócz jest ostatnim z zestawu kodowania wartości ustawionego na "1."
Wartość oktet pierwszy 0x2a jest dziesiętna 42 do 42 = 40 * 1 + 2, tak że pierwsze dwa składniki OID to 1 i 2. Każdy z pozostałych oktetów nie mają MOST znaczący zestaw bitów, więc każdy koduje jeden składnik: 3 4 5 5. OID składający się ze składników 1 2 3 4 5 5 jest w zwykłym tekście skrótowym 1.2.3.4.5.5 (ale istnieją inne równoważne zapisy, jak pokazano w Kaliski) .
Nawiasem mówiąc, ten OID jest nieważny, ponieważ musiałby on znajdować się w ramach instytucji członkowskiej kraju z kodem numerycznym ISO3166 i nie ma takiego kraju.
- 1. Jak przekonwertować ciąg z PEM Der formatu
- 2. Jak odszyfrować łańcuch kodowany DER w Javie?
- 3. Konwersja certyfikat .pem do .der/.cer
- 4. Jak analizować plik .hprof?
- 5. Jak analizować jsonp PHP
- 6. Jak analizować rdzeń zrzutowy
- 7. Jak analizować plik dtd
- 8. Jak analizować przestrzeń PermGen?
- 9. Jak analizować wzór PCRE?
- 10. Jak mogę uzyskać SecKeyRef z pliku DER/PEM
- 11. Jak nie analizować w ElasticSearch?
- 12. Jak analizować JSON w int?
- 13. Jak analizować kod źródłowy Blendera
- 14. Jak analizować częściowy kod HTML?
- 15. Jak analizować YAML w przeglądarce?
- 16. Jak analizować HTML w PHP?
- 17. Jak analizować tego typu wyrażeń?
- 18. Redis: Jak analizować listy wyników
- 19. Jak analizować JSON strumień wejściowy
- 20. Jak szybko analizować listę ciągów
- 21. Jak analizować dane linii MICR?
- 22. Jak analizować czas działania programu
- 23. Jak analizować tę odpowiedź Flickr?
- 24. Jak podzielić tablicę bajtów
- 25. ftp wysyłając strumień bajtów bajtów
- 26. Wyodrębnij klucz publiczny z certyfikatu w formacie DER
- 27. Szyfrowanie C#, pliki .der i pem jako dane wejściowe
- 28. Próbując analizować ten sql
- 29. Usuwanie pierwszych 16 bajtów z tablicy bajtów
- 30. Python regex analizować strumień
Wielkie dzięki za wyjaśnienie @ dave_thompson_085! – codefx