SSL 오류-파일에서 서버 인증서를 읽을 수 없습니다


37

나는 오늘 내 도메인에 SSL을 설정하고 또 다른 문제를 겪었다.

다음과 같은 오류 메시지가 계속 나타납니다.

[오류] 초기화 : /etc/apache2/domain.com.ssl/domain.com.crt/domain.com.crt 파일에서 서버 인증서를 읽을 수 없습니다.
[오류] SSL 라이브러리 오류 : 218529960 오류 : 0D0680A8 : asn1 인코딩 루틴 : ASN1_CHECK_TLEN : 잘못된 태그
[오류] SSL 라이브러리 오류 : 218595386 오류 : 0D07803A : asn1 인코딩 루틴 : ASN1_ITEM_EX_D2I : 중첩 된 asn1 오류

Apache 2.2.16 및 Ubuntu 10.10을 실행 중입니다. 내 .crt 파일에는 Begin 및 End 태그가 있으며받은 확인 이메일에서 정확하게 복사하여 매우 실망했습니다!

건배!

편집 >> .crt를 확인하려고 할 때 작동하지 않는 것 같습니다.

>> openssl x509 -noout-텍스트 -in domain.com.crt 
인증서를로드 할 수 없습니다
16851 : 오류 : 0906D06C : PEM 루틴 : PEM_read_bio : 시작 선 없음 : pem_lib.c : 650 : 예상 : 신뢰할 수있는 인증서

또한 >>

>> openssl x509 -text-정보 PEM -in domain.com.crt
인증서를로드 할 수 없습니다
21321 : 오류 : 0906D06C : PEM 루틴 : PEM_read_bio : 시작 선 없음 : pem_lib.c : 650 : 예상 : 신뢰할 수있는 인증서
>> openssl x509 -text-정보 알림 -in domain.com.crt
인증서를로드 할 수 없습니다
21325 : 오류 : 0D0680A8 : asn1 인코딩 루틴 : ASN1_CHECK_TLEN : 잘못된 태그 : tasn_dec.c : 1316 :
21325 : 오류 : 0D07803A : asn1 인코딩 루틴 : ASN1_ITEM_EX_D2I : 중첩 된 asn1 오류 : tasn_dec.c : 380 : Type = X509

편집 >> (그런데 도움을 청함)

>> grep '^ -----'domain.com.crt
----- 인증서 시작 -----
----- 종료 증명서 -----

인증서를 제공 한 회사에 이메일을 보냈는데 응답했습니다.>

귀하가 제공 한 CSR 파일을 확인했으며 이것이 올바르게 생성되었는지 확인할 수 있습니다. CSR 설치에 잘못된 명령 행을 사용하고 있기 때문에 현재 발생하는 오류가 발생합니다. 명령 행에서이 domain.com.crt를 도메인 이름에 따라 수정해야합니다.

  • 현재 crt는 mysite.com.crt로 설정되어 있습니다. 예를 들어 domain.com.crt를 사용했습니다.

우리에게 출력을 보여 주 grep '^-----' domain.com.crt시겠습니까?
quanta

Williamsowen, 인증서의 요점은 웹 서버에 연결하는 모든 사람에게 표시됩니다. 사적인 것이 아닙니다. 그렇다면 전체 인증서를 첨부하거나 게시하여 추측하지 않고 직접 볼 수 있도록 하시겠습니까?
MadHatter는 Monica

잠깐만, 당신이 방금 내 대답을 받아 들였다는 것을 알았습니다. 문제의 원인이 된 터미널 Windows 줄 바꿈 이었습니까?
MadHatter는 Monica

MadHatter-사과합니다! 이것에 익숙하지 않지만 방금 작동했습니다. 수신 한 이메일의 서식이 해제되어있어서 감사합니다.
williamsowen

답변:


49

줄이 ^ M로 종료 될 수 있습니까? Windows에서 UNIX 시스템으로 파일을 이동할 때 잠재적 인 문제입니다. 확인하는 쉬운 방법 중 하나는을 사용 vi하여 "2 진수 표시"모드에서 사용하는 것 vi -b /etc/apache2/domain.ssl/domain.ssl.crt/domain.com.crt입니다.

각 줄이 이와 같이 control-M로 끝나는 경우

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

Windows 라인 종료 형식의 파일이 있으며 아파치는 그 파일을 좋아하지 않습니다.

옵션에는 파일을 다시 옮기고 더 많은주의를 기울이는 것이 포함됩니다. 또는 dos2unix명령을 사용하여 제거하십시오. 조심하면 vi 내부에서 제거 할 수도 있습니다.


