ข้อผิดพลาด 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 ของฉันมีแท็กเริ่มต้นและสิ้นสุดและคัดลอกมาจากอีเมลยืนยันที่ฉันได้รับอย่างน่าผิดหวังมาก!

ไชโย!

แก้ไข >> เมื่อพยายามตรวจสอบ. crt ดูเหมือนจะไม่ทำงาน:

>> openssl x509 - ไม่ จำกัด - ข้อความ - ใน domain.com.crt 
ไม่สามารถโหลดใบรับรอง
16851: ข้อผิดพลาด: 0906D06C: รูทีน PEM: PEM_read_bio: ไม่มีบรรทัดเริ่มต้น: pem_lib.c: 650: ต้องการ: ใบรับรองที่เชื่อถือได้

นอกจากนี้ >>

>> openssl x509 - ข้อความ - ป้อนข้อมูล PEM - ใน domain.com.crt
ไม่สามารถโหลดใบรับรอง
21321: ข้อผิดพลาด: 0906D06C: รูทีน PEM: PEM_read_bio: ไม่มีบรรทัดเริ่มต้น: pem_lib.c: 650: คาดหวัง: ใบรับรองที่เชื่อถือได้
>> openssl x509 - ข้อความ - กรอก DER - ใน 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ไหม
ควอนตั้ม

Williamsowen จุดทั้งหมดของใบรับรองจะปรากฏต่อทุกคนที่เชื่อมต่อกับเว็บเซิร์ฟเวอร์ของคุณ มันไม่ใช่เรื่องส่วนตัว คุณจะพิจารณาแนบหรือโพสต์ใบรับรองทั้งหมดที่นี่เพื่อให้เราสามารถดูได้โดยตรงแทนที่จะต้องเดา?
MadHatter รองรับโมนิก้า

รอก่อนฉันเห็นว่าคุณเพิ่งตอบรับแล้ว นั่นหมายความว่ามันเป็น linefeeds ของเทอร์มินัล Windows ที่ทำให้เกิดปัญหาหรือไม่
MadHatter สนับสนุนโมนิก้า

MadHatter - ขอโทษ! ใหม่สำหรับสิ่งนี้ แต่ฉันเพิ่งทำให้มันทำงานได้การจัดรูปแบบจากอีเมลที่ฉันได้รับปิดไม่สามารถขอบคุณมากพอ!
williamsowen

คำตอบ:


49

เป็นไปได้ไหมที่บรรทัดจะถูกยกเลิก ^ M? นี่เป็นปัญหาที่อาจเกิดขึ้นเมื่อทำการย้ายไฟล์จาก Windows ไปยังระบบ UNIX วิธีการหนึ่งที่ง่ายต่อการตรวจสอบคือการใช้viในโหมด "แสดงให้ฉันไบนารี" 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 และ apache ไม่รักไฟล์เหล่านั้น

ตัวเลือกของคุณรวมถึงการย้ายไฟล์ซ้ำอีกครั้งให้ระมัดระวังมากขึ้น หรือใช้dos2unixคำสั่งเพื่อตัดออก; คุณสามารถลบออกได้ภายใน vi หากคุณระมัดระวัง


แก้ไข : ขอบคุณ @ dave_thompson_085 ซึ่งชี้ให้เห็นว่าคำตอบนี้ไม่ได้ใช้ในปี 2019 อีกต่อไปนั่นคือ Apache / OpenSSL ในตอนนี้ทนต่อ ^ M-terminated ดังนั้นพวกเขาจึงไม่ทำให้เกิดปัญหา ที่กล่าวว่าข้อผิดพลาดการจัดรูปแบบอื่น ๆ ตัวอย่างที่แตกต่างกันหลายอย่างที่ปรากฏในความคิดเห็นยังสามารถทำให้เกิดปัญหา; ตรวจสอบอย่างระมัดระวังหากใบรับรองถูกย้ายข้ามระบบ


