ไม่สามารถโหลดคีย์ส่วนตัว (รูทีน PEM: PEM_read_bio: no start line: pem_lib.c: 648: Expecting: any private KEY)


93

ฉันมีไฟล์. key ซึ่งเป็นไฟล์คีย์ส่วนตัวในรูปแบบ PEM ฉันไม่ได้สร้างไฟล์นี้ แต่ได้มาจากที่ไหนสักแห่ง

ฉันต้องการเห็นแฮช MD5 ด้วยเครื่องมือ openssl เช่นคำสั่งด้านล่าง

openssl rsa -in server.key -modulus -noout

แต่สิ่งนี้ทำให้เกิดข้อผิดพลาดด้านล่าง

unable to load Private Key
13440:error:0906D06C:PEM routines:PEM_read_bio:no start line:.\crypto\pem\pem_lib.c:648:Expecting: ANY PRIVATE KEY

นี่คือ asn1parse ของไฟล์. key

openssl asn1parse -in server.key
0:d=0  hl=4 l= 603 cons: SEQUENCE
4:d=1  hl=2 l=   1 prim: INTEGER           :00
7:d=1  hl=3 l= 129 prim: INTEGER           :C141201603899993919CBAA56985E9C7
C6A2AF713A02F5FE88D38CEFBED9304599689280B84B0AB577A9719CA20DDA1246A894AF397A2C57
EE5A582B036CC367E3667454DCD82DBDBF187C35FE39F61C71B517DDDF576F5471B4EC2E045E0F9D
619F5616C4E832F00CBD0DBF41B4BA3CBC4B4B603AE1FE61965917DA732E0DEF
139:d=1  hl=2 l=   3 prim: INTEGER           :010001
144:d=1  hl=3 l= 128 prim: INTEGER           :1687B9AE67562CEDEBDD7A531B84CDB7
093CE138519B93C34B7F626076FF0A262B16EA71904ACB6251A39307C04ADE202055BA13DD9F1539
6123EE408183361A9BC08B9413FA360EA928E48CC3F52B33ACF2980758F02BA2139F652F30A257C2
2E45D7C25835FC4D22B9ECECC12AB632318D4F47E1EBDAD9781B96BCFF03A2D1

 ...

มีอะไรให้ลองทำอีกไหม?


2
ส่วนหัว / ส่วนท้ายของไฟล์ PEM คืออะไร? คุณจะได้รับข้อผิดพลาดนี้หากคุณกำลังส่งคีย์สาธารณะ นอกจากนี้คำสั่งที่คุณระบุไว้จะไม่ให้แฮช MD5 มันจะให้โมดูลัสของคีย์
gtrig

ฉันเคยscpคัดลอกไฟล์จาก Windows ไปยัง Ubuntu ในการแก้ไขฉันลบไฟล์บน Ubuntu สร้างไฟล์เปล่าใหม่ที่นั่นและใช้vimแล้ววางในเนื้อหาที่ถูกต้อง
Ryan

คำตอบ:


66

เปิดไฟล์คีย์ใน Notepad ++ และตรวจสอบการเข้ารหัส หากมีข้อความว่า UTF-8-BOM ให้เปลี่ยนเป็น UTF-8 บันทึกไฟล์แล้วลองอีกครั้ง


2
ถ้าฉันใช้ Mac ล่ะ?
Ernest Zamelczyk

6
ใช้ Visual Studio Code - คุณสามารถเปลี่ยนการเข้ารหัสได้อย่างง่ายดายโดยใช้แถบเครื่องมือด้านล่าง!
Luca Ghersi

2
โอ้พระเจ้า! ขอบคุณ! ฉันจะไม่คิดว่าด้วยการลองผิดลองถูกแก้ไขปัญหาให้ฉัน!
Mikael Dyreborg Hansen

นี่คือสำหรับฉัน ขอบคุณ!
Freeman Helmuth

4
GoDaddy สร้างคีย์ส่วนตัว "built-private-key.txt" ขึ้นต้นด้วย BOM ซึ่งทำให้เกิดปัญหานี้ อย่างน้อยบน Mac การทิ้งข้อความสำคัญด้วย cat ไม่ได้แสดง BOM แต่ดูด้วยสิ่งที่ทำน้อยกว่า ฉันใช้ BBEdit เพื่อลบ BOM แต่สิ่งใด ๆ ที่สามารถเปลี่ยนรูปแบบหรือตัดสี่ไบต์แรกจะใช้งานได้
Seth Noble

55

ฉันเปลี่ยนส่วนหัวและส่วนท้ายของไฟล์ PEM เป็น

-----BEGIN RSA PRIVATE KEY-----

และ

-----END RSA PRIVATE KEY-----

ในที่สุดมันก็ได้ผล!


1
คุณยังสามารถเพิ่ม-inform pemคำสั่งเพื่อให้ได้ผลลัพธ์เดียวกัน เช่นopenssl rsa -in server.key -modulus -noout -inform pem.
Simon Woodside

1
ตรวจสอบstackoverflow.com/questions/54994641/…ว่าช่วยแก้ปัญหาของคุณได้หรือไม่
qstack

มีบางอย่างทำงานอย่างถูกต้องกับรูปแบบ "ไม่ดี" อยู่แล้ว (เช่นส่วนหัวที่ไม่เปลี่ยนแปลง) ดังนั้นนี่คือวิธีแก้ปัญหาชั่วคราวโดยผูกมัดเพื่อทำลายสิ่งที่ทำงานได้ดีอยู่แล้วเช่นพร็อกซีย้อนกลับที่ไม่หยุดทำงานเนื่องจากขาดสิ่งเหล่านั้นด้วยตนเอง แก้ไขส่วนหัวและส่วนท้าย ยิปส์!
alejandrob