편집 : @ dave_thompson_085 덕분 에이 답변은 2019 년에 더 이상 적용되지 않는다고 지적합니다. 즉, Apache / OpenSSL은 ^ M로 끝나는 줄을 허용하므로 문제가 발생하지 않습니다. 그러나 주석에 나타나는 여러 가지 다른 형식 오류는 여전히 문제를 일으킬 수 있습니다. 인증서가 여러 시스템으로 이동 된 경우이를 확인하십시오.


나에게 그것은 헤더의 첫 두 문자를 생략하고 복사 및 붙여 넣기 오류였습니다 -----BE... 더블 체크 영감을 주셔서 감사합니다!
cfi

고마워, 이것은 내 문제였다! Windows의 notepad ++에서는 EDIT-EOL 변환 대화 상자를 사용하여 올바른 LF 형식 설정을 변경할 수 있습니다. 그리고 View-Show Symbol 메뉴를 사용하여 실제로 윈도우 CR LF 줄 끝을 볼 수 있습니다.
Bjørn

1
내 인증서는 단순히 빈 파일이되었습니다. 내가 생각하는 세대에 문제가 생겼습니다. 이 대답은 그것을 열어서 그것을 보도록 격려했습니다.
flickerfly

Windows 사용자 참고 사항 : Windows를 사용하는 경우에도 회선 형식을 UNIX로 변환해야합니다. DOS2UNIX는 Windows 명령이 아니라 Linux 명령입니다. 좋은 소식은 Git for Windows가 제공하는 것입니다. CigWin은 아마도 그렇게하지만 확실하지 않습니다.
이그나시오 세 구라

Windows 사용자 참고 사항 : Cygwin의 cp를 사용하여 네트워크 공유에서 제한된 권한 파일을 복사 한 후 Windows 탐색기의 속성 / 보안 탭에있는 권한 목록이 엉망이됩니다. 예를 들어, 모든 사용자 및 도메인 사용자 항목이 비활성화 된 "NUL SID"를 보았습니다.
eel ghEEz

19

CSR (Certificate Signing Request)을 읽으려고 할 때 비슷한 오류가 발생하여이 페이지에 도착하는 모든 사람 (OP는 인증서를 읽고 있음) : 올바른 OpenSSL 명령을 사용해야합니다. x509인증서 용이며 reqCSR 용입니다.

openssl req -in server.csr -text -noout

vs

openssl x509 -in server.crt -text -noout

17

이것에 대해 빙글 빙글 돌았습니다. 인증서가 잘못되었습니다.

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

대신에:

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

이 오류가 발생했는지 확인해야합니다.


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

인증서 형식에 문제가있는 것 같습니다.

다음 두 명령을 모두 실행하고 출력을 제공하십시오.

openssl x509 -text -inform DER -in domain.com.crt 
openssl x509 -text -inform PEM -in domain.com.crt 

이 답변에 감사드립니다. 내 SAS의 ".CER"제공 ".PEM"이미 있던 형식으로 확인할 수 있었다 시크릿
javafueled

10

제 경우에는 인증서에 "-"문자가 다른 것을 발견했습니다. 서버에서 인증서를 서버에 배치 한 관리자의 복사 / 붙여 넣기 문제였으며 텍스트 편집기를 대체하여 특별한 유니 코드 문자로 대체해야합니다.

이것은 진단하는 데 몇 시간이 걸렸고 결국 나는 그것을 추측하고 vi에서 인증서를 편집하고 기존 "-"문자를 삭제하고 다시 입력했습니다.

이것이 누군가를 돕기를 바랍니다.


8

필자의 경우 처음에 나를 위해 .crt 파일을 만든 사람이 실제로 .PEM 형식의 파일을 만들어 .crt로 지정했기 때문에 OP의 오류가 발생 했습니다.

다음과 같은 유용한 가이드를 실행하여 이것을 발견했습니다. https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how 변환하다

내가해야 할 일은 내 .crt의 이름을 .pem으로 바꾸는 것뿐이었습니다. 가이드는 OP의 질문으로 인한 오류가 입력 파일이 이미 PEM 형식이라는 것을 암시하므로 DER 형식에서 .pem으로 변환하려고 시도 할 수 없으며 실제로는 불필요합니다.


4

