ทุกคนสามารถบอกวิธีที่ถูกต้อง / คำสั่งเพื่อแยก / แปลงใบรับรอง.crt
และ.key
ไฟล์กุญแจส่วนตัวจาก.pem
ไฟล์ได้หรือไม่? ฉันเพิ่งอ่านว่ามันเปลี่ยนได้ แต่ไม่ใช่วิธี
ทุกคนสามารถบอกวิธีที่ถูกต้อง / คำสั่งเพื่อแยก / แปลงใบรับรอง.crt
และ.key
ไฟล์กุญแจส่วนตัวจาก.pem
ไฟล์ได้หรือไม่? ฉันเพิ่งอ่านว่ามันเปลี่ยนได้ แต่ไม่ใช่วิธี
คำตอบ:
ฉันสามารถแปลง pem เป็น crt โดยใช้สิ่งนี้:
openssl x509 -outform der -in your-cert.pem -out your-cert.crt
openssl pkey -in mumble.pem -out mumble-key.pem
หากเวอร์ชัน OpenSSL เก่ากว่า 1.0.0 เพื่อแยกคีย์เป็นคีย์ RSA:openssl rsa -in mumble.pem -out mumble-key.pem
unable to load certificate 140584440387400:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE
Expecting: ANY PRIVATE KEY
ข้อผิดพลาด
การแปลงโดยใช้ OpenSSL
คำสั่งเหล่านี้ช่วยให้คุณสามารถแปลงใบรับรองและคีย์เป็นรูปแบบที่แตกต่างกันเพื่อให้เข้ากันได้กับเซิร์ฟเวอร์หรือซอฟต์แวร์บางประเภท
แปลงไฟล์ DER (.crt .cer .der) เป็น PEM
openssl x509 -inform der -in certificate.cer -out certificate.pem
แปลงไฟล์ PEM เป็น DER
openssl x509 -outform der -in certificate.pem -out certificate.der
แปลงไฟล์ PKCS # 12 (.pfx .p12) ที่มีรหัสส่วนตัวและใบรับรองเป็น PEM
openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes
You can add -nocerts to only output the private key or add -nokeys to only output the certificates.
แปลงไฟล์ใบรับรอง PEM และไพรเวตคีย์เป็น PKCS # 12 (.pfx .p12)
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
แปลง PEM เป็น CRT (ไฟล์. CRT)
openssl x509 -outform der -in certificate.pem -out certificate.crt
OpenSSL แปลง PEM
แปลง PEM เป็น DER
openssl x509 -outform der -in certificate.pem -out certificate.der
แปลง PEM เป็น P7B
openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer
แปลง PEM เป็น PFX
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
OpenSSL แปลง DER
แปลง DER เป็น PEM
openssl x509 -inform der -in certificate.cer -out certificate.pem
OpenSSL แปลง P7B
แปลง P7B เป็น PEM
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
แปลง P7B เป็น PFX
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer
OpenSSL แปลง PFX
แปลง PFX เป็น PEM
openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes
สร้างคีย์ rsa โดย OpenSSL
การใช้ OpenSSL ในบรรทัดคำสั่งที่คุณต้องสร้างกุญแจสาธารณะและกุญแจส่วนตัวคุณควรใช้รหัสผ่านเพื่อป้องกันไฟล์นี้โดยใช้อาร์กิวเมนต์ -passout มีหลายรูปแบบที่อาร์กิวเมนต์นี้สามารถใช้เพื่อศึกษาเอกสาร OpenSSL เกี่ยวกับเรื่องนั้น
openssl genrsa -out private.pem 1024
สิ่งนี้จะสร้างไฟล์คีย์ชื่อ private.pem ที่ใช้ 1024 บิต ไฟล์นี้มีทั้งกุญแจส่วนตัวและกุญแจสาธารณะดังนั้นคุณควรแยกไฟล์สาธารณะจากไฟล์นี้:
openssl rsa -in private.pem -out public.pem -outform PEM -pubout
or
openssl rsa -in private.pem -pubout > public.pem
or
openssl rsa -in private.pem -pubout -out public.pem
ตอนนี้คุณจะมี public.pem ที่มีเพียงกุญแจสาธารณะของคุณคุณสามารถแชร์สิ่งนี้กับบุคคลที่สามได้อย่างอิสระ คุณสามารถทดสอบได้ทั้งหมดโดยเพียงแค่เข้ารหัสบางสิ่งด้วยตัวคุณเองโดยใช้กุญแจสาธารณะของคุณแล้วถอดรหัสโดยใช้รหัสส่วนตัวของคุณก่อนอื่นเราต้องใช้บิตของข้อมูลในการเข้ารหัส:
ไฟล์ตัวอย่าง:
echo 'too many secrets' > file.txt
ตอนนี้คุณมีข้อมูลบางส่วนใน file.txt ให้เข้ารหัสโดยใช้ OpenSSL และรหัสสาธารณะ:
openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.ssl
สิ่งนี้จะสร้าง file.txt เวอร์ชันเข้ารหัสซึ่งเรียกว่า file.ssl หากคุณดูที่ไฟล์นี้มันเป็นเพียงขยะไบนารีไม่มีอะไรที่เป็นประโยชน์กับใครเลย ตอนนี้คุณสามารถยกเลิกการเข้ารหัสโดยใช้คีย์ส่วนตัว:
openssl rsautl -decrypt -inkey private.pem -in file.ssl -out decrypted.txt
ตอนนี้คุณจะมีไฟล์ที่ไม่ได้เข้ารหัสใน decrypted.txt:
cat decrypted.txt
|output -> too many secrets
ตัวเลือก RSA TOOLS ใน OpenSSL
ชื่อ
rsa - เครื่องมือประมวลผลคีย์ RSA
สรุป
openssl rsa [-help] [-inform PEM | NET | DER] [-form form PEM | NET | DER] [-in ชื่อไฟล์] [-passin ARG] [-pass ชื่อไฟล์] [-passout ARG] [-aes128] [- aes192] [-aes256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-pubin] [-pubout] [-RSAPublicKey_in] [-RSAPublicKey_out] [-engine id]
รายละเอียด
คำสั่ง rsa ประมวลผลคีย์ RSA พวกเขาสามารถแปลงระหว่างรูปแบบต่างๆและส่วนประกอบของพวกเขาพิมพ์ออกมา หมายเหตุคำสั่งนี้ใช้รูปแบบที่เข้ากันได้กับ SSLeay แบบดั้งเดิมสำหรับการเข้ารหัสคีย์ส่วนตัว: แอปพลิเคชันที่ใหม่กว่าควรใช้รูปแบบ PKCS # 8 ที่ปลอดภัยยิ่งขึ้นโดยใช้ยูทิลิตี้ pkcs8
ตัวเลือกคำสั่ง
-help
พิมพ์ข้อความการใช้งาน
-inform DER|NET|PEM
สิ่งนี้ระบุรูปแบบอินพุต ตัวเลือก DER ใช้รูปแบบการเข้ารหัส ASN1 DER ที่เข้ากันได้กับรูปแบบ PKCS # 1 RSAPrivateKey หรือ SubjectPublicKeyInfo รูปแบบ PEM เป็นรูปแบบเริ่มต้น: ประกอบด้วยรูปแบบ DER base64 ที่เข้ารหัสด้วยส่วนหัวและส่วนท้ายเพิ่มเติม ในการยอมรับคีย์ส่วนตัวของรูปแบบ PKCS # 8 จะถูกป้อนด้วย รูปแบบ NET เป็นรูปแบบที่อธิบายไว้ในส่วนหมายเหตุ
-outform DER|NET|PEM
สิ่งนี้ระบุรูปแบบเอาต์พุตตัวเลือกมีความหมายเหมือนกับตัวเลือก -inform
-in filename
สิ่งนี้ระบุชื่อไฟล์อินพุตเพื่ออ่านคีย์จากหรืออินพุตมาตรฐานหากไม่ได้ระบุตัวเลือกนี้ หากรหัสถูกเข้ารหัสวลีรหัสผ่านจะได้รับแจ้ง
-passin arg
แหล่งอินพุตรหัสผ่านไฟล์ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบของ ARG โปรดดูส่วน PASS PHRASE ARGUMENTS ใน openssl
-out filename
สิ่งนี้ระบุชื่อไฟล์เอาต์พุตเพื่อเขียนคีย์ไปยังหรือเอาต์พุตมาตรฐานหากไม่ได้ระบุอ็อพชันนี้ หากมีการตั้งค่าตัวเลือกการเข้ารหัสข้อความรหัสผ่านจะถูกถาม ชื่อไฟล์ที่ส่งออกไม่ควรจะเหมือนกันกับชื่อไฟล์อินพุต
-passout password
แหล่งรหัสผ่านไฟล์ที่ส่งออก สำหรับข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบของ ARG โปรดดูส่วน PASS PHRASE ARGUMENTS ใน openssl
-aes128|-aes192|-aes256|-camellia128|-camellia192|-camellia256|-des|-des3|-idea
ตัวเลือกเหล่านี้เข้ารหัสคีย์ส่วนตัวด้วยรหัสที่ระบุก่อนที่จะส่งออก วลีรหัสผ่านจะได้รับแจ้ง หากไม่มีการระบุตัวเลือกเหล่านี้กุญแจจะถูกเขียนเป็นข้อความธรรมดา ซึ่งหมายความว่าการใช้ยูทิลิตี้ rsa เพื่ออ่านในคีย์เข้ารหัสโดยไม่มีตัวเลือกการเข้ารหัสสามารถใช้เพื่อลบวลีรหัสผ่านออกจากคีย์หรือโดยการตั้งค่าตัวเลือกการเข้ารหัสที่สามารถใช้เพื่อเพิ่มหรือเปลี่ยนวลีรหัสผ่าน ตัวเลือกเหล่านี้สามารถใช้ได้กับไฟล์เอาต์พุตรูปแบบ PEM เท่านั้น
-text
พิมพ์องค์ประกอบคีย์สาธารณะหรือส่วนตัวต่างๆในข้อความธรรมดานอกเหนือจากรุ่นที่เข้ารหัส
-noout
ตัวเลือกนี้ป้องกันการส่งออกของรุ่นที่เข้ารหัสของคีย์
-modulus
ตัวเลือกนี้จะพิมพ์ค่าโมดูลัสของคีย์
-check
ตัวเลือกนี้ตรวจสอบความสอดคล้องของคีย์ส่วนตัวของ RSA
-pubin
โดยค่าเริ่มต้นกุญแจส่วนตัวจะถูกอ่านจากไฟล์อินพุต: ด้วยตัวเลือกนี้จะมีการอ่านรหัสสาธารณะแทน
-pubout
โดยค่าเริ่มต้นคีย์ส่วนตัวคือผลลัพธ์: ด้วยตัวเลือกนี้คีย์สาธารณะจะถูกส่งออกแทน ตัวเลือกนี้จะถูกตั้งค่าโดยอัตโนมัติหากการป้อนข้อมูลเป็นกุญแจสาธารณะ
-RSAPublicKey_in, -RSAPublicKey_out
เช่น -pubin และ -pubout ยกเว้นการใช้รูปแบบ RSAPublicKey แทน
-engine id
การระบุเอ็นจิน (ตามสตริง id ที่ไม่ซ้ำกัน) จะทำให้ rsa พยายามรับการอ้างอิงการทำงานกับเอ็นจินที่ระบุดังนั้นจึงเริ่มต้นหากจำเป็น เครื่องยนต์จะถูกตั้งค่าเป็นค่าเริ่มต้นสำหรับอัลกอริทึมที่มีอยู่ทั้งหมด
หมายเหตุ
รูปแบบคีย์ส่วนตัว PEM ใช้บรรทัดส่วนหัวและส่วนท้าย:
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
รูปแบบพับลิกคีย์ PEM ใช้บรรทัดส่วนหัวและส่วนท้าย:
-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----
รูปแบบ PEM RSAPublicKey ใช้บรรทัดส่วนหัวและส่วนท้าย:
-----BEGIN RSA PUBLIC KEY-----
-----END RSA PUBLIC KEY-----
รูปแบบ NET เป็นรูปแบบที่เข้ากันได้กับเซิร์ฟเวอร์ Netscape รุ่นเก่าและไฟล์. IIS ของ Microsoft IIS ซึ่งจะใช้ RC4 ที่ไม่มีการเข้ารหัสสำหรับการเข้ารหัส ไม่ปลอดภัยและควรใช้เมื่อจำเป็นเท่านั้น
IIS รุ่นที่ใหม่กว่าบางรุ่นมีข้อมูลเพิ่มเติมในไฟล์. key ที่ส่งออก หากต้องการใช้สิ่งเหล่านี้กับยูทิลิตี้ให้ดูไฟล์ด้วยตัวแก้ไขไบนารีและค้นหาสตริง "ไพรเวตคีย์" จากนั้นติดตามกลับไปยังลำดับไบต์ 0x30, 0x82 (นี่คือลำดับ ASN1) คัดลอกข้อมูลทั้งหมดจากจุดนี้เป็นต้นไปไปยังไฟล์อื่นและใช้เป็นอินพุตไปยังยูทิลิตี้ rsa ด้วยตัวเลือก -inform NET
ตัวอย่าง
วิธีลบวลีรหัสผ่านในคีย์ส่วนตัวของ RSA:
openssl rsa -in key.pem -out keyout.pem
ในการเข้ารหัสคีย์ส่วนตัวโดยใช้ triple DES:
openssl rsa -in key.pem -des3 -out keyout.pem
ในการแปลงคีย์ส่วนตัวจากรูปแบบ PEM เป็น DER:
openssl rsa -in key.pem -outform DER -out keyout.der
หากต้องการพิมพ์ส่วนประกอบของคีย์ส่วนตัวไปยังเอาต์พุตมาตรฐาน:
openssl rsa -in key.pem -text -noout
หากต้องการส่งออกส่วนสาธารณะของคีย์ส่วนตัว:
openssl rsa -in key.pem -pubout -out pubkey.pem
ส่งออกส่วนสาธารณะของคีย์ส่วนตัวในรูปแบบ RSAPublicKey:
openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem
ในการแยกคีย์และใบรับรองจากไฟล์ pem:
openssl pkey -in foo.pem -out foo.key
วิธีการแยกคีย์ ...
openssl rsa -in foo.pem -out foo.key
openssl crl2pkcs7 -nocrl -certfile foo.pem | openssl pkcs7 -print_certs -out foo.cert
openssl x509 -in foo.pem -outform DER -out first-cert.der
0. ข้อกำหนดเบื้องต้น : openssl
ควรติดตั้ง บน Windows หากGit Bash
ติดตั้งไว้ให้ลองใช้! ไบนารีสำรองสามารถพบได้ที่นี่
1. สารสกัด.key
จาก.pem
:
openssl pkey -in cert.pem -out cert.key
2. สารสกัด.crt
จาก.pem
:
openssl crl2pkcs7 -nocrl -certfile cert.pem | openssl pkcs7 -print_certs -out cert.crt
A .rt เก็บใบรับรอง .. ในรูปแบบ pem ดังนั้น. pem ในขณะที่มันสามารถมีสิ่งอื่น ๆ เช่น csr (การร้องขอการลงนามใบรับรอง), คีย์ส่วนตัว, กุญแจสาธารณะ, หรือ certs อื่น ๆ , เมื่อมันถูกเก็บไว้เพียงใบรับรอง, เป็นสิ่งเดียวกันกับ. crt
pem เป็นไฟล์ที่เข้ารหัสพื้นฐาน 64 โดยมีส่วนหัวและส่วนท้ายระหว่างแต่ละส่วน
เพื่อแยกส่วนเฉพาะสคริปต์ Perl เช่นต่อไปนี้ถูกต้องโดยสิ้นเชิง แต่อย่าลังเลที่จะใช้คำสั่ง openssl บางส่วน
perl -ne "\$n++ if /BEGIN/; print if \$n == 1 && /BEGIN/.../END/;" mydomain.pem
โดยที่ == 1 สามารถเปลี่ยนเป็นส่วนที่คุณต้องการ เห็นได้ชัดว่าถ้าคุณรู้ว่าส่วนหัวและส่วนท้ายที่คุณต้องการและมีเพียงหนึ่งในไฟล์ (มักจะเป็นกรณีถ้าคุณเก็บใบรับรองและกุญแจในนั้น) คุณสามารถทำให้มันง่ายขึ้น:
perl -ne "print if /^-----BEGIN CERTIFICATE-----\$/.../END/;" mydomain.pem
หากคุณถามคำถามนี้เพราะคุณกำลังใช้ mkcert
อยู่เคล็ดลับก็คือ.pem
ไฟล์นั้นเป็นใบรับรองและ-key.pem
ไฟล์นั้นเป็นกุญแจสำคัญ
(คุณไม่จำเป็นต้องแปลงเพียงเรียกใช้mkcert yourdomain.dev otherdomain.dev
)