สำหรับฉันมันเป็นข้อผิดพลาดในการคัดลอกและวางไม่ใช้อักขระคู่แรกของส่วนหัว-----BE... ขอบคุณสำหรับแรงบันดาลใจในการตรวจสอบอีกครั้ง!
cfi

ขอบคุณนี่เป็นปัญหาของฉัน! ใน notepad ++ ใน windows คุณสามารถใช้กล่องโต้ตอบการแปลง EDIT-EOL เพื่อเปลี่ยนการตั้งค่ารูปแบบ LF ที่ถูกต้อง และคุณสามารถใช้เมนู View-Show Symbol เพื่อดูสิ้นสุดบรรทัด CR CR ของ windows ได้
Bjørn

1
ใบรับรองของฉันกลายเป็นไฟล์ว่างเปล่า ฉันเดาว่ามีอะไรบางอย่างเกิดขึ้นในรุ่นนี้ คำตอบนี้สนับสนุนให้ฉันเปิดมันและดูว่า
flickerfly

หมายเหตุสำหรับผู้ใช้ Windows: คุณอาจต้องแปลงรูปแบบบรรทัดเป็น UNIX แม้ว่าคุณจะใช้ Windows DOS2UNIX ไม่ใช่คำสั่ง Windows แต่เป็น Linux ข่าวดีสำหรับ Git for Windows ก็คือ CigWin ก็อาจทำเช่นกัน แต่ก็ไม่แน่ใจ
Ignacio Segura

หมายเหตุสำหรับผู้ใช้ Windows: รายการสิทธิ์ในแท็บ Properties / Security ของ Windows Explorer จะเกิดความสับสนหลังจากคัดลอกไฟล์สิทธิ์ จำกัด จากการแชร์เครือข่ายด้วย cp ของ Cygwin เช่นฉันเห็น "NUL SID" ซึ่งเป็นรายการที่ปิดใช้งานทุกคนและผู้ใช้โดเมน
ปลาไหล gEEe

19

สำหรับทุกคนที่มาถึงหน้านี้ด้วยข้อผิดพลาดที่คล้ายกันเมื่อพยายามอ่านคำขอลงนามใบรับรอง (CSR) (โปรดทราบว่า OP กำลังอ่านใบรับรอง): ตรวจสอบให้แน่ใจว่าใช้คำสั่ง OpenSSL ที่ถูกต้อง x509สำหรับใบรับรองและreqสำหรับ CSRs:

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 

ขอบคุณสำหรับคำตอบนี้ ฉันสามารถกำหนดรูปแบบ SA ของฉันที่ให้ไว้เป็น ".cer" แล้ว "
.pem

10

ในกรณีของฉันฉันพบว่าใบรับรองของฉันมีอักขระ "-" ที่แตกต่างกัน ต้องเป็นปัญหาการคัดลอก / วางจากผู้ดูแลระบบที่วางใบรับรองไว้บนเซิร์ฟเวอร์โดยใช้ text editor แทนที่ - ด้วยอักขระยูนิโค้ดพิเศษตลอดทาง

ขั้นตอนนี้ใช้เวลาหลายชั่วโมงในการวินิจฉัยและในที่สุดฉันก็เดาได้และแก้ไขใบรับรองใน vi และลบอักขระ "-" ที่มีอยู่ออกแล้วพิมพ์ใหม่อีกครั้ง

หวังว่านี่จะช่วยใครซักคน


8

ในกรณีของฉันฉันพบข้อผิดพลาดของ OP เพราะใครก็ตามที่สร้างไฟล์. crt สำหรับฉันตั้งแต่แรกสร้างไฟล์ที่มีการจัดรูปแบบ. PEMและตั้งชื่อเป็น. crt

ฉันค้นพบสิ่งนี้โดยพบคู่มือที่เป็นประโยชน์ต่อไปนี้: https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how -to- แปลงพวกเขา

