วิธีสร้างไฟล์. pem สำหรับเว็บเซิร์ฟเวอร์ https


91

ฉันใช้ Express framework ใน Node.js เพื่อสร้างเว็บเซิร์ฟเวอร์ ฉันต้องการให้การขนส่งเป็นไปตาม SSL

รหัสสำหรับสร้างเว็บเซิร์ฟเวอร์ https มีดังต่อไปนี้

var app = express.createServer({
  key: fs.readFileSync('./conf/key.pem'),
  cert: fs.readFileSync('./conf/cert.pem')
});
module.exports = app;

คำถาม: จะสร้าง key.pem และ cert.pem โดยด่วนได้อย่างไร?

คำตอบ:


201

ไฟล์สองไฟล์ที่คุณต้องการคือใบรับรอง SSL ที่เข้ารหัส PEM และคีย์ส่วนตัว ใบรับรองและคีย์ที่เข้ารหัส PEM คือข้อความที่เข้ารหัส Base64 พร้อมตัวคั่นเริ่มต้น / สิ้นสุดที่มีลักษณะเหมือน-----BEGIN RSA PRIVATE KEY-----หรือคล้ายกัน

ในการสร้างใบรับรอง SSL ก่อนอื่นคุณต้องสร้างคีย์ส่วนตัวและคำขอลงนามใบรับรองหรือ CSR (ซึ่งมีคีย์สาธารณะของคุณด้วย) คุณสามารถทำได้หลายวิธี แต่นี่คือวิธีการใน OpenSSL

openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pem

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

หากคุณไม่สนใจว่าใบรับรองของคุณจะเชื่อถือได้ (โดยปกติจะเป็นกรณีเพื่อการพัฒนา) คุณสามารถสร้างใบรับรองที่ลงนามด้วยตนเองได้ ในการทำเช่นนี้เราสามารถใช้เกือบบรรทัดเดียวกัน แต่เราจะส่งผ่านพารามิเตอร์พิเศษสองตัว

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem

สิ่งนี้จะให้ใบรับรอง (มีอายุ 10 ปี) และคู่คีย์ที่คุณสามารถใช้ในข้อมูลโค้ดที่คุณโพสต์


2
แล้วใบรับรองไคลเอ็นต์และคีย์ล่ะ?
nkint

1
โพสต์นี้เสร็จสมบูรณ์เรียกใช้ทั้งสองคำสั่งที่เขาวางเพื่อรับคีย์ + ใบรับรอง ไคลเอนต์ไม่สร้างความน่าเชื่อถือเฉพาะเซิร์ฟเวอร์
Ninjaxor

@ paul คุณช่วยบอกหน่อยได้ไหมว่าคีย์. pem และใบรับรองเหล่านี้สร้างขึ้นที่ไหน ฉันหมายถึงไดเรกทอรีใด ฉันใช้ Ubuntu 14
StormTrooper

2
พวกเขาจะเขียนไปยังไดเร็กทอรีการทำงานปัจจุบันของเชลล์ของคุณ
Paul Kehrer

2
โปรดทราบว่าใบรับรองที่ลงนามด้วยตนเองที่สร้างขึ้นด้วยวิธีนี้คือเวอร์ชัน 1 ที่มี CN แต่ไม่มี SAN "ตั้งแต่เวอร์ชัน 58 เป็นต้นมา Chrome ต้องการใบรับรอง SSL เพื่อใช้ SAN (Subject Alternative Name) แทน Common Name (CN) ที่เป็นที่นิยมดังนั้นการสนับสนุน CN จึงถูกลบออก" [แก้ไข Chrome 58+ [missing_subjectAltName] ด้วย openssl เมื่อใช้ใบรับรองที่ลงนามด้วยตนเอง] ( alexanderzeitler.com/articles/… )
Zhiyong

12

เพียงทำตามขั้นตอนนี้:

  1. สร้างโฟลเดอร์ที่คุณต้องการจัดเก็บคีย์และใบรับรองของคุณ:

    mkdir conf


  1. ไปที่ไดเร็กทอรีนั้น:

    cd conf


  1. คว้าca.cnfไฟล์นี้เพื่อใช้เป็นทางลัดการกำหนดค่า:

    wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/ca.cnf


  1. สร้างผู้ออกใบรับรองใหม่โดยใช้การกำหนดค่านี้:

    openssl req -new -x509 -days 9999 -config ca.cnf -keyout ca-key.pem -out ca-cert.pem


  1. ตอนนี้เรามีผู้ออกใบรับรองca-key.pemและca-cert.pemสร้างคีย์ส่วนตัวสำหรับเซิร์ฟเวอร์:

    openssl genrsa -out key.pem 4096


  1. คว้าserver.cnfไฟล์นี้เพื่อใช้เป็นทางลัดการกำหนดค่า:

    wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/server.cnf


  1. สร้างคำขอลงนามใบรับรองโดยใช้การกำหนดค่านี้:

    openssl req -new -config server.cnf -key key.pem -out csr.pem


  1. ลงนามในคำขอ:

    openssl x509 -req -extfile server.cnf -days 999 -passin "pass:password" -in csr.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem

ฉันพบขั้นตอนนี้ที่นี่พร้อมกับข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ใบรับรองเหล่านี้

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