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

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.


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

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.


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 

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.


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.


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.


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.


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.


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

0

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


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.


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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.