SSL Sertifikası
SSL Hataları

Node.js ile SSL/HTTPS Kurulumu: Adım Adım Rehber

Node.js/Express uygulamanıza HTTPS ekleyin: sertifika ve anahtar dosyaları, https.createServer, tam zincir, PFX ve reverse proxy yaklaşımı.

7 dk okuma

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.crt kullanın. İstemci tarafında özel CA için NODE_EXTRA_CA_CERTS değişkenini ayarlayın.
  • EACCES 443: 443 ayrıcalıklı porttur; setcap ile 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.

Node.js için SSL sertifikası seçin →

Bu yazıyı paylaş
Yazar

Mahmut

Önerilen SSL Sertifikaları

Tüm Ürünler
EV DigiCert

DigiCert Basic EV SSL

Premium DigiCert güveni, $1.750.000 garantili EV SSL sertifikası.

18.539,55 ₺ /yıl
Detaylar
OV DigiCert

DigiCert Basic OV

Premium DigiCert güveni, $1.250.000 garantili kurumsal OV SSL.

12.920,19 ₺ /yıl
Detaylar
EV DigiCert

DigiCert EV Multi-Domain

Çok alan adı + EV — $1.750.000 garantili DigiCert Multi-Domain EV.

37.238,36 ₺ /yıl
Detaylar

Yorumlar

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

Yorum Yaz