32

ไฟล์. key ของคุณมีอักขระที่ไม่ถูกต้อง คุณสามารถตรวจสอบไฟล์. key ได้ดังนี้:

# file server.key

เอาท์พุท "server.key: UTF-8 Unicode (พร้อม BOM) text" หมายความว่าเป็นข้อความธรรมดาไม่ใช่ไฟล์คีย์ ผลลัพธ์ที่ถูกต้องควรเป็น "server.key: PEM RSA private key"

ใช้คำสั่งด้านล่างเพื่อลบอักขระที่ผิดกฎหมาย:

# tail -c +4 server.key > new_server.key

new_server.key ควรถูกต้อง

สำหรับรายละเอียดเพิ่มเติมคลิกที่นี่ขอบคุณสำหรับโพสต์


1
file server.keyคำสั่งนี้ช่วยให้ฉันได้รับปัญหา ขอบคุณ.
itsHarshad

คำสั่ง tail ดูเหมือนจะเพิ่มอักขระการจัดรูปแบบแปลก ๆ ลงในไฟล์คีย์ของฉัน ไม่แน่ใจว่าทำไมถึงเป็นเช่นนี้
ryanwebjackson

สิ่งนี้ร่วมกับคำตอบ @tkpl ดูเหมือนจะกำจัดข้อผิดพลาดให้ฉัน
ryanwebjackson

สิ่งนี้ช่วยฉันได้ไม่กี่ชั่วโมงและผมทั้งตัว
Felipe Gusmao


6
> I have a .key file which is PEM formatted private key file.
> ...
> Here's some asn1parse of the .key file...

ดูเหมือนว่าตกลงและasn1parseทำให้ฉันเชื่อว่ามันไม่ได้เข้ารหัส PEM


มีอะไรให้ลองทำอีกไหม?

เนื่องจากดูเหมือนว่าจะเป็น ASN.1 ให้ลอง:

$ openssl rsa -in server.key -inform DER -modulus -noout

สังเกตการ-inform DERสลับระหว่างการเข้ารหัส




2

ฉันใช้ Windows 10 และฉันบันทึกคีย์ด้วยการเข้ารหัสWindows1252และมันก็ใช้ได้สำหรับฉัน อีกคำถาม StackOverflow บางคนได้รับการแก้ไขนี้กับUTF-8 กับ BOM

กล่าวอีกนัยหนึ่งอาจเป็นการเข้ารหัสไฟล์


1

อาจเป็นคีย์ส่วนตัวเองก็ไม่มีอยู่ในไฟล์ฉันก็ประสบปัญหาเดียวกัน แต่ปัญหาคือไม่มีคีย์ส่วนตัวอยู่ในไฟล์


1

สิ่งนี้อาจเกิดขึ้นได้หากคุณพยายามใช้คีย์สาธารณะเพื่อสร้างใบรับรองแทนคีย์ส่วนตัวของคุณ คุณควรใช้คีย์ส่วนตัว


0

มีปัญหาเดียวกันในวันนี้และสังเกตว่าสิ่งนี้เกิดขึ้นเมื่อเจ้าของ / กลุ่มของไฟล์ไม่ใช่แอปที่ใช้งานอยู่ซึ่งอ่านคีย์ อาจเป็นปัญหาของคุณด้วย


0

ไม่มีคำตอบอื่นใดที่ดูเหมือนถูกต้องในกรณีของฉัน แต่ฉันพบคำตอบที่แท้จริงที่นี่

id_rsaไฟล์ของฉันอยู่ในรูปแบบ PEM แล้วฉันแค่ต้องเพิ่ม.pemนามสกุลให้กับชื่อไฟล์

ขอบคุณ

ตัวเลือกที่เป็นไปได้สำหรับopenssl rsa -informพารามิเตอร์คือหนึ่งใน:PEM DER

PEMไฟล์ที่เข้ารหัสเป็นข้อความธรรมดาเข้ารหัสที่มีลักษณะคล้าย:

-----BEGIN RSA PRIVATE KEY-----
MIGrAgEAAiEA0tlSKz5Iauj6ud3helAf5GguXeLUeFFTgHrpC3b2O20CAwEAAQIh
ALeEtAIzebCkC+bO+rwNFVORb0bA9xN2n5dyTw/Ba285AhEA9FFDtx4VAxMVB2GU
QfJ/2wIRANzuXKda/nRXIyRw1ArE2FcCECYhGKRXeYgFTl7ch7rTEckCEQDTMShw
8pL7M7DsTM7l3HXRAhAhIMYKQawc+Y7MNE4kQWYe
-----END RSA PRIVATE KEY-----

while DERเป็นรูปแบบการเข้ารหัสไบนารี


0

ในกรณีของเราสิ่งที่ทำให้เกิดปัญหาคือคีย์ส่วนตัวที่เราพยายามใช้ถูกเข้ารหัสด้วยข้อความรหัสผ่าน

เราต้องถอดรหัสคีย์ส่วนตัวโดยใช้ssh-keygen -pก่อนจึงจะสามารถใช้คีย์ส่วนตัวด้วยเครื่องมือบรรทัดคำสั่ง openssl


-6

ทำไมไม่ใช้ cetificate bot

ยำติดตั้ง epel-release

ยำติดตั้ง certbot-nginx

การได้รับใบรับรอง

certbot --nginx -d example.com -d www.example.com

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