İçindekiler
Node.js uygulamanızı HTTPS ile yayınlamanın iki yolu vardır: sertifikayı doğrudan Node içinde sonlandırmak ya da önüne bir reverse proxy (nginx) koyup TLS'i orada bitirmek. İkisini de göstereceğiz; üretimde çoğu ekip proxy yaklaşımını tercih eder.
1. Gerekli sertifika dosyaları
Sağlayıcınızdan genelde üç parça gelir (SSL sertifikanızı buradan alabilirsiniz):
private.key— özel anahtar (CSR ile üretildi, gizli tutun).certificate.crt— alan adı sertifikanız.ca_bundle.crt— ara sertifika(lar).
Node için en sağlıklısı sertifika + ara sertifikayı birleştiren fullchain dosyasıdır (aşağıda).
2. Saf Node.js ile HTTPS sunucu
const https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('/etc/ssl/ornek/private.key'),
cert: fs.readFileSync('/etc/ssl/ornek/fullchain.crt') // cert + ca_bundle
};
https.createServer(options, (req, res) => {
res.writeHead(200);
res.end('HTTPS aktif!');
}).listen(443, () => console.log('443 dinleniyor'));
80 portunu 443'e yönlendirmek için ayrı bir http sunucusu açıp res.writeHead(301,{Location:...}) ile yönlendirin.
3. Express ile HTTPS
const express = require('express');
const https = require('https');
const fs = require('fs');
const app = express();
app.get('/', (req, res) => res.send('Merhaba HTTPS'));
https.createServer({
key: fs.readFileSync('private.key'),
cert: fs.readFileSync('fullchain.crt')
}, app).listen(443);
PFX kullanıyorsanız: { pfx: fs.readFileSync('cert.pfx'), passphrase: 'parola' }.
4. Tam zincir (fullchain) ve ara sertifika
Node, ara sertifikayı otomatik göndermez; eksikse mobil tarayıcılar "güvenli değil" der. certificate.crt ve ca_bundle.crt'yi birleştirin (sıra: önce alan adı, sonra ara):
cat certificate.crt ca_bundle.crt > fullchain.crt
Zinciri SSL Labs ile doğrulayın; "Chain issues: None" görmelisiniz.
5. Alternatif: reverse proxy (nginx) arkasında
Üretimde önerilen yaklaşım: Node uygulamasını http://127.0.0.1:3000'de çalıştırın, TLS'i nginx'te bitirin. Böylece 443'ü root olmadan dinleme, sertifika yenileme ve yük dengeleme kolaylaşır.
server {
listen 443 ssl;
server_name ornek.com.tr;
ssl_certificate /etc/ssl/ornek/fullchain.crt;
ssl_certificate_key /etc/ssl/ornek/private.key;
location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; }
}
6. Sık hatalar
- UNABLE_TO_VERIFY_LEAF_SIGNATURE: Zincir eksik;
fullchain.crtkullanın. İstemci tarafında özel CA içinNODE_EXTRA_CA_CERTSdeğişkenini ayarlayın. - EACCES 443: 443 ayrıcalıklı porttur;
setcapile yetki verin ya da proxy arkasında çalıştırın. - ERR_SSL_KEY_VALUES_MISMATCH: key ile cert eşleşmiyor; CSR'yi ürettiğiniz anahtarı kullandığınızdan emin olun.
Sıkça Sorulan Sorular
Let's Encrypt mı ücretli sertifika mı? Geliştirme için Let's Encrypt yeterlidir; kurumsal güven, garanti ve OV/EV rozeti için ücretli sertifika tercih edin. Karşılaştırıp seçin.
Sertifika yenilendiğinde uygulamayı yeniden başlatmalı mıyım? Node dosyayı başlangıçta okuduğu için evet; proxy yaklaşımında sadece nginx reload yeterlidir.

Yorumlar
Henüz yorum yapılmamış. İlk yorumu siz yapın!
Yorum Yaz