인증서 파일 내에 파일에 후행 또는 선행 공백이 없는지 확인하십시오. 전체 텍스트를 선택하고 텍스트 전용 편집기에서 공백을 찾아서 인증서 파일 내에 공백이나 공백이 없도록주의하십시오.

또한 구성된 모든 파일이 실제로 존재하고 올바른지 확인하십시오.

예 : 다른 게시물에서 .key 파일의 이름은 my domain.com.crt이고 vhost 구성에는 domain.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

위의 모든 파일이 실제로 존재하고 유효한지 다시 확인하십시오.


1
또한 대시가 대시인지 확인하십시오. 변경하려면 마이크로 소프트와 텍스트 편집기 --; 문제를 해결하는 데 많은 재미가 없었습니다.
Shane Madden

예, 우분투에 있기 때문에 터미널을 열고 나노를 사용하십시오. 이렇게하면 확실합니다.
George Tasioulis

안녕하십니까, 귀하의 피드백에 감사드립니다-모든 것을 확인했으며 모두 좋습니다. 나는 crt 파일을 확인하려고 노력했지만 나는 얻는다 :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
domain.com.crt 파일의 첫 번째 줄은로 시작 -----BEGIN CERTIFICATE-----하고 마지막 줄은 -----END CERTIFICATE-----?
George Tasioulis

1

다른 사람 이이 문제를 겪고 아파치 오류 로그에 다음과 같은 내용이 표시되면

초기화 : /etc/apache2/domain.com.ssl/domain.com.crt/domain.com.crt 파일에서 서버 인증서를 읽을 수 없습니다.

아파치 설정의 선언에서 키와 인증서 파일을 바꾸지 않았는지 확인하십시오. 인증서 파일의 키와 인증서를 키 파일의 키로 지정했습니다. 이 게시물을 통해 문제를 파악하는 데 도움이되었지만 다른 잠재적 인 문제 / 해결책으로 지적하고 싶었습니다.


0

내 문제 (Apache 2.4로 새 서버를 설치하는 동안 동일한 오류가 발생 함)는 Apache (2.4)가 이진 .crt 파일을 읽을 수 없다는 것입니다. 개인 인증서 저장소 (mmc 포함)로 가져 와서 base-64로 인코딩 된 X.509 (.cer)로 내보냈습니다. 내 보낸 파일의 이름을 같은 이름 (.crt) (httpd-ssl.conf에서 사용)으로 바꾸고 다시 작동했습니다! 동일한 인증서가 이전 서버에서 작동했습니다. Apache 2.4가 2.2보다 더 엄격 할 수 있습니까? 행운을 빕니다.


0

필자의 경우 파일에 BOM이있는 것과 관련이 있습니다. 다음과 같이 제거 할 수 있습니다.

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

항상 3 바이트가 필요한지 확실하지 않으므로 더 좋은 방법은 다음과 같습니다.

vi -c 'se nobomb' -c wq ssl.crt

0

.key를 .crt 파일 이름으로 전환 했기 때문에 동일한 오류가 발생했습니다.


0

아파치 구성에서 실수로 고객 제공 p7b 유형 IIS 인증서를 사용할 때 비슷한 문제가 발생했습니다. 인증서를 x509 형식으로 변환하면 오류가 수정되었습니다. 두 유형 모두 표면에서 동일하게 보이지만 내부에서는 분명히 다릅니다.


0

IIS 스타일 .p7b 파일의 내용을 전자 메일에 붙여 넣었 기 때문에이 문제가 발생했습니다. 이 태그에는 .pem과 같이 "----- BEGIN CERTIFICATE -----"및 "----- END CERTIFICATE -----"태그가 있으며 유사한 base64 인코딩을 사용합니다. 다음과 같이 * .pem 파일로 변환했습니다.

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

그 후 Apache 2.2는 행복했습니다.


0

최근에 Windows에서 Lets Encrypt (letsencrypt)를 사용 하여이 문제가 발생했습니다. 인증서는 UTF-16LE로 다시 인코딩되었습니다. 이를 dos2unix를 사용하여 UTF-8로 변환하면 문제가 해결되었습니다.


0

내 경우에는 그냥 빈 줄이었습니다. 나노에서 ntepad 또는 notepad ++에서 crt 파일을 붙여 넣을 때 항상 smth가 생겼습니다.

sdgrgrgr rgregegreg rgrgreg
rgregreg rggregregr rgregrg

빈 공간을 제거하고 줄을 모두 넣으면 문제가 해결됩니다.

sdgrgrgr
rgregegreg
rgrgreg
rgregreg
rggregregr
rgregrg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.