Artikel ini menerangkan bagaimana untuk menjamin pelayan Express.js anda dengan HTTPS menggunakan sijil Let's Encrypt, dan meningkatkan keselamatan dengan HSTS dan parameter Diffie-Hellman yang lebih kuat.
Dalam landskap digital hari ini, HTTPS tidak boleh dirunding. Ia dijangkakan oleh pengguna, faktor ranking Google, dan pelayar secara aktif menyerlahkan tapak yang kurang. Tutorial ini menunjukkan menambah sijil Let's Enrypt ke aplikasi Express.js anda. Walau bagaimanapun, keselamatan pihak klien adalah sama pentingnya; Kami akan meneroka menguatkuasakan sambungan yang disulitkan ke pelayan luaran, walaupun tidak diaktifkan secara lalai.
Takeaways utama:
HTTPS adalah penting untuk keselamatan laman web pada tahun 2020 dan seterusnya, menawarkan pengesahan, privasi, kerahsiaan, dan integriti data. Ini faktor kedudukan Google dan jangkaan pengguna.
https
Standard HTTP/2 (RFC 7540, Mei 2015) Mandat penyulitan, menjadikan HTTPS lalai. Ini meningkatkan penggunaan HTTPS. Dari perspektif penyemak imbas, mencapai tahap IP melibatkan lapisan ini:
Pelayar Pelanggan
TLS 1.3 adalah versi terkini, menggantikan SSL 3.0 (walaupun tidak beroperasi). Ia menggunakan tiga saluran yang disulitkan: rantaian sijil, kriptografi utama awam untuk pertukaran utama, dan kriptografi simetri untuk pemindahan data. SHA2 atau algoritma hashing yang lebih kuat disyorkan (SHA1 usang). Peningkatan data melanggar permintaan pengguna bahan api untuk keselamatan dalam talian yang dipertingkatkan. HTTPS EFF Everywhere Extension Extension menguatkuasakan penyulitan di mana mungkin, termasuk permintaan menulis semula untuk tapak dengan sokongan HTTPS separa atau menyekat HTTP sepenuhnya.
Komunikasi Asas:
Pengesahan sijil melibatkan mengesahkan tandatangan, tarikh tamat tempoh, rantaian akar yang dipercayai, dan status pembatalan. Sijil Pihak Berkuasa Sijil yang Dipercayai (CAS); Kompromi CA membatalkan semua sijilnya. Urutan Https Handshake: Inisialisasi Pelanggan, Sijil dan Mesej Pertukaran Utama dari Pelayan, Pertukaran Kunci Pelanggan dan Spesifikasi Cipher, Pengesahan Pelayan, dan Penutupan Handshake.
urutan ini bebas daripada http; HTTPS hanya mengubah pengendalian soket. Permintaan HTTP kekal, tetapi soket menyulitkan kandungan (tajuk dan badan).
pelaksanaan https di express.js:
node.js menggunakan modul
untuk komunikasi selamat. Penggunaannya mencerminkan modul: https
http
const https = require("https"), fs = require("fs"); const options = { key: fs.readFileSync("/srv/www/keys/my-site-key.pem"), cert: fs.readFileSync("/srv/www/keys/chain.pem") }; const app = express(); app.use((req, res) => { res.writeHead(200); res.end("hello world\n"); }); app.listen(8000); https.createServer(options, app).listen(8080);
dengan laluan sijil yang dihasilkan (dijelaskan di bawah). /srv/www/keys/my-site-key.pem
/srv/www/keys/chain.pem
Certbot mengautomasikan Let's Encrypt Penjanaan dan Pengurusan Sijil. Pasang certBot (arahan berbeza dengan OS; contoh ini menggunakan Ubuntu):
Plugin
sudo apt-get update sudo apt-get install software-properties-common sudo add-apt-repository universe sudo add-apt-repository ppa:certbot/certbot sudo apt-get update
certonly --webroot
certbot certonly --webroot -w /var/www/example/ -d www.example.com -d example.com
options
const helmet = require("helmet"); // ... app.use(helmet());
openssl dhparam -out /var/www/example/sslcert/dh-strong.pem 2048
: dhparam
options
const options = { // ... dhparam: fs.readFileSync("/var/www/example/sslcert/dh-strong.pem") };
Seksyen Soalan Lazim telah ditinggalkan untuk keringkasan, tetapi maklumat yang disediakan merangkumi aspek teras teks asal.
Atas ialah kandungan terperinci Cara Menggunakan SSL/TLS dengan Node.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!