Cara membuat file .pem untuk server web https

90

Saya menggunakan kerangka kerja Express di Node.js untuk membuat server web. Saya ingin transportasi didasarkan pada SSL.

Kode untuk membuat web server https adalah sebagai berikut.

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

Pertanyaan: Bagaimana cara membuat key.pem dan cert.pem yang dibutuhkan oleh express?

Jeffrey
sumber

Jawaban:

201

Dua file yang Anda butuhkan adalah sertifikat SSL yang dikodekan PEM dan kunci pribadi. Sertifikat dan kunci yang dienkode PEM adalah teks yang dienkode Base64 dengan pemisah awal / akhir yang terlihat seperti -----BEGIN RSA PRIVATE KEY-----atau serupa.

Untuk membuat sertifikat SSL, pertama-tama Anda harus membuat kunci pribadi dan permintaan penandatanganan sertifikat, atau CSR (yang juga berisi kunci publik Anda). Anda dapat melakukan ini dengan berbagai cara, tetapi begini caranya di OpenSSL.

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

Ini akan menyebabkan Anda memasukkan prompt interaktif untuk membuat kunci privat RSA 2048-bit dan CSR yang memiliki semua informasi yang Anda pilih untuk dimasukkan saat diminta. ( Catatan: Nama Umum adalah tempat Anda ingin meletakkan nama domain yang akan Anda gunakan untuk mengakses situs Anda. ) Setelah Anda melakukannya, Anda biasanya akan mengirimkan CSR ini ke otoritas sertifikat tepercaya dan setelah mereka memvalidasi permintaan Anda, Anda akan menerima sertifikat.

Jika Anda tidak peduli sertifikat Anda dipercaya (biasanya untuk tujuan pengembangan), Anda dapat membuat sertifikat yang ditandatangani sendiri. Untuk melakukan ini, kita dapat menggunakan baris yang hampir sama, tetapi kita akan memberikan dua parameter tambahan.

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

Ini akan memberi Anda sertifikat (berlaku selama 10 tahun) dan pasangan kunci yang dapat Anda gunakan dalam cuplikan kode yang Anda posting.

Paul Kehrer
sumber
2
bagaimana dengan sertifikat dan kunci klien?
nkint
1
Posting ini selesai, jalankan kedua perintah yang dia tempelkan untuk memenangkan kunci + sertifikat. Klien tidak membangun kepercayaan, hanya server.
Ninjaxor
@paul Bisakah Anda memberi tahu saya di mana kunci .pem dan sertifikat ini dibuat? Maksud saya direktori yang mana? Saya menggunakan Ubuntu 14
StormTrooper
2
Mereka akan menulis ke direktori kerja shell Anda saat ini.
Paul Kehrer
1
Perhatikan bahwa sertifikat yang ditandatangani sendiri yang dibuat dengan cara ini adalah versi 1, berisi CN, tetapi tidak ada SAN. "Sejak versi 58, Chrome memerlukan sertifikat SSL untuk menggunakan SAN (Nama Alternatif Subjek) sebagai ganti Nama Umum (CN) yang populer, sehingga dukungan CN telah dihapus." [Memperbaiki Chrome 58+ [missing_subjectAltName] dengan openssl saat menggunakan sertifikat yang ditandatangani sendiri] ( alexanderzeitler.com/articles/… )
Zhiyong
11

Ikuti saja prosedur ini:

  1. buat folder tempat Anda ingin menyimpan kunci & sertifikat Anda:

    mkdir conf


  1. buka direktori itu:

    cd conf


  1. ambil ca.cnffile ini untuk digunakan sebagai pintasan konfigurasi:

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


  1. buat otoritas sertifikat baru menggunakan konfigurasi ini:

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


  1. sekarang setelah kita memiliki otoritas sertifikat di ca-key.pemdan ca-cert.pem, mari buat kunci pribadi untuk server:

    openssl genrsa -out key.pem 4096


  1. ambil server.cnffile ini untuk digunakan sebagai pintasan konfigurasi:

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


  1. buat permintaan penandatanganan sertifikat menggunakan konfigurasi ini:

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


  1. menandatangani permintaan:

    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

Saya menemukan prosedur ini di sini , bersama dengan informasi lebih lanjut tentang cara menggunakan sertifikat ini.

John Slegers
sumber