ฉันจะแปลงไฟล์ใบรับรอง PFX เพื่อใช้กับ Apache บนเซิร์ฟเวอร์ linux ได้อย่างไร


110

ฉันจะแปลงไฟล์ใบรับรอง PFX เพื่อใช้กับ Apache บนเซิร์ฟเวอร์ linux ได้อย่างไร

ฉันสร้าง PFX จาก Windows Certificate Services PFX ประกอบด้วยห่วงโซ่ใบรับรองทั้งหมด (ซึ่งเป็นเพียงรูทและใบรับรองหลักไม่มีตัวกลาง)

นำฉันคนฉลาด

คำตอบ:


194

ด้วยOpenSSLคุณสามารถแปลง pfx เป็นรูปแบบที่เข้ากันได้กับ Apache ด้วยคำสั่งถัดไป:

openssl pkcs12 -in domain.pfx -clcerts -nokeys -out domain.cer
openssl pkcs12 -in domain.pfx -nocerts -nodes  -out domain.key   

domain.cerคำสั่งแรกสารสกัดที่สำคัญของประชาชนในการ คำสั่งที่สองสารสกัดที่สำคัญส่วนตัวถึง
domain.key

อัปเดตไฟล์การกำหนดค่า Apache ของคุณด้วย:

<VirtualHost 192.168.0.1:443>
 ...
 SSLEngine on
 SSLCertificateFile /path/to/domain.cer
 SSLCertificateKeyFile /path/to/domain.key
 ...
</VirtualHost>

ไม่มีคำสั่งในการสร้างไฟล์ผู้ออกใบรับรอง คำตอบด้านล่างนี้สมบูรณ์ยิ่งขึ้น
Hawkee

100

นอกจากนี้

openssl pkcs12 -in domain.pfx -clcerts -nokeys -out domain.cer
openssl pkcs12 -in domain.pfx -nocerts -nodes  -out domain.key

ฉันยังสร้างใบรับรอง Certificate Authority (CA):

openssl pkcs12 -in domain.pfx -out domain-ca.crt -nodes -nokeys -cacerts

และรวมไว้ในไฟล์กำหนดค่า Apache:

<VirtualHost 192.168.0.1:443>
 ...
 SSLEngine on
 SSLCertificateFile /path/to/domain.cer
 SSLCertificateKeyFile /path/to/domain.key
 SSLCACertificateFile /path/to/domain-ca.crt
 ...
</VirtualHost>

8
หมายเหตุ: ถ้าใบรับรอง ca ว่างเปล่า - โปรดอย่ารวมบรรทัดนี้ในไฟล์ config
Andron

@Andron เมื่อฉันใช้คำสั่งที่สามเพื่อสร้างใบรับรอง CA ผลลัพธ์คือไฟล์ crt ว่างเปล่า ฉันลองใช้ทั้งไฟล์ serverSSL pfx และไฟล์ rootCA pfx สำหรับอินพุต (bitnami wamp) ผลสุดท้ายคือ firefox แจ้งThe certificate is not trusted because the issuer certificate is unknown SEC_ERROR_UNKNOWN_ISSUERข้อผิดพลาด
khargoosh

@khargoosh ตามที่ฉันรายงานในความคิดเห็น: ถ้าว่าง - อย่าใช้ / รวมบรรทัดนี้ ฉันมีสถานการณ์เดียวกัน
Andron

31

เพื่อให้สามารถใช้งานกับ Apache ได้เราจำเป็นต้องมีขั้นตอนเพิ่มเติมอีกขั้นตอนหนึ่ง

openssl pkcs12 -in domain.pfx -clcerts -nokeys -out domain.cer
openssl pkcs12 -in domain.pfx -nocerts -nodes  -out domain_encrypted.key
openssl rsa -in domain_encrypted.key -out domain.key

คำสั่งสุดท้ายจะถอดรหัสคีย์เพื่อใช้กับ Apache ไฟล์ domain.key ควรมีลักษณะดังนี้:

-----BEGIN RSA PRIVATE KEY-----
MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
-----END RSA PRIVATE KEY-----

ดี! สำหรับ Bitnami หรือคนอื่น ๆ ที่ต้องการ CA crt เช่นกันดูคำตอบจาก Andron เพื่อรวม CA crt ใช้ server-ca.crt (แทนที่ domain-ca.crt ในคำตอบของ Andron) และ server.crt (แทน domain.cer) และ server.key (แทนที่ domain.key) ในระบบการตั้งชื่อของ Michael Ferrante ตอบที่นี่
OldGreg

3

ใช้เครื่องมือรอบ ๆ แต่นี่คือสิ่งที่ฉันลงเอยด้วย

สร้างและติดตั้งใบรับรองบน ​​IIS7 ส่งออกเป็น PFX จาก IIS

แปลงเป็น pkcs12

openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes

หมายเหตุ: ในขณะที่แปลง PFX เป็นรูปแบบ PEM openssl จะใส่ใบรับรองและคีย์ส่วนตัวทั้งหมดลงในไฟล์เดียว คุณจะต้องเปิดไฟล์ในโปรแกรมแก้ไขข้อความและคัดลอกคีย์ใบรับรองและคีย์ส่วนตัว (รวมถึงคำสั่ง BEGIN / END) ไปยังไฟล์ข้อความแต่ละไฟล์และบันทึกเป็น certificate.cer, CAcert.cer, privateKey.key ตามลำดับ

-----BEGIN PRIVATE KEY-----
Saved as certificate.key
-----END PRIVATE KEY-----

-----BEGIN CERTIFICATE-----
Saved as certificate.crt
-----END CERTIFICATE-----

เพิ่มไปยัง apache vhost w / Webmin


หากคุณไม่ต้องการให้คีย์ส่วนตัวและใบรับรองลงท้ายด้วยไฟล์เดียวกันให้ใช้-nokeys(ไม่ใช่เพื่อแยกคีย์ส่วนตัว) และ-clcerts(เพื่อแยกใบรับรองเท่านั้น) นี่คือสิ่งที่ Matej พูด
Bruno

0

SSLSHopper มีบทความที่ละเอียดถี่ถ้วนเกี่ยวกับการย้ายระหว่างเซิร์ฟเวอร์ต่างๆ

http://www.sslshopper.com/how-to-move-or-copy-an-ssl-certificate-from-one-server-to-another.html

เพียงแค่เลือกลิงก์ที่เกี่ยวข้องที่ด้านล่างของหน้านี้

หมายเหตุ: พวกเขามีตัวแปลงออนไลน์ซึ่งให้พวกเขาเข้าถึงคีย์ส่วนตัวของคุณ พวกเขาอาจเชื่อถือได้ แต่จะดีกว่าถ้าใช้คำสั่ง OPENSSL (แสดงในเว็บไซต์นี้ด้วย) เพื่อเก็บคีย์ส่วนตัวไว้ในเครื่องของคุณเอง

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