Błąd SSL - nie można odczytać certyfikatu serwera z pliku

37

Skonfigurowałem dziś protokół SSL dla mojej domeny i napotkałem inny problem - miałem nadzieję, że ktoś rzuci trochę światła na ...

Ciągle otrzymuję następujące komunikaty o błędach:

[błąd] Init: Nie można odczytać certyfikatu serwera z pliku /etc/apache2/domain.com.ssl/domain.com.crt/domain.com.crt
[błąd] Błąd biblioteki SSL: 218529960 błąd: 0D0680A8: procedury kodowania asn1: ASN1_CHECK_TLEN: zły tag
[błąd] Błąd biblioteki SSL: 218595386 błąd: 0D07803A: procedury kodowania asn1: ASN1_ITEM_EX_D2I: zagnieżdżony błąd asn1

Korzystam z Apache 2.2.16 i Ubuntu 10.10. Mój plik .crt ma znaczniki Begin i End i został skopiowany dokładnie z e-maila z potwierdzeniem, który otrzymałem, bardzo frustrujące!

Twoje zdrowie!

Edytuj >> Podczas próby sprawdzenia .crt Wygląda na to, że nie działa:

>> openssl x509 -noout -text -in domain.com.crt 
nie można załadować certyfikatu
16851: błąd: 0906D06C: Procedury PEM: PEM_read_bio: brak wiersza początkowego: pem_lib.c: 650: Oczekiwanie: ZAUFANY CERTYFIKAT

Również >>

>> openssl x509 -tekst -inform PEM -w domenie.com.crt
nie można załadować certyfikatu
21321: błąd: 0906D06C: Procedury PEM: PEM_read_bio: brak linii początkowej: pem_lib.c: 650: Oczekiwanie: ZAUFANY CERTYFIKAT
>> openssl x509 -tekst -inform DER -w domenie.com.crt
nie można załadować certyfikatu
21325: błąd: 0D0680A8: Procedury kodowania asn1: ASN1_CHECK_TLEN: zły tag: tasn_dec.c: 1316:
21325: błąd: 0D07803A: Procedury kodowania asn1: ASN1_ITEM_EX_D2I: zagnieżdżony błąd asn1: tasn_dec.c: 380: Type = X509

Edytuj >> (Przy okazji, okrzyki pomocy)

>> grep '^ -----' domain.com.crt
----- ROZPOCZNIJ CERTYFIKAT -----
----- KONIEC CERTYFIKATU -----

Właśnie wysłałem e-mail do firmy dostarczającej certyfikat, odpowiedzieli>

Sprawdziłem podany plik CSR i zapewniam, że został on poprawnie wygenerowany. Występujący obecnie błąd jest spowodowany, ponieważ używasz niewłaściwego wiersza polecenia do zainstalowania CSR. Konieczne będzie zmodyfikowanie tej domeny.com.crt z wiersza polecenia zgodnie z odpowiednią nazwą domeny.

  • obecnie konfiguracja crt to mysite.com.crt - jako przykład użyłem domain.com.crt
williamsowen
źródło
Czy możesz nam pokazać wyniki grep '^-----' domain.com.crt?
kwanty
Williamsowen, cały punkt certyfikatu ma być pokazany każdemu, kto łączy się z twoim serwerem; to nie jest prywatna sprawa. Biorąc to pod uwagę, czy zastanowiłbyś się nad załączeniem lub opublikowaniem całego certyfikatu tutaj, abyśmy mogli spojrzeć na niego bezpośrednio, zamiast zgadywać?
MadHatter obsługuje Monikę
Poczekaj, widzę, że właśnie zaakceptowałeś moją odpowiedź. Czy to oznacza, że ​​przyczyną były problemy z terminalowymi oknami systemu Windows?
MadHatter obsługuje Monikę
MadHatter - przepraszam! Nowość w tym, ale właśnie to działa, formatowanie z otrzymanego e-maila było wyłączone, nie mogłem wam wystarczająco podziękować!
williamsowen

Odpowiedzi:

49

Czy to możliwe, że linie są zakończone ^ M? Jest to potencjalny problem podczas przenoszenia plików z systemu Windows na systemy UNIX. Jednym łatwym sposobem sprawdzenia jest użycie viw trybie „pokaż mi plik binarny” vi -b /etc/apache2/domain.ssl/domain.ssl.crt/domain.com.crt.

Jeśli każda linia kończy się klawiszem sterującym-M, to tak

-----BEGIN CERTIFICATE-----^M
MIIDITCCAoqgAwIBAgIQL9+89q6RUm0PmqPfQDQ+mjANBgkqhkiG9w0BAQUFADBM^M
MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg^M
THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wOTEyMTgwMDAwMDBaFw0x^M

masz plik w formacie Windows zakończonym wierszem, a apache go nie lubi.

Dostępne opcje obejmują przeniesienie pliku ponownie, zwracając większą uwagę; lub za pomocą dos2unixpolecenia, aby je usunąć; możesz również usunąć je w vi, jeśli jesteś ostrożny.


