Bagaimana cara menggunakan diri menandatangani sertifikat untuk HTTPS Node.js server?
Saya sudah mulai menulis sebuah wrapper untuk API yang membutuhkan semua permintaan harus melalui HTTPS. Alih-alih membuat permintaan aktual API sementara saya mengembangkan dan menguji itu saya ingin menjalankan saya sendiri server lokal yang mengolok-olok tanggapan.
Saya bingung tentang bagaimana cara membuat sertifikat yang saya butuhkan untuk membuat HTTPS server dan mengirim permintaan untuk itu.
Server saya terlihat seperti ini:
var options = {
key: fs.readFileSync('./key.pem'),
cert: fs.readFileSync('./cert.pem')
};
https.createServer(options, function(req, res) {
res.writeHead(200);
res.end('OK\n');
}).listen(8000);
Pem file yang dihasilkan dengan:
openssl genrsa 1024 > key.pem
openssl req -x509 -new -key key.pem > cert.pem
Dan permintaan terlihat seperti ini:
var options = {
host: 'localhost',
port: 8000,
path: '/api/v1/test'
};
https.request(options, function(res) {
res.pipe(process.stdout);
}).end();
Dengan setup ini saya mendapatkan Kesalahan: DEPTH_ZERO_SELF_SIGNED_CERT
, jadi saya pikir saya perlu menambahkan ca
pilihan untuk permintaan.
Jadi pertanyaan saya adalah bagaimana saya harus menghasilkan berikut ini:
- Server
key
? - Server
cert
? - The
ca
untuk permintaan?
Saya telah membaca beberapa hal tentang menghasilkan sertifikat yang ditandatangani dengan openssl, tetapi dapat't tampaknya untuk membungkus kepala saya sekitar itu dan mencari tahu mana kunci dan sertifikat untuk digunakan di mana saya node kode.
Update
API menyediakan sertifikat CA untuk menggunakan bukan default. Kode berikut karya-karya yang menggunakan sertifikat mereka dan ini adalah apa yang saya ingin mereproduksi secara lokal.
var ca = fs.readFileSync('./certificate.pem');
var options = {
host: 'example.com',
path: '/api/v1/test',
ca: ca
};
options.agent = new https.Agent(options);
https.request(options, function(res) {
res.pipe(process.stdout);
}).end();
Update (Jan 2018): Apakah anda need diri menandatangani sertifikat?
Atau akan nyata sertifikat mendapatkan pekerjaan yang dilakukan dengan baik? Apakah anda mempertimbangkan semua ini?
(Catatan: Let's Mengenkripsi juga dapat mengeluarkan sertifikat untuk jaringan pribadi)
ScreenCast
https://coolaj86.com/articles/how-to-create-a-csr-for-https-tls-ssl-rsa-pems/
Lengkap, contoh Kerja
https://github.com/coolaj86/nodejs-self-signed-certificate-example
Menggunakan
localhost.greenlock.domain
sebagai contoh (ini poin ke 127.0.0.1):server.js
client.js
Dan script yang membuat file sertifikat:
make-certs.sh
Misalnya:
Mudah-mudahan hal ini menempatkan paku di peti mati yang satu ini.
Dan beberapa penjelasan lebih lanjut: https://github.com/coolaj86/node-ssl-root-cas/wiki/Painless-Self-Signed-Certificates-in-node.js
Install pribadi cert Mobile Safari pada iOS
Yang anda butuhkan untuk membuat salinan dari sertifikat root ca DER format dengan .crt ekstensi:
Kemudian anda hanya dapat melayani file dengan server web anda. Ketika anda mengklik link yang anda harus bertanya jika anda ingin menginstal sertifikat.
Untuk contoh bagaimana ini bekerja, anda dapat mencoba menginstal MIT's Otoritas Sertifikat: https://ca.mit.edu/mitca.crt
Terkait Contoh
Coba tambahkan ini dengan permintaan anda pilihan
Anda pembangkitan kunci terlihat baik-baik saja. Seharusnya kau't perlu ca karena anda tidak't menolak unsigned permintaan.
Tambahkan .toString() untuk akhir anda readFileSync metode sehingga anda benar-benar melewati sebuah string, bukan file objek.
Mencoba menambahkan
Prosedur ini memungkinkan anda untuk membuat sebuah otoritas sertifikat & sertifikat :
ca.cnf
file untuk digunakan sebagai konfigurasi shortcut :wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/ca.cnf
openssl req -new -x509 -days 9999 -config ca.cnf -keyout ca-kunci.pem-out ca-cert.pem
ca-kunci.pem
danca-cert.pem
, let's menghasilkan sebuah private key untuk server :openssl genrsa-out key.pem 4096
server.cnf
file untuk digunakan sebagai konfigurasi shortcut :wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/server.cnf
openssl req -new -config server.cnf -kunci kunci.pem-program csr.pem
openssl x509 -req -extfile server.cnf -hari 999 -passin "pass:password" -dalam csr.pem-CA ca-cert.pem-CAkey ca-kunci.pem-CAcreateserial -out cert.pem
Saya menemukan prosedur ini di sini, bersama dengan informasi lebih lanjut tentang cara untuk menggunakan sertifikat ini.