สิ่งที่ฉันต้องทำคือเปลี่ยนชื่อ. crt เป็น. pem และฉันก็ทำเสร็จแล้ว! คู่มือชี้ให้เห็นว่าข้อผิดพลาดจากคำถามของ OP หมายถึงไฟล์อินพุตถูกฟอร์แมต PEM แล้วดังนั้นพยายามแปลงเป็น. pem จากรูปแบบ DER ไม่สามารถทำได้และอันที่จริงแล้วไม่จำเป็น


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
ตรวจสอบว่าเครื่องหมายขีดคั่นของคุณเป็นขีดกลาง เครื่องมือแก้ไขข้อความของ Microsoft ต้องการเปลี่ยน--เป็น; มันสนุกมากที่จะแก้ไขปัญหา
เชนแมดเดน

yeap เนื่องจากคุณอยู่บน Ubuntu เพียงแค่เปิด terminal และใช้ nano เป็นต้น วิธีนี้คุณจะแน่ใจ
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

หากมีคนอื่นประสบปัญหานี้และบันทึกข้อผิดพลาด apache ของคุณควรพูดถึงสิ่งต่อไปนี้:

เริ่มต้น: ไม่สามารถอ่านใบรับรองเซิร์ฟเวอร์จากไฟล์ /etc/apache2/domain.com.ssl/domain.com.crt/domain.com.crt

ตรวจสอบให้แน่ใจว่าคุณไม่ได้สลับไฟล์คีย์และใบรับรองในการประกาศในการกำหนดค่า apache ฉันได้ชี้คีย์ไปที่ไฟล์ใบรับรองของฉันและใบรับรองไปยังไฟล์คีย์ของฉัน โพสต์นี้ช่วยให้ฉันเข้าใจปัญหา แต่ฉันต้องการชี้ให้เห็นว่าเป็นปัญหา / วิธีแก้ไขปัญหาอื่นที่อาจเกิดขึ้น


0

ปัญหาของฉัน (มีข้อผิดพลาดเดียวกันขณะติดตั้งเซิร์ฟเวอร์ใหม่กับ Apache 2.4) คือ Apache (2.4) ไม่สามารถอ่านไฟล์ไบนารี. crt ได้ ฉันนำเข้ามาในที่เก็บใบรับรองส่วนตัว (ด้วย mmc) และส่งออกเป็น base-64 encoded 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 ที่ลูกค้าให้มาในการตั้งค่า apache โดยไม่ตั้งใจ การแปลงใบรับรองเป็นรูปแบบ x509 จะแก้ไขข้อผิดพลาดได้ ทั้งสองประเภทมีลักษณะเหมือนกันบนพื้นผิว แต่มีความแตกต่างกันในด้านใน


0

ฉันมีปัญหานี้เพราะฉันถูกส่งเนื้อหาของไฟล์. p7b สไตล์ IIS ที่แปะไว้ในอีเมล มีแท็ก "----- BEGIN CERTIFICATE -----" และ "----- END CERTIFICATE -----" แท็กเช่นเดียวกับ. pem และเนื้อหาใช้การเข้ารหัส base64 ที่คล้ายกัน ฉันแปลงเป็นไฟล์ * .pem เช่นนั้น:

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

หลังจากนั้น Apache 2.2 มีความสุข


0

ฉันเพิ่งมีปัญหานี้โดยใช้ Lets Encrypt (letsencrypt) บน Windows ใบรับรองกลับมาเข้ารหัสเป็น UTF-16LE การแปลงเป็น UTF-8 (โดยใช้ dos2unix) แก้ปัญหาได้


0

ในกรณีของฉันเป็นเพียงบรรทัดว่าง เมื่อฉันวางไฟล์ crt จาก ntepad หรือ notepad ++ ใน nano จะมีความเหมือน smth เสมอ

sdgrgrgr rgregegreg rgrgreg
rgregreg rggregregr rgregrg

ลบช่องว่างและ putig ทั้งหมดในบรรทัดแก้ปัญหาเช่น:

sdgrgrgr
rgregegreg
rgrgreg
rgregreg
rggregregr
rgregrg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.