Edycja : dzięki @ dave_thompson_085, który zwraca uwagę, że ta odpowiedź nie ma już zastosowania w 2019 r. Oznacza to, że Apache / OpenSSL są teraz tolerancyjne wobec linii zakończonych ^ M, więc nie powodują problemów. To powiedziawszy, inne błędy formatowania, których kilka różnych przykładów pojawiają się w komentarzach, mogą nadal powodować problemy; sprawdź je dokładnie, czy certyfikat został przeniesiony między systemami.

MadHatter obsługuje Monikę
źródło
Dla mnie był to błąd kopiowania i wklejania, z pominięciem pierwszych kilku znaków nagłówka -----BE... Dziękujemy za inspirację do dwukrotnego sprawdzenia!
cfi
Dzięki, to był mój problem! W Notatniku ++ w systemie Windows można użyć okna dialogowego konwersji EDIT-EOL, aby zmienić ustawienie prawidłowego formatu LF. I możesz użyć menu View-Show Symbol, aby faktycznie zobaczyć zakończenia linii Windows CR LF.
Bjørn
1
Mój certyfikat po prostu okazał się pustym plikiem. Coś się zepsuło w pokoleniu. Ta odpowiedź zachęciła mnie do jej otwarcia i zobaczenia.
flickerfly
Uwaga dla użytkowników systemu Windows: Prawdopodobnie będziesz musiał przekonwertować format linii na system UNIX, nawet jeśli korzystasz z systemu Windows. DOS2UNIX to nie polecenie systemu Windows, ale Linux. Dobra wiadomość, Git na Windowsa to zapewnia. CigWin też prawdopodobnie tak robi, ale nie jest tego pewien.
Ignacio Segura,
Uwaga dla użytkowników systemu Windows: lista uprawnień w zakładce Właściwości / Bezpieczeństwo Eksploratora Windows zostaje pomieszana po skopiowaniu pliku z ograniczonymi uprawnieniami z udziału sieciowego z cp Cygwina. Na przykład widziałem „NUL SID”, wyłączone wpisy Wszyscy i użytkownicy domeny.
węgorz ghEEz
19

Dla każdego, kto dotrze na tę stronę z podobnym błędem podczas próby odczytania Żądania podpisania certyfikatu (CSR) (zauważ, że OP czyta certyfikat): upewnij się, że używasz właściwej komendy OpenSSL. x509dotyczy certyfikatów i reqCSR:

openssl req -in server.csr -text -noout

vs

openssl x509 -in server.crt -text -noout
Martijn de Milliano
źródło
17

Po prostu krążyłem w kółko w tej sprawie i okazało się, że mam certyfikaty w niewłaściwy sposób - np

SSLCertificateFile    /etc/apache2/ssl/server.key
SSLCertificateKeyFile /etc/apache2/ssl/server.crt

zamiast:

SSLCertificateFile    /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key

Coś do sprawdzenia, czy pojawia się ten błąd.

Adrian Macneil
źródło
11
>> openssl x509 -noout -text -in domain.com.crt 
unable to load certificate
16851:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:650:Expecting: TRUSTED CERTIFICATE

Podejrzewam, że masz problem z formatem certyfikatu.

Uruchom oba następujące polecenia i przekaż nam dane wyjściowe:

openssl x509 -text -inform DER -in domain.com.crt 
openssl x509 -text -inform PEM -in domain.com.crt 
kwanty
źródło
Dziękuję za tę odpowiedź. Byłem w stanie określić format, w którym moje SA jako „.cer” były już „.pem” incognito
javafueled
10

W moim przypadku mój certyfikat miał różne znaki „-”. Musiał to być problem kopiowania / wklejania przez administratora, który umieścił certyfikat na serwerze, z zastąpieniem edytora tekstu - po drodze specjalnym znakiem Unicode.

Diagnozowanie zajęło wiele godzin, w końcu po prostu zgadłem i edytowałem certyfikat w vi, usunąłem istniejące znaki „-” i przepisałem je ponownie.

Mam nadzieję, że to komuś pomoże.

Scott Davey
źródło
8

W moim przypadku napotkałem błędy OP, ponieważ ktokolwiek stworzył dla mnie plik .crt, naprawdę stworzył plik w formacie .PEM i nazwał go .crt.

Odkryłem to, uruchamiając następujący pomocny przewodnik: https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how -to-przekonwertować je

wszystko, co musiałem zrobić, to zmienić nazwę mojego .crt na .pem i skończyłem! Przewodnik wskazał, że błędy w pytaniu PO oznaczają, że plik wejściowy jest już sformatowany w formacie PEM, więc próba konwersji go do formatu .pem z formatu DER nie jest możliwa i jest w rzeczywistości niepotrzebna.

Freya301
źródło
4

Upewnij się, że w pliku certyfikatu nie ma spacji końcowych ani początkowych. Ostrożnie upewnij się, że w pliku certyfikatu nie ma spacji ani pustych miejsc, zaznaczając cały tekst i szukając pustych miejsc w edytorze tekstowym.

Sprawdź także, czy rzeczywiście wszystkie skonfigurowane pliki istnieją i są poprawne.

