แปลง. pem เป็น. crt และ. key


371

ทุกคนสามารถบอกวิธีที่ถูกต้อง / คำสั่งเพื่อแยก / แปลงใบรับรอง.crtและ.keyไฟล์กุญแจส่วนตัวจาก.pemไฟล์ได้หรือไม่? ฉันเพิ่งอ่านว่ามันเปลี่ยนได้ แต่ไม่ใช่วิธี



มีความเป็นไปได้ที่ซ้ำกันของวิธีรับไฟล์. pem จากไฟล์. key และ. crt
nyedidikeke

คำตอบ:


500

ฉันสามารถแปลง pem เป็น crt โดยใช้สิ่งนี้:

openssl x509 -outform der -in your-cert.pem -out your-cert.crt

13
การใช้โปรแกรมแก้ไขข้อความไม่ใช่วิธีที่ดีที่สุด ในการแยกคีย์ในรูปแบบ PKCS8: openssl pkey -in mumble.pem -out mumble-key.pem หากเวอร์ชัน OpenSSL เก่ากว่า 1.0.0 เพื่อแยกคีย์เป็นคีย์ RSA:openssl rsa -in mumble.pem -out mumble-key.pem
Andron

131
ฉันลองใช้คำสั่งของคุณ แต่ฉันมี:unable to load certificate 140584440387400:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE
ดาเมียนแครอล

15
คำสั่ง key (openssl pkey -in mumble.pem -out mumble-key.pem) ให้สิ่งนี้: ไม่สามารถโหลดคีย์ 129051320116880: ข้อผิดพลาด: 0906D06C: รูทีน PEM: PEM_read_bio: ไม่มีบรรทัดเริ่มต้น: pem_lib.c: 703: คาดหวัง: ANY รหัสส่วนตัว
mylord

2
openssl rsa -in-cert.pem ของคุณ - รูปแบบ pem -out your-key.pem
troyfolger

3
@ อันธพาลทั้ง pkey และ rsa ให้ฉันExpecting: ANY PRIVATE KEYข้อผิดพลาด
Aero Wang

393

การแปลงโดยใช้ 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
    

32
ยังคงนี้ไม่ตอบคำถามซึ่งเป็นวิธีการรับคีย์ส่วนตัวจากใบรับรองไบนารี (ส่งออก)
bbaassssiiee

ขอบคุณฉันสงสัยว่าถ้าฉันมี PEM ที่มีรหัสส่วนตัวและใบรับรองฉันจะรับใบรับรองได้อย่างไร ฉันรู้ว่าฉันสามารถคัดลอกส่วนใบรับรองจากมันโดยใช้โปรแกรมแก้ไขข้อความ แต่ฉันต้องการที่จะรู้ว่ามีคำสั่ง openssl ใด ๆ ขอบคุณ
workplaylifecycle

46

ในการแยกคีย์และใบรับรองจากไฟล์ pem:

แยกคีย์

openssl pkey -in foo.pem -out foo.key

วิธีการแยกคีย์ ...

openssl rsa -in foo.pem -out foo.key

แยก certs ทั้งหมดรวมถึง CA Chain

openssl crl2pkcs7 -nocrl -certfile foo.pem | openssl pkcs7 -print_certs -out foo.cert

แตกใบรับรองแรกเริ่มที่ textually เป็น DER

openssl x509 -in foo.pem -outform DER -out first-cert.der

7
openssl x509 -outform der -in C: \ Users \ Greg \ .ssh \ e360_stork_listener.pem -out C: \ Users \ Greg \ .ssh \ e360_stork_listener.crt ไม่สามารถโหลดใบรับรอง 4294956672: ข้อผิดพลาด: 0906D06C: PEM รูทีน: PEM__ERROR ไม่มีบรรทัดเริ่มต้น: pem_lib.c: 708: ต้องการ: ใบรับรองที่
เชื่อถือได้

5

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

1

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

0

หากคุณถามคำถามนี้เพราะคุณกำลังใช้ mkcertอยู่เคล็ดลับก็คือ.pemไฟล์นั้นเป็นใบรับรองและ-key.pemไฟล์นั้นเป็นกุญแจสำคัญ

(คุณไม่จำเป็นต้องแปลงเพียงเรียกใช้mkcert yourdomain.dev otherdomain.dev)

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