อาจไม่มีวิธีในการทำเช่นนี้กับเครื่องมือ OpenSSH เพียงอย่างเดียว
แต่สามารถทำได้ค่อนข้างง่ายด้วยเครื่องมือ OpenSSL ในความเป็นจริงมีอย่างน้อยสองวิธีที่จะทำ ในตัวอย่างด้านล่าง~/.ssh/id_rsa
เป็นรหัสส่วนตัวของคุณ
วิธีหนึ่งคือการใช้dgst :
openssl dgst -sign ~/.ssh/id_rsa some-file
อื่น ๆ ใช้pkeyutl :
openssl pkeyutl -sign -inkey ~/.ssh/id_rsa -in some-file
ทั้งสองนี้เขียนลายเซ็นไบนารีไปยังเอาต์พุตมาตรฐาน dgstจะใช้-hex
ตัวเลือกที่จะพิมพ์การเป็นตัวแทนข้อความโดยมีรายละเอียดบางอย่างเกี่ยวกับรูปแบบของลายเซ็น pkeyutlใช้-hexdump
ตัวเลือกซึ่งมีประโยชน์น้อยกว่าเล็กน้อย ทั้งสองจะยอมรับทั้งคีย์ RSA และ DSA ฉันไม่รู้ว่าฟอร์แมตของเอาต์พุตคืออะไร ทั้งสองคำสั่งสร้างรูปแบบที่แตกต่างกัน ฉันได้รับความประทับใจที่pkeyutlถือว่าทันสมัยมากขึ้นกว่าdgst
ในการตรวจสอบลายเซ็นเหล่านั้น:
openssl dgst -verify $PUBLIC_KEY_FILE -signature signature-file some-file
และ:
openssl pkeyutl -verify -inkey $PUBLIC_KEY_FILE -sigfile signature-file -in some-file
$PUBLIC_KEY_FILE
นี่คือปัญหา OpenSSL ไม่สามารถอ่านรูปแบบที่สำคัญ OpenSSH id_rsa.pub
ของประชาชนเพื่อให้คุณไม่สามารถเพียงแค่การใช้งาน คุณมีตัวเลือกน้อยไม่เหมาะ
หากคุณมี OpenSSH เวอร์ชัน 5.6 หรือใหม่กว่าคุณสามารถทำสิ่งนี้ได้อย่างชัดเจน:
ssh-keygen -e -f ~/.ssh/id_rsa.pub -m pem
ซึ่งจะเขียนพับลิกคีย์ไปยังเอาต์พุตมาตรฐานในรูปแบบ PEM ซึ่ง OpenSSL สามารถอ่านได้
หากคุณมีคีย์ส่วนตัวและเป็นคีย์ RSA คุณสามารถแยกรหัสสาธารณะได้ (ฉันถือว่าไฟล์คีย์ส่วนตัวที่เข้ารหัส PEM มีสำเนาของคีย์สาธารณะเนื่องจากไม่สามารถรับคีย์สาธารณะได้ จากไพรเวตคีย์เอง) และใช้สิ่งนั้น:
openssl rsa -in ~/.ssh/id_rsa -pubout
ฉันไม่รู้ว่ามี DSA ที่เทียบเท่าหรือไม่ โปรดทราบว่าวิธีการนี้ต้องใช้ความร่วมมือจากเจ้าของรหัสส่วนตัวซึ่งจะต้องแยกรหัสสาธารณะและส่งไปยังตัวตรวจสอบที่ต้องการ
สุดท้ายคุณสามารถใช้โปรแกรม Python ที่เขียนโดย chap ชื่อ Larsเพื่อแปลงพับลิกคีย์จาก OpenSSH เป็นรูปแบบ OpenSSL