Np .: w innym poście mówisz, że plik .key nazywa się moja domena.com.crt, podczas gdy w konfiguracji hosta masz domenę.com.com.crt

SSLCertificateFile /etc/apache2/domain.ssl/domain.ssl.crt/domain.com.crt
SSLCertificateKeyFile /etc/apache2/domain.ssl/domain.ssl.key/domain.com.key
SSLCertificateChainFile /etc/apache2/domain.ssl/ca.crt
SSLCACertificateFile /etc/apache2/domain.ssl/gs_intermediate_ca.crt

Sprawdź ponownie, czy wszystkie powyższe pliki naprawdę istnieją i są prawidłowe.

George Tasioulis
źródło
1
Sprawdź także, czy kreski są kreskami. Microsoftian edytorów lubią zmian --w ; rozwiązywanie problemów nie było przyjemnością.
Shane Madden
tak, skoro jesteś na Ubuntu, po prostu otwórz terminal i użyj na przykład nano. W ten sposób będziesz pewien.
George Tasioulis,
Cześć, dziękuję za informację zwrotną - sprawdziłem wszystko i wszystko jest w porządku. Próbowałem zweryfikować plik CRT, ale dostaję:sudo openssl x509 -noout -text -in domain.com.crt unable to load certificate 16851:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:650:Expecting: TRUSTED CERTIFICATE
williamsowen
1
Czy pierwsza linia pliku domain.com.crt zaczyna się od, -----BEGIN CERTIFICATE-----a ostatnia linia kończy -----END CERTIFICATE-----?
George Tasioulis,
1

Jeśli ktoś napotka ten problem, a dzienniki błędów apache mówią coś takiego:

Init: Nie można odczytać certyfikatu serwera z pliku /etc/apache2/domain.com.ssl/domain.com.crt/domain.com.crt

Upewnij się, że nie zamieniłeś plików kluczy i certyfikatów w deklaracjach w konfiguracji apache. Wskazałem klucz na mój plik certyfikatu, a certyfikat na mój plik klucza. Ten post pomógł mi zrozumieć problem, ale chciałem go wskazać jako kolejny potencjalny problem / rozwiązanie.

Josh
źródło
0

Mój problem (ten sam błąd podczas instalowania nowego serwera z Apache 2.4) polegał na tym, że Apache (2.4) nie mógł odczytać binarnego pliku .crt. Zaimportowałem go do mojego osobistego magazynu certyfikatów (z mmc) i wyeksportowałem jako X.509 (.cer) w formacie base-64. Zmieniłem nazwę eksportowanego pliku na tę samą nazwę (.crt) (użytą w moim httpd-ssl.conf) i zadziałało ponownie! Ten sam certyfikat działał na moim starym serwerze, może Apache 2.4 jest bardziej rygorystyczny niż 2.2? Powodzenia.

Grzmotnąć
źródło
0

W moim przypadku ma to związek z obecnością BOM w pliku. Można to rozebrać tak:

tail -c +4 ssl.crt > ssl2.crt

Nie jestem pewien, czy zawsze zajmuje 3 bajty, więc lepszym sposobem musi być:

vi -c 'se nobomb' -c wq ssl.crt
x-yuri
źródło
0

Wystąpił ten sam błąd, ponieważ zmieniłem .key z nazwami plików .crt

Tobia
źródło
0

Miałem podobny problem, gdy przypadkowo użyłem dostarczonego przez klienta certyfikatu P7b typu IIS w konfiguracji apache. Konwersja certyfikatu do formatu x509 naprawiła błąd. Oba typy wyglądają tak samo na powierzchni, ale najwyraźniej różnią się od wewnątrz.

Uwe
źródło
0

Miałem ten problem, ponieważ przesłano mi zawartość pliku .p7b w stylu IIS wklejonego do wiadomości e-mail. Posiada znaczniki „----- ROZPOCZNIJ CERTYFIKAT -----” i „----- ZAKOŃCZ CERTYFIKAT -----”, podobnie jak .pem, a treść używa podobnie wyglądającego kodowania base64. Przekształciłem go w plik * .pem w następujący sposób:

openssl pkcs7 -print_certs -in cert.p7b -out cert.cer

Po tym Apache 2.2 był szczęśliwy.

Derek
źródło
0

Ostatnio miałem problem z używaniem Lets Encrypt (letsencrypt) w systemie Windows. Cert wrócił zakodowany jako UTF-16LE. Konwersja go do UTF-8 (przy użyciu dos2unix) rozwiązała problem.

Jeff Hoye
źródło
0

W moim przypadku były tylko puste linie. Kiedy wkleiłem plik CRT z ntepad lub notatnika ++ w nano, zawsze miałem coś podobnego

sdgrgrgr rgregegreg rgrgreg
rgregreg rggregregr rgregrg

usunięcie pustych spacji i umieszczenie wszystkich w linii rozwiązało problem Np .:

sdgrgrgr
rgregegreg
rgrgreg
rgregreg
rggregregr
rgregrg
Teodor
źródło