Bu eğitim Node.js uygulaması için CSR nasıl oluşturulur konusunu göstermektedir. Node.js’te yerleşik bir CSR oluşturma aracı bulunmadığından, özel anahtarı ve Sertifika İmzalama Talebini Node’u çalıştıracak makinede OpenSSL ile oluşturur, CSR’yi Sertifika Yetkilinize gönderir ve ardından verilen sertifikayı fs.readFileSync() ve https.createServer() ile uygulamanıza yüklersiniz.
Aşağıdaki adımlar, OpenSSL’in birlikte geldiği her işletim sisteminde çalışır; bu da mevcut tüm Linux dağıtımlarını, macOS’u ve Windows’u (resmi OpenSSL ikili dosyaları veya Git Bash aracılığıyla) kapsar. Modern OpenSSL, talepleri varsayılan olarak SHA-256 ile imzalar, bu nedenle bir özet (digest) bayrağı eklemenize gerek yoktur.
Adım 1: OpenSSL’in kurulu olduğundan emin olun
Node.js uygulamanızı çalıştıracak makinede OpenSSL’in mevcut olup olmadığını kontrol edin:
openssl version
OpenSSL 3.0.x veya daha yeni bir sürüm gösteren bir satır görmelisiniz. Komut bulunamıyorsa, platformunuz için kurun:
- Debian, Ubuntu:
sudo apt update && sudo apt install openssl - RHEL, AlmaLinux, Rocky Linux, Amazon Linux:
sudo dnf install openssl(veya eski sürümlerdesudo yum install openssl) - macOS: OpenSSL (bazı sürümlerde LibreSSL, Homebrew ile kurulmuşsa OpenSSL 3) zaten Terminal’de mevcuttur. Orijinal sürümü kurmak için:
brew install openssl@3. - Windows: resmi OpenSSL ikili dosyalarını kurun veya OpenSSL’in önceden kurulu geldiği Git Bash’i kullanın.
Adım 2: Özel anahtarı ve CSR’yi oluşturun
Anahtarı ve CSR’yi Node.js’i çalıştıracak makinede oluşturun. Özel anahtar CSR’nin yanında oluşturulur ve bu makinede kalmalıdır. Bu komutları başka bir yerde çalıştırıp ardından anahtarı taşımak, özel anahtara sahip olmanın amacını baştan ortadan kaldırır.
Aşağıdaki komutu çalıştırın. Bu komut, konu (subject) ve Konu Alternatif Adları (SAN’lar) doğrudan komut içinde belirtilerek tek adımda 2048 bit’lik bir RSA özel anahtarı ve eşleşen bir CSR oluşturur, böylece OpenSSL soru sormak için durmaz:
openssl req -new -newkey rsa:2048 -nodes
-keyout yourdomain.key
-out yourdomain.csr
-subj "/C=US/ST=YourState/L=YourCity/O=YourCompany/CN=yourdomain.com"
-addext "subjectAltName=DNS:yourdomain.com,DNS:www.yourdomain.com"
Her bir kısmın işlevi:
- -newkey rsa:2048 yeni bir 2048 bit’lik RSA anahtarı oluşturur. 2048 bit, genel Sertifika Yetkililerinin kabul ettiği mevcut minimum değerdir; daha büyük bir anahtar için rsa:4096 kullanabilir veya ECDSA’ya geçebilirsiniz (aşağıya bakın).
- -nodes, özel anahtarı şifrelenmemiş bırakır, böylece Node.js başlangıçta bir parola sormadan anahtarı okuyabilir. Node’un https modülü, şifrelenmiş bir anahtar için passphrase seçeneğini destekler, ancak parolanın yine de makinedeki bir yerden gelmesi gerekir (bir yapılandırma dosyası, bir ortam değişkeni veya bir gizli anahtar yöneticisi).
- -keyout ve -out, özel anahtar ve CSR dosyalarını adlandırır.
- -subj, sertifika konusunu belirtir. Buraya yer tutucular yerine gerçek şirket adınızı, eyaletinizi ve şehrinizi girin. CN (Common Name / Ortak Ad), birincil alan adınızdır.
- -addext “subjectAltName=…”, sertifikanın kapsaması gereken her ana bilgisayar adını listeler. Genel Sertifika Yetkilileri SAN listesine göre doğrulama yapar, bu nedenle Ortak Adı da buraya dahil edin. -addext bayrağı için OpenSSL 1.1.1 veya daha yeni bir sürüm gereklidir; günümüzdeki her işletim sistemi bunu içerir.
yourdomain.com ifadesini her yerde gerçek alan adınızla değiştirin. Ek ana bilgisayar adlarını kapsamak için, bunları virgülle ayırarak SAN listesine ekleyin, örneğin DNS:api.yourdomain.com. Bir joker karakter (wildcard) için hem joker karakteri hem de düz alan adını dahil edin: DNS:*.yourdomain.com,DNS:yourdomain.com.
Bir ECDSA anahtarını tercih ederseniz (daha küçük ve daha hızlıdır; P-256 yaygın olarak desteklenir), anahtarı ve CSR’yi bunun yerine şu şekilde oluşturun:
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -pkeyopt ec_param_enc:named_curve -nodes
-keyout yourdomain.key
-out yourdomain.csr
-subj "/C=US/ST=YourState/L=YourCity/O=YourCompany/CN=yourdomain.com"
-addext "subjectAltName=DNS:yourdomain.com,DNS:www.yourdomain.com"
Etkileşimli mod (-subj olmadan)
OpenSSL’in her alan için size sormasını tercih ederseniz, -subj bayrağını kaldırın:
openssl req -new -newkey rsa:2048 -nodes
-keyout yourdomain.key -out yourdomain.csr
-addext "subjectAltName=DNS:yourdomain.com,DNS:www.yourdomain.com"
OpenSSL aşağıdaki bilgileri soracaktır:
- Ülke Adı (C): kuruluşunuzun iki harfli ISO ülke kodu (örneğin, US).
- Eyalet veya İl Adı (S): şirketinizin kayıtlı olduğu eyaletin veya ilin tam adı (örneğin, California). Kısaltma kullanmayın.
- Şehir Adı (L): işletmenizin kayıtlı olduğu şehir (örneğin, San Jose).
- Kuruluş Adı (O): şirketinizin yasal adı (örneğin, GPI Holding LLC). Bir DV (Domain Validated / Alan Adı Doğrulamalı) sertifika için bunu boş bırakıp Enter’a basın.
- Organizasyon Birimi Adı (OU): Eylül 2022’den beri kullanımdan kaldırılmıştır ve genel Sertifika Yetkilileri tarafından dikkate alınmaz. Boş bırakın.
- Ortak Ad (CN): güvence altına aldığınız tam nitelikli alan adı (FQDN), örneğin yourdomain.com. Bir joker karakter için *.yourdomain.com kullanın.
- E-posta Adresi: isteğe bağlı. Boş bırakın.
- Bir zorlama parolası (challenge password): artık kullanılmıyor. Boş bırakın.
Adım 3: Dosyalarınızı bulun ve koruyun
Her iki dosyanın da oluşturulduğunu doğrulamak için geçerli dizini listeleyin:
ls
İki yeni dosya görmelisiniz:
- yourdomain.key: özel anahtarınız. Bunu sunucuda tutun, güvenli bir şekilde yedekleyin ve Sertifika Yetkilisi dahil olmak üzere kimseye göndermeyin. Anahtarı elinde bulunduran kişi sitenizin kimliğine bürünebilir.
- yourdomain.csr: Sertifika İmzalama Talebiniz. Bu, SSL sağlayıcısına göndereceğiniz dosyadır.
Linux veya macOS’ta, yalnızca Node.js’i çalıştıran kullanıcının okuyabilmesi için özel anahtarda hemen sıkı izinler ayarlayın:
chmod 600 yourdomain.key
Node.js özel bir hizmet hesabı altında çalışıyorsa (örneğin, node veya www-data), sürecin anahtarı okuyabilmesi için sahibi de ayarlayın:
sudo chown node:node yourdomain.key
Adım 4: CSR’yi doğrulayın (isteğe bağlı ancak önerilir)
Göndermeden önce, CSR’nin doğru konu ve SAN’ları içerdiğini ve imzasının geçerli olduğunu kontrol edin. Bu, talebi yerel olarak OpenSSL ile çözer:
openssl req -noout -text -verify -in yourdomain.csr
Subject satırının bilgilerinizi gösterdiğinden, X509v3 Subject Alternative Name‘in beklediğiniz her ana bilgisayar adını listelediğinden ve imza kontrolünün verify OK yazdırdığından emin olun. İmza algoritması sha256WithRSAEncryption (veya bir ECDSA anahtarı için ecdsa-with-SHA256) olarak görünmelidir. Komut satırını kullanmak istemiyorsanız, aynı alanları bir tarayıcıda okumak için CSR’yi çevrimiçi CSR çözücümüze yapıştırın.
Adım 5: CSR’nizi gönderin
Siparişiniz için CSR’yi kopyalamak üzere içeriğini yazdırın:
cat yourdomain.csr
Bunun gibi bir metin bloğu göreceksiniz:
-----BEGIN CERTIFICATE REQUEST-----
MIIBozCB... (a long string of characters)
-----END CERTIFICATE REQUEST-----
—–BEGIN CERTIFICATE REQUEST—– ve —–END CERTIFICATE REQUEST—– satırları dahil (her işaretin her iki yanında beş tire bulunur) tüm bloğu kopyalayın. Bu blok, CSR’nizin tamamıdır. Satın alma işleminiz sırasında sipariş formuna yapıştırın ve eşleşen özel anahtarı sunucuda yerinde tutun.
Komut satırını kullanmak istemiyorsanız, talebi çevrimiçi CSR Oluşturucumuz ile de oluşturabilirsiniz. Bu aracın özel anahtarı tarayıcınızda oluşturduğunu unutmayın, bu nedenle o anahtarı kendiniz kaydedin ve Node.js sunucusuna taşıyın.
Sertifika Yetkilisi sertifikayı verdikten sonra ne olur
Sertifika Yetkilisi CSR’yi doğruladıktan ve sertifikayı verdikten sonra, genellikle sunucu sertifikanızı (alan adınızın adını taşıyan bir .crt dosyası) ve bir veya daha fazla ara sertifikayı, bazen bir .ca-bundle dosyasına paketlenmiş olarak alırsınız. Node.js bunları JavaScript’te şu şekilde yükler: sunucu sertifikasını ve ara sertifikaları tek bir fullchain.crt dosyasında birleştirin, ardından fs.readFileSync() ile okuyun ve https.createServer()‘a iletin:
const https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('/path/to/yourdomain.key'),
cert: fs.readFileSync('/path/to/fullchain.crt'),
minVersion: 'TLSv1.2'
};
https.createServer(options, (req, res) => {
res.writeHead(200);
res.end('Welcome to a Node.js HTTPS servern');
}).listen(443);
Çoğu üretim kurulumunun kullandığı desen, bu tam zincir (fullchain) desenidir. Tüm süreç (ES modülleri örneği, alternatif bir ca: dizisi yaklaşımı ve bir Express örneği dahil) Node.js SSL kurulum eğitimimizde ele alınmaktadır.
Üretim dağıtımları hakkında bir not. 2026 yılında, genel trafiği işleyen çoğu Node.js uygulaması, TLS’yi kenar noktada (edge) sonlandıran ve düz HTTP veya HTTP/2’yi yüksek bir yerel bağlantı noktasında Node’a ileten bir ters proxy veya bulut yük dengeleyicisinin (NGINX, HAProxy, Caddy, AWS ALB, Cloudflare, Fastly) arkasında çalışır. Bu düzende, sertifika (ve yukarıda oluşturduğunuz CSR) Node sürecinde değil, proxy’de veya yük dengeleyicide bulunur. Node.js’in TLS’yi doğrudan sonlandırmasına izin vermek geliştirme, dahili hizmetler ve küçük dağıtımlar için tamamen uygundur; genele açık bir üretim uygulaması için ise TLS’yi kenar noktada sonlandırmak daha yaygın bir yapıdır.
Bugün SSL Dragon’dan sipariş vererek SSL Sertifikalarında %10 indirimden yararlanın!
Hızlı düzenleme, güçlü şifreleme, %99,99 tarayıcı güvenilirliği, özel destek ve 25 günlük para iade garantisi. Kupon kodu: SAVE10


