เป็นไปได้หรือไม่ที่จะสร้างคีย์ RSA โดยไม่มีวลีรหัสผ่าน?


83

ฉันทำงานกับ Apache2 และ Passenger สำหรับโครงการ Rails ฉันต้องการสร้างใบรับรอง SSL ที่ลงชื่อด้วยตนเองเพื่อวัตถุประสงค์ในการทดสอบ

sudo openssl rsa -des3 -in server.key -out server.key.new

เมื่อฉันป้อนคำสั่งดังกล่าวจะกล่าวว่า

writing RSA key
Enter PEM pass phrase:

ถ้าฉันไม่ป้อน pass phrse, im ได้รับข้อผิดพลาดด้านล่าง

unable to write key
3079317228:error:28069065:lib(40):UI_set_result:result too small:ui_lib.c:869:Yo
u must type in 4 to 1024 characters
3079317228:error:0906406D:PEM routines:PEM_def_callback:problems getting passwor
d:pem_lib.c:111:
3079317228:error:0906906F:PEM routines:PEM_ASN1_write_bio:read key:pem_lib.c:382

เป็นไปได้ไหมที่จะสร้างคีย์ RSA โดยไม่ให้pass phraseเนื่องจากฉันไม่แน่ใจว่า/etc/init.d/httpdสคริปต์จะเริ่มต้นเซิร์ฟเวอร์ HTTP โดยไม่มีการแทรกแซงจากมนุษย์ได้อย่างไร (เช่นถ้าฉันให้วลีรหัสผ่าน 4 ตัวอักษรคาดว่าฉันจะให้สิ่งนี้ขณะเริ่มเซิร์ฟเวอร์ Apache HTTP )


6
บรรทัดคำสั่งของคุณบอกopensslให้เข้ารหัสคีย์ที่มีอยู่ ฟังดูเหมือนสิ่งอื่นที่ไม่ใช่สิ่งที่คุณต้องการ
David Schwartz

Apache httpd สามารถกำหนดค่าให้รับข้อความรหัสผ่าน privatekey แบบไม่โต้ตอบ ดู doc สำหรับ mod_ssl หรือในหลาย ๆ กรณีความคิดเห็นในไฟล์ config ที่จัดเตรียม / ทำแพ็กเกจ อย่างไรก็ตามสิ่งนี้มักจะไม่มีความปลอดภัยมากกว่าการปล่อยให้ privatekey ไม่มีการเข้ารหัสซึ่งง่ายกว่า
dave_thompson_085

คำตอบ:


88

หากคุณกำลังสร้างใบรับรองที่ลงนามเองคุณสามารถทำทั้งคีย์และใบรับรองในคำสั่งเดียวดังนี้:

openssl req  -nodes -new -x509  -keyout server.key -out server.cert

โอ้และสิ่งที่ @MadHatter พูดไว้ในคำตอบของเขาเกี่ยวกับการข้าม-des3ธง


14
คำสั่งโหนดคือเหตุผลที่ฉันมาที่นี่ (ไม่มีการเข้ารหัส DES คีย์ส่วนตัว)
2560

38

ออกจากการ-des3ตั้งค่าสถานะซึ่งเป็นคำสั่งเพื่อ openssl เพื่อเข้ารหัส server.key.new (ซึ่งโดยทั่วไปแล้วไม่ใช่รหัสใหม่เลย - เหมือนกับว่าเป็น server.key เท่านั้นที่มีการเปลี่ยน / ถอดข้อความรหัสผ่านเท่านั้น) .


21

openssl reqคำสั่งจากคำตอบโดย @ Tom Hเป็นที่ถูกต้องเพื่อสร้างใบรับรองลงนามด้วยตนเองในการserver.certรวม รหัสส่วนตัว RSA น้อยรหัสผ่านในserver.key:

openssl req -nodes -new -x509 -keyout server.key -out server.cert

