Lihat jawaban cepat resmi di bawah ini oleh @ Jacob Marble.
clayzermk1
21
Sampel ini tidak berfungsi lagi karena implementasi HTTPS dilakukan kembali di Node.JS 0.4. Lihat dokumen terkait di nodejs.org. stackoverflow.com/questions/5136353/…
scottyab
11
Jawaban ini sudah sangat tua dan tidak berfungsi lagi. Silakan lihat jawabannya dengan pkyeck di bawah ini, atau buka: nodejs.org/api/https.html
var express = require('express');var https = require('https');var http = require('http');var fs = require('fs');// This line is from the Node.js HTTPS documentation.var options ={
key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
cert: fs.readFileSync('test/fixtures/keys/agent2-cert.cert')};// Create a service (the app object is just a callback).var app = express();// Create an HTTP service.
http.createServer(app).listen(80);// Create an HTTPS service identical to the HTTP service.
https.createServer(options, app).listen(443);
Bagus, baru saja memposting ini sendiri. Terima kasih. Selain itu, saya menemukan artikel ini bermanfaat untuk menghasilkan sertifikat yang ditandatangani sendiri.
clayzermk1
1
Pastikan Anda memasukkan optionsdulu https.createServer, untuk menghindari kesalahan samar.
wberry
1
Saya sedang menyiapkan port server https yang hampir identik 8888 dan tidak yakin bagaimana mengubah rute. ketika saya menjalankan curl curl --insecure localhost: 8888 curl: (35) Kesalahan protokol SSL tidak dikenal sehubungan dengan localhost: 8888 darimana datangnya kesalahan dan bagaimana cara mengatasinya. Ketika saya mengetik localhost: 8888 di browser, hang dan https: / localhost: 8888 memberikan kesalahan SSL
reza
2
@Costa Anda dapat mengarahkan pengguna dari http ke https dengan express-force-ssl atau middleware tulisan tangan - cukup mudah
floatdrop
1
@NathanMcKaskle Anda dapat menonaktifkan kata sandi: Periksa panduan ini tetapi jika Anda menggunakan macOS pastikan bahwa panjang kunci yang dihasilkan setidaknya 2048:openssl genrsa -out key.pem 2048
sakisk
87
Menemukan pertanyaan ini saat googling "node https" tetapi contoh dalam jawaban yang diterima sudah sangat tua - diambil dari dokumen versi node saat ini (v0.10), seharusnya terlihat seperti ini:
Bekerja seperti pesona. Informasi ini sangat berguna ketika saya menjalankan alat node.js (PDFJS) di atas aplikasi PHP yang baru-baru ini dipaksa untuk berjalan di https. Iframe sangat tidak senang memuat aplikasi node.js saya pada port alternatif, non-https.
lewsid
2
Ini terlihat bagus, tetapi bagaimana saya bisa menghasilkan file yang Anda perlukan di sana ( *.pem)? Saya mencoba mengikuti halaman ini , tetapi ketika membuka localhost:8000di browser, tidak ada data yang diterima (hanya memuat ...).
Ionică Bizău
7
@ IonicăBizău, untuk menghasilkan kunci, instal openssl, lalu dalam cmd prompt, ketikopenssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 3001
mido
2
@ IonicăBizău Anda harus langsung pergi ke https://localhost:8080. HTTP BUKAN HTTPS.
Florian Wendelborn
Apakah mungkin membuat https-server dengan folder? Jadi Anda dapat meletakkan file di dalamnya dan mengakses file itu seperti localhost: 81 / main.js
FrenkyB
47
Jawaban di atas baik tetapi dengan Express dan node ini akan berfungsi dengan baik.
Karena express membuat aplikasi untuk Anda, saya akan lewati itu di sini.
Saya perhatikan bahwa tidak ada jawaban yang menunjukkan bahwa menambahkan CA Root Menengah ke rantai, berikut adalah beberapa contoh konfigurasi nol untuk dimainkan agar dapat melihat bahwa:
var options ={// this is the private key only
key: fs.readFileSync(path.join('certs','my-server.key.pem'))// this must be the fullchain (cert + intermediates), cert: fs.readFileSync(path.join('certs','my-server.crt.pem'))// this stuff is generally only for peer certificates//, ca: [ fs.readFileSync(path.join('certs', 'my-root-ca.crt.pem'))]//, requestCert: false};var server = https.createServer(options);var app = require('./my-express-or-connect-app').create(server);
server.on('request', app);
server.listen(443,function(){
console.log("Listening on "+ server.address().address +":"+ server.address().port);});var insecureServer = http.createServer();
server.listen(80,function(){
console.log("Listening on "+ server.address().address +":"+ server.address().port);});
Ini adalah salah satu hal yang sering lebih mudah jika Anda tidak mencoba melakukannya secara langsung melalui koneksi atau express, tetapi biarkan httpsmodul asli menanganinya dan kemudian menggunakannya untuk melayani Anda menghubungkan / mengekspresikan aplikasi.
Juga, jika Anda menggunakan server.on('request', app)alih-alih melewati aplikasi saat membuat server, itu memberi Anda kesempatan untuk melewatkan serverinstance ke beberapa fungsi initializer yang membuat aplikasi connect / express (jika Anda ingin melakukan websockets melalui ssl pada server yang sama, untuk contoh).
Ini adalah penjelasan yang bagus tetapi, tautan yang disediakan di bagian pembaruan, rusak (memberikan 500 kesalahan)
Chucky
8
Untuk mengaktifkan aplikasi Anda untuk mendengarkan baik httpdan httpspada port 80dan 443masing-masing, melakukan hal berikut
Buat aplikasi ekspres:
var express = require('express');var app = express();
Aplikasi yang dikembalikan oleh express()adalah fungsi JavaScript. Ini dapat diteruskan ke server HTTP Node sebagai panggilan balik untuk menangani permintaan. Ini membuatnya mudah untuk menyediakan versi HTTP dan HTTPS aplikasi Anda menggunakan basis kode yang sama.
Buat file openssl.cnf dan unduh isinya dari: http://web.mit.edu/crypto/openssl.cnf
openssl.cnf dapat diletakkan di mana saja tetapi path harus benar ketika kita memberikan command prompt.
Buka perintah propmt dan set path openssl.cnf C: \ set OPENSSL_CONF = d: /openssl.cnf 5.B jalankan ini dalam cmd: C: \ openssl-0.9.8r-i386-win32-rev2> openssl.exe
Kemudian Jalankan OpenSSL> genrsa -des3 -out server.enc.key 1024
Kemudian akan meminta frase lulus: masukkan 4 hingga 11 karakter sebagai kata sandi Anda untuk sertifikat
Kemudian jalankan openssl> req -baru -kunci server.enc.key -out server.csr
Kemudian akan meminta beberapa detail seperti nama negara kode negara dll. Isi secara bebas. 10. Kemudian Jalankan openssl> rsa -in server.enc.key -out server.key
Jalankan OpenSSL ini> x509 -req -days 365 -in server.csr -signkey server.key -out server.crt kemudian gunakan kode sebelumnya yang ada di stack overflow Terima kasih
Jawaban:
Saya menemukan contoh berikut.
https://web.archive.org/web/20120203022122/http://www.silassewell.com/blog/2010/06/03/node-js-https-ssl-server-example/
Ini berfungsi untuk simpul v0.1.94 - v0.3.1.
server.setSecure()
dihapus di versi node yang lebih baru.Langsung dari sumber itu:
sumber
setSecure
sudah ditinggalkan. Alih-alih, periksa ini stackoverflow.com/questions/5136353/node-js-https-secure-errorThe Ekspres API doc mantra ini keluar cukup jelas.
Selain itu jawaban ini memberikan langkah-langkah untuk membuat sertifikat yang ditandatangani sendiri.
Saya telah menambahkan beberapa komentar dan cuplikan dari dokumentasi HTTPS Node.js :
sumber
options
duluhttps.createServer
, untuk menghindari kesalahan samar.openssl genrsa -out key.pem 2048
Menemukan pertanyaan ini saat googling "node https" tetapi contoh dalam jawaban yang diterima sudah sangat tua - diambil dari dokumen versi node saat ini (v0.10), seharusnya terlihat seperti ini:
sumber
*.pem
)? Saya mencoba mengikuti halaman ini , tetapi ketika membukalocalhost:8000
di browser, tidak ada data yang diterima (hanya memuat ...).openssl
, lalu dalam cmd prompt, ketikopenssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 3001
https://localhost:8080
. HTTP BUKAN HTTPS.Jawaban di atas baik tetapi dengan Express dan node ini akan berfungsi dengan baik.
Karena express membuat aplikasi untuk Anda, saya akan lewati itu di sini.
sumber
module.exports
? Tidak perlu untuk ituPengaturan minimal untuk server HTTPS di Node.js akan menjadi seperti ini:
Jika Anda juga ingin mendukung permintaan http, Anda hanya perlu membuat modifikasi kecil ini:
sumber
Memperbarui
Gunakan Let's Encrypt via Greenlock.js
Pos Asli
Saya perhatikan bahwa tidak ada jawaban yang menunjukkan bahwa menambahkan CA Root Menengah ke rantai, berikut adalah beberapa contoh konfigurasi nol untuk dimainkan agar dapat melihat bahwa:
Potongan:
Ini adalah salah satu hal yang sering lebih mudah jika Anda tidak mencoba melakukannya secara langsung melalui koneksi atau express, tetapi biarkan
https
modul asli menanganinya dan kemudian menggunakannya untuk melayani Anda menghubungkan / mengekspresikan aplikasi.Juga, jika Anda menggunakan
server.on('request', app)
alih-alih melewati aplikasi saat membuat server, itu memberi Anda kesempatan untuk melewatkanserver
instance ke beberapa fungsi initializer yang membuat aplikasi connect / express (jika Anda ingin melakukan websockets melalui ssl pada server yang sama, untuk contoh).sumber
Untuk mengaktifkan aplikasi Anda untuk mendengarkan baik
http
danhttps
pada port80
dan443
masing-masing, melakukan hal berikutBuat aplikasi ekspres:
Aplikasi yang dikembalikan oleh
express()
adalah fungsi JavaScript. Ini dapat diteruskan ke server HTTP Node sebagai panggilan balik untuk menangani permintaan. Ini membuatnya mudah untuk menyediakan versi HTTP dan HTTPS aplikasi Anda menggunakan basis kode yang sama.Anda dapat melakukannya sebagai berikut:
Untuk detail lengkap, lihat dokumen
sumber
Anda juga dapat menggunakan arsip ini dengan kerangka kerja Fastify:
(dan jalankan
openssl req -nodes -new -x509 -keyout server.key -out server.cert
untuk membuat file jika Anda perlu menulis tes)sumber
sumber