Saya mencoba membuat HTTPS bekerja pada express.js untuk node, dan saya tidak bisa mengetahuinya.
Ini app.js
kode saya .
var express = require('express');
var fs = require('fs');
var privateKey = fs.readFileSync('sslcert/server.key');
var certificate = fs.readFileSync('sslcert/server.crt');
var credentials = {key: privateKey, cert: certificate};
var app = express.createServer(credentials);
app.get('/', function(req,res) {
res.send('hello');
});
app.listen(8000);
Ketika saya menjalankannya, sepertinya hanya menanggapi permintaan HTTP.
Saya menulis node.js
aplikasi HTTPS berbasis vanilla sederhana :
var fs = require("fs"),
http = require("https");
var privateKey = fs.readFileSync('sslcert/server.key').toString();
var certificate = fs.readFileSync('sslcert/server.crt').toString();
var credentials = {key: privateKey, cert: certificate};
var server = http.createServer(credentials,function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
});
server.listen(8000);
Dan ketika saya menjalankan aplikasi ini, itu tidak merespon permintaan HTTPS. Perhatikan bahwa saya tidak berpikir toString () pada hasil fs penting, karena saya telah menggunakan kombinasi keduanya dan masih tidak ada es bueno.
Sunting untuk menambahkan:
Untuk sistem produksi, Anda mungkin lebih baik menggunakan Nginx atau HAProxy untuk permintaan proxy ke aplikasi nodejs Anda. Anda dapat mengatur nginx untuk menangani permintaan ssl dan hanya berbicara http ke app.js. simpul Anda
EDIT TO ADD (4/6/2015)
Untuk sistem yang menggunakan AWS, Anda lebih baik menggunakan EC2 Elastic Load Balancers untuk menangani Termination SSL, dan memungkinkan lalu lintas HTTP reguler ke server web EC2 Anda. Untuk keamanan lebih lanjut, atur grup keamanan Anda sedemikian rupa sehingga hanya ELB yang diizinkan mengirim lalu lintas HTTP ke mesin virtual EC2, yang akan mencegah lalu lintas HTTP tidak terenkripsi eksternal mengenai mesin Anda.
Jawaban:
Di express.js (sejak versi 3) Anda harus menggunakan sintaks itu:
Dengan cara itu Anda memberikan middleware ekspres ke server http / https asli
Jika Anda ingin aplikasi Anda berjalan pada port di bawah 1024, Anda harus menggunakan
sudo
perintah (tidak disarankan) atau menggunakan proxy terbalik (misalnya nginx, haproxy).sumber
localhost:80
tetapi tidakhttps://localhost:443
Pertama, Anda perlu membuat selfsigned.key dan selfsigned.crt file. Pergi ke Buat Sertifikat SSL yang Ditandatangani Sendiri Atau lakukan langkah-langkah berikut.
Pergi ke terminal dan jalankan perintah berikut.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./selfsigned.key -out selfsigned.crt
sumber
Saya mengalami masalah serupa dengan mendapatkan SSL untuk bekerja pada port selain port 443. Dalam kasus saya, saya memiliki sertifikat bundel serta sertifikat dan kunci. Sertifikat bundel adalah file yang menyimpan beberapa sertifikat, simpul mengharuskan Anda memecah sertifikat tersebut menjadi elemen-elemen terpisah dari array.
Di app.js Anda perlu menentukan https dan membuat server yang sesuai. Juga, pastikan bahwa port yang Anda coba gunakan sebenarnya memungkinkan lalu lintas masuk.
sumber
Termasuk Poin:
Penanganan HTTP dan WS
Konfigurasi SSL
Dalam Sailsjs ada dua cara untuk mengkonfigurasi semua hal, pertama adalah mengkonfigurasi di folder config dengan masing-masing memiliki file terpisah (seperti koneksi database tentang pengaturan terletak di dalam koneksi.js). Dan yang kedua adalah mengkonfigurasi pada struktur file basis lingkungan, masing-masing file lingkungan menyajikan
config/env
folder dan setiap file berisi pengaturan untuk env tertentu.Layar pertama terlihat di folder config / env dan kemudian berharap untuk config / * .js
Sekarang mari kita setup ssl in
config/local.js
.Atau dalam produksi
http / https & ws / wss redirection
Di sini ws adalah Web Socket dan wss mewakili Secure Web Socket, karena kami mengatur ssl maka sekarang http dan ws kedua permintaan menjadi aman dan bertransformasi menjadi https dan wss masing-masing.
Ada banyak sumber dari aplikasi kami akan menerima permintaan seperti posting blog, posting media sosial, tetapi server kami hanya berjalan di https sehingga ketika setiap permintaan datang dari http itu memberikan kesalahan "Situs ini tidak dapat dijangkau" di browser klien. Dan kami kehilangan lalu lintas situs web kami. Jadi kita harus mengarahkan permintaan http ke https, aturan yang sama memungkinkan untuk websocket jika tidak maka socket akan gagal.
Jadi kita perlu menjalankan server yang sama pada port 80 (http), dan mengalihkan semua permintaan ke port 443 (https). Berlayar mengkompilasi file config / bootstrap.js terlebih dahulu sebelum mengangkat server. Di sini kita dapat memulai server ekspres pada port 80.
Di config / bootstrap.js (Buat server http dan arahkan semua permintaan ke https)
sumber
Gunakan greenlock-express: SSL Gratis, HTTPS Otomatis
Greenlock menangani penerbitan dan pembaruan sertifikat (melalui Let's Encrypt) dan http => https redirection, out-of-the-box.
express-app.js
:server.js
:Screencast
Tonton demonstrasi QuickStart: https://youtu.be/e8vaR4CEZ5s
Untuk Localhost
Hanya menjawab ini sebelumnya karena ini adalah pertanyaan tindak lanjut yang umum:
Anda tidak dapat memiliki sertifikat SSL di localhost. Namun, Anda dapat menggunakan sesuatu seperti Telebit yang akan memungkinkan Anda menjalankan aplikasi lokal sebagai aplikasi asli.
Anda juga dapat menggunakan domain pribadi dengan Greenlock melalui tantangan DNS-01, yang disebutkan dalam README bersama dengan berbagai plugin yang mendukungnya.
Pelabuhan Non-standar (mis. No 80/443)
Baca catatan di atas tentang localhost - Anda tidak dapat menggunakan port non-standar dengan Let's Encrypt.
Namun, Anda dapat mengekspos port non-standar internal Anda sebagai port standar eksternal melalui port-forward, rute-sni, atau menggunakan sesuatu seperti Telebit yang melakukan routing-SNI dan port-forwarding / relaying untuk Anda.
Anda juga dapat menggunakan tantangan DNS-01 dalam hal ini Anda tidak perlu membuka port sama sekali dan Anda juga dapat mengamankan domain di jaringan pribadi dengan cara ini.
sumber
Beginilah cara kerjanya untuk saya. Pengalihan yang digunakan akan mengarahkan semua http normal juga.
sumber
Ini adalah kode kerja saya untuk express 4.0 .
express 4.0 sangat berbeda dari 3.0 dan lainnya.
4.0 Anda memiliki file / bin / www, yang akan Anda tambahkan https di sini.
"npm start" adalah cara standar Anda memulai express 4.0 4.0 server.
Fungsi readFileSync () harus menggunakan __dirname untuk mendapatkan direktori saat ini
sementara membutuhkan () gunakan ./ merujuk ke direktori saat ini.
Pertama Anda meletakkan file private.key dan public.cert di bawah folder / bin, Ini adalah folder yang sama dengan file WWW .
sumber