นี่คือวิธีการทำงาน การละเว้น-des3ในคำตอบโดย @MadHatterนั้นไม่เพียงพอในกรณีนี้เพื่อสร้างคีย์ส่วนตัวโดยไม่มีข้อความรหัสผ่าน มันเป็นพอสำหรับวัตถุประสงค์นี้ในopenssl rsa( "แปลงคีย์ส่วนตัว") คำสั่งเรียกตาม @MadHatter และopenssl genrsa( "สร้างคีย์ส่วนตัว") คำสั่ง ไม่ใช่เพื่อopenssl reqคำสั่งที่นี่ นอกจากนี้เรายังต้องการ-nodes("ไม่มีการเข้ารหัสserver.keyโปรดDES !")


17

ใช้-nodesพารามิเตอร์หากระบุตัวเลือกนี้คีย์ส่วนตัวจะไม่ถูกเข้ารหัสเช่น:

openssl \
    req \
    -nodes \
    -newkey rsa:2048 \
    -keyout www.example.com.key \
    -out www.example.com.csr \
    -subj "/C=DE/ST=NRW/L=Berlin/O=My Inc/OU=DevOps/CN=www.example.com/emailAddress=dev@www.example.com"

7

เพียงเรียกใช้อีกครั้งผ่าน openssl

ก่อนอื่นสร้างคีย์ด้วยวลีรหัสผ่าน

แล้วก็ openssl rsa -in server.key -out server.key


สิ่งนี้ไม่ทำงานบน Ubuntu 16.04
sweetfa

3
ฉัน downvoted เพราะคำตอบนี้ไม่ใช่สิ่งที่ถูกถามนอกจากนี้คำสั่งต้องการอินพุตและไม่สร้างคีย์
ดอน

ผู้ใช้แสดงให้เห็นแล้วว่าพวกเขารู้วิธีสร้างคีย์ คำตอบนี้สร้างจากความรู้นั้นและฉันขอแนะนำให้ใช้คีย์ที่สร้างขึ้นใหม่และส่งผ่านอีกครั้งopenssl ดังนั้นจึงบรรลุเป้าหมายของสิ่งที่ถูกถาม: การสร้างคีย์โดยไม่มีวลีรหัสผ่าน
darethas

ใช้งานได้กับฉันopensslใน Windows 10 จาก GitBash ขอบคุณสำหรับข้อมูล
สีเขียว

0

ใช้คำสั่งต่อไปที่จะสร้างรหัสผ่านน้อยไฟล์กุญแจส่วนตัวพร้อมไม่มีการเข้ารหัส พารามิเตอร์สุดท้ายคือขนาดของคีย์ส่วนตัว

openssl genrsa -out my-passless-private.key 4096

1
นี่ไม่ใช่รหัสผ่านน้อย มันเป็นรหัสผ่านที่สมบูรณ์และสมบูรณ์
dave_thompson_085

ฉันกำลังทดลองกับตำแหน่งของพารามิเตอร์ ตอนนี้ก็โอเค ฉันเปลี่ยนตำแหน่งของพารามิเตอร์สองรายการสุดท้ายและทดสอบคำสั่ง
ห้าม

ตอนนี้มันสร้างไฟล์ที่ไม่ได้เข้ารหัส ตัวเลือกหลังจากอาร์กิวเมนต์ตำแหน่งเท่านั้น (เท่านั้น) จะถูกละเว้น ดูไฟล์; มันไม่ได้เข้ารหัส แทนที่4096 -des3ด้วย4096 -sillywombatและยังคงใช้งานได้และสร้างรูปแบบเดียวกันโดยที่ยังไม่ได้เข้ารหัส (แต่มีค่าคีย์ที่แตกต่างกัน) ไม่มีทางที่จะมีไฟล์ privatekey ที่เข้ารหัสด้วยรหัสผ่านและวิธีแก้ไขที่ถูกต้องสำหรับไฟล์ที่ไม่มีการเข้ารหัสที่ไม่มีรหัสผ่านนั้นได้รับเมื่อหกปีที่แล้ว
dave_thompson_085

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