Bu eğitimde, OpenSSL kullanarak Heroku için nasıl CSR (Sertifika İmzalama Talebi) oluşturulacağını ve verilen sertifikanın Heroku CLI ile nasıl yükleneceğini göstereceğiz.
Heroku’nun platformun kendisinde yerleşik bir CSR formu bulunmaz, bu nedenle talep ve eşleşen özel anahtar platform dışında (yerel Linux, macOS veya Windows makinenizde ya da OpenSSL bulunan herhangi bir kabukta) oluşturulur. Sertifika Yetkilisi sertifikayı verdikten sonra, bunu ara sertifika zinciriyle birleştirip heroku certs:add komutuyla yüklersiniz.
Heroku’da gerçekten CSR’a ihtiyacınız var mı?
Çoğu Heroku uygulaması için cevap hayırdır. Heroku’nun Otomatik Sertifika Yönetimi (ACM) özelliği, uygulamadaki her özel alan adı için ücretsiz bir Let’s Encrypt sertifikası sağlar ve otomatik olarak yeniler; CSR oluşturmanıza ya da yenileme takvimi tutmanıza gerek kalmaz. ACM, Eco, Basic, Standard ve Performance dyno’larda kullanılabilir. Kullanım durumunuz ACM’ye uygunsa, tek bir CLI komutuyla etkinleştirebilirsiniz:
heroku certs:auto:enable -a your-app-name
Aşağıdaki durumlardan biri geçerliyse CSR oluşturup kendi yönettiğiniz (üçüncü taraf) bir sertifika kullanın:
- Bir joker karakter (wildcard) sertifikasına ihtiyacınız var. ACM, her özel alan adı için yalnızca tek isimli Let’s Encrypt sertifikaları verir, *.example.com gibi sertifikalar vermez.
- OV veya EV doğrulamasına ihtiyacınız var. ACM yalnızca DV sağlar.
- Politikanız veya sözleşmeniz, Let’s Encrypt dışında belirli bir Sertifika Yetkilisi gerektiriyor.
- Zaten geçerli bir sertifikanız var ve bunu yeniden vermeden Heroku’da yeniden dağıtmak istiyorsunuz.
- Hepsi bu Heroku uygulamasında bulunmayan ana bilgisayar adlarını kapsayan çok alanlı (SAN) bir sertifikaya ihtiyacınız var.
Yukarıdakilerden hiçbiri geçerli değilse, CSR işlemini atlayıp ACM kullanın. Kurulum sürecinin kendisi için Heroku’ya SSL sertifikası nasıl kurulur kılavuzumuza bakın.
CSR oluşturmadan önce bilmeniz gereken Heroku SSL temelleri
CSR’ın ve anahtarın nasıl görünmesi gerektiğini belirleyen birkaç platform sınırlaması vardır:
- SNI varsayılandır. Her yeni uygulama, Sunucu Adı Belirtimi’ne (Server Name Indication) dayanan Heroku SSL‘i kullanır; bu sayede tek bir Heroku uç noktası, kendi sertifikalarına sahip birden fazla HTTPS ana bilgisayar adına hizmet verebilir. Eski SSL Endpoint eklentisi 2021’de kullanımdan kaldırıldı (yeni sağlama 14 Mayıs 2021’de durduruldu; ürün 18 Ekim 2021’de kullanım ömrünün sonuna ulaştı) ve yeni uygulamalarda kullanılamaz.
- Yalnızca RSA anahtarları. Heroku’nun SSL altyapısı, 2048 bit veya daha büyük RSA özel anahtarlarını kabul eder. ECDSA anahtarları manuel sertifika yüklemelerinde desteklenmez, bu nedenle CSR’ı -newkey rsa:2048 ile oluşturun (politikanız daha büyük bir anahtar gerektiriyorsa rsa:3072 / rsa:4096 kullanabilirsiniz).
- Tam zincir PEM dosyası gereklidir. Heroku, önce son varlık sertifikasının, ardından bitişik şekilde ara CA paketinin bulunduğu tek bir PEM dosyası bekler. Yalnızca yaprak (leaf) sertifika içeren bir dosya, yükleme sırasında reddedilir.
- Şifrelenmemiş özel anahtar. Sertifikayla birlikte yüklenen anahtar, parola korumalı olamaz. Aşağıdaki OpenSSL komutu, anahtarı açık (şifrelenmemiş) PEM biçiminde yazmak için -nodes kullanır.
- Özel alan adı ön koşulu. Heroku, özel alan adı
heroku domains:addkomutuyla uygulamaya kaydedilip alan adına özel *.herokudns.com DNS hedefine yönlendirilene kadar herhangi bir sertifikayı (ACM veya manuel) bağlamaz.
Heroku için OpenSSL ile CSR oluşturma
Eğer CSR’ınızı zaten oluşturduysanız ve Sertifika Yetkilinizden imzalı sertifikayı aldıysanız, doğrudan Sertifikayı Heroku’ya yükleme bölümüne geçebilirsiniz. Heroku dağıtımı için CSR oluşturmanın iki yolu vardır:
- SSL Dragon CSR Oluşturucu‘yu kullanın: kısa bir form üzerinden tarayıcınızda hem CSR’ı hem de eşleşen RSA özel anahtarını oluşturur; ardından CSR’ı SSL siparişiniz sırasında yapıştırırsınız.
- CSR’ı kendiniz, OpenSSL kullanarak, ister yerel makinenizde ister OpenSSL’in yüklü olduğu herhangi bir kabukta oluşturun. Aşağıdaki adımlar bu yolu kapsar.
Adım 1: OpenSSL ile bir kabuk açın
OpenSSL, her güncel Linux dağıtımıyla ve macOS ile birlikte gelir. Windows’ta kurulum yapmanız gerekir (bkz. Windows’a OpenSSL kurma kılavuzumuz) ve komutu PowerShell veya Komut İstemi’nde çalıştırın. Yazma izniniz olan herhangi bir klasörde bir terminal açın: OpenSSL, CSR ve anahtar dosyalarını burada düz metin olarak oluşturacaktır, böylece işiniz bittiğinde bunları makineden taşıyabilirsiniz.
Adım 2: OpenSSL komutunu çalıştırın
Kabuğunuzda aşağıdaki komutu çalıştırın. yourdomain yerine gerçek alan adınızı yazın (örneğin, example.com):
openssl req -new -newkey rsa:2048 -nodes
-keyout yourdomain.key -out yourdomain.csr
-addext "subjectAltName = DNS:yourdomain.com,DNS:www.yourdomain.com"
Her bir bayrağın (flag) ne işe yaradığı:
- -new yeni bir CSR oluşturur.
- -newkey rsa:2048, CSR ile birlikte yeni bir 2048 bit RSA özel anahtarı oluşturur. Politikanız daha büyük bir anahtar gerektiriyorsa rsa:3072 veya rsa:4096 kullanın. ECDSA’ya geçmeyin: Heroku, manuel yüklemelerde ECC anahtarlarını reddeder.
- -nodes, anahtarı parola olmadan yazar (OpenSSL 3.x’te eşdeğer bayrak -noenc‘tir; ikisi de çalışır). Heroku,
heroku certs:addsırasında şifrelenmiş bir özel anahtarı reddeder. - -keyout ve -out, anahtar ve CSR için çıkış yollarıdır.
- -addext “subjectAltName=DNS:…”, Konu Alternatif Adları’nı (SAN) doğrudan gömer (OpenSSL 1.1.1 veya sonrasını gerektirir). Her modern tarayıcı ve CA, tek alan adlı sertifikalar için de olsa SAN uzantısını gerektirir, bu nedenle hem ana alanı (yourdomain.com) hem de Heroku’da sunmayı planladığınız www varyantlarını dahil edin. Joker karakter için *.yourdomain.com‘u da listeleyin.
Adım 3: CSR bilgilerini doldurun
OpenSSL, sertifikanın kimlik alanlarını sizden ister. Bunları şu şekilde girin:
- Country Name: kuruluşunuzun yasal olarak kayıtlı olduğu ülkenin iki harfli ISO kodu (örneğin, US).
- State or Province Name: eyalet veya bölgenin tam adı (örneğin, Nevada). Kısaltma kullanmayın.
- Locality Name: şehir (örneğin, Las Vegas).
- Organization Name: kuruluşunuzun yasal adı. Alan Adı Doğrulaması sertifikası için bu alan doğrulanmaz ve boş bırakılabilir, ancak sadece Enter’a basmayın: OpenSSL bu durumda yapılandırmasında tanımlanan varsayılan değeri doldurur ve standart yapılandırma Internet Widgits Pty Ltd değeriyle gelir, bu da CSR’ınızda görünür. Alanı gerçekten boş bırakmak için tek bir nokta (
.) yazın. - Organizational Unit Name: CA/Tarayıcı Forumu tarafından kullanımdan kaldırıldı, bu nedenle boş bırakın.
- Common Name: güvence altına almak istediğiniz tam nitelikli alan adı (FQDN), örneğin www.yourdomain.com. Joker karakter için *.yourdomain.com girin. Ortak Ad (Common Name), SAN listesinde de bulunmalıdır.
- Email Address: geçerli bir iletişim e-postası (veya boş bırakın).
- A challenge password ve An optional company name: her ikisini de boş bırakın. Geçmek için Enter’a basın.
OpenSSL, geçerli dizinde iki dosya oluşturur:
- yourdomain.csr: Sertifika Yetkilinize gönderdiğiniz CSR.
- yourdomain.key: özel anahtar. Bu dosyayı gizli tutun ve yedekleyin; verilen sertifikayı Heroku’ya yüklerken buna yeniden ihtiyacınız olacak.
Adım 4: CSR’ı Sertifika Yetkilinize gönderin
yourdomain.csr dosyasını herhangi bir metin düzenleyicide açın ve -----BEGIN CERTIFICATE REQUEST----- ve -----END CERTIFICATE REQUEST----- işaretçileri dahil olmak üzere tüm bloğu kopyalayın. SSL siparişiniz sırasında CSR alanına yapıştırın.
Göndermeden önce, CSR içeriğini CSR Kod Çözücü aracımızla doğrulayabilirsiniz: Ortak Ad, SAN listesi, anahtar türü ve anahtar uzunluğunu gösterir, böylece yazım hatalarını CA’dan önce fark edebilirsiniz.
CA’nın istediği doğrulama adımlarını (DNS, dosya tabanlı veya e-posta) tamamlayın. Sertifika verildiğinde, CA size imzalanmış son varlık sertifikasını (genellikle bir .crt dosyası) ve ara CA paketini (genellikle bir .ca-bundle dosyası) gönderir. Aşağıdaki yükleme adımlarıyla devam edin.
Sertifikayı Heroku’ya yükleme
Adım 1: Özel alan adınızı uygulamaya kaydedin
Özel alan adı uygulamaya kaydedilmeden Heroku bir sertifika bağlamaz. Heroku CLI’a giriş yapılmış bir terminalden şunu çalıştırın:
heroku domains:add www.example.com -a your-app-name
www.example.com yerine alan adınızı ve your-app-name yerine Heroku uygulamanızı yazın. Ek ana bilgisayar adları için (örneğin çıplak bir kök alan adı veya ikinci bir alt alan adı) komutu tekrarlayın. Komut, quiet-fire-1234.herokudns.com gibi alana özel bir DNS hedefi döndürür: bu değeri Adım 4’te DNS sağlayıcınıza yönlendireceksiniz.
Adım 2: Tam zincir PEM dosyasını oluşturun
Heroku, önce son varlık sertifikasının ardından ara zincirin bulunduğu tek bir PEM dosyası bekler. Linux veya macOS’ta dosyaları cat ile birleştirin:
cat yourdomain.crt yourdomain.ca-bundle > server.crt
Windows’ta her iki dosyayı da düz bir metin düzenleyicide (Notepad++ veya VS Code, Word değil) açın ve .ca-bundle içeriğini .crt içeriğinin altına, bloklar arasında boş satır olmadan, bu sırayla yapıştırın. Birleştirilmiş dosyayı server.crt olarak kaydedin. CA’nız zinciri zaten tek bir PEM içinde (yaprak üstte) gönderdiyse, o dosyayı olduğu gibi kullanabilirsiniz.
Adım 3: Sertifikayı Heroku CLI ile yükleyin
Yeni bir kurulum için, tam zincir PEM’i ve eşleşen özel anahtarı certs:add ile yükleyin:
heroku certs:add server.crt yourdomain.key -a your-app-name
Aynı uygulamada mevcut bir sertifikayı değiştiriyorsanız (örneğin yenileme sırasında), Heroku’nun aynı DNS hedefini korumasını sağlamak için bunun yerine certs:update kullanın:
heroku certs:update server.crt yourdomain.key -a your-app-name
Kontrol panelini mi tercih ediyorsunuz? Uygulamayı açın, Settings > Domains and certificates‘a gidin, Configure SSL‘e tıklayın, Manually‘yi seçin, birleştirilmiş server.crt dosyasını sertifika yuvasına ve .key dosyasını özel anahtar yuvasına sürükleyin, ardından Next‘e tıklayıp onaylayın.
Yükleme sırasında bir Internal server error görürseniz, makinenizdeki Heroku CLI neredeyse her zaman güncel değildir. heroku update çalıştırıp tekrar deneyin. Hata devam ederse, sertifika dosyasının PEM biçiminde tam bir zincir olduğunu (önce son varlık, ardından ara sertifikalar) ve özel anahtarın gönderdiğiniz CSR ile eşleşen RSA anahtarı olduğunu doğrulayın.
Adım 4: DNS’i Heroku DNS hedefine yönlendirin
Alan adlarınızı listeleyin ve her biri için Heroku’nun döndürdüğü DNS hedefini kopyalayın:
heroku domains -a your-app-name
DNS sağlayıcınızda, her alan adı için bir kayıt oluşturun:
- Alt alan adı (örneğin www.example.com): Heroku DNS hedefine işaret eden bir CNAME kaydı oluşturun.
- Ana alan / kök alan adı (örneğin example.com): DNS spesifikasyonuna göre kök alanda CNAME’e izin verilmez, bu nedenle aynı Heroku DNS hedefine işaret eden bir ALIAS, ANAME veya düzleştirilmiş CNAME kaydı kullanın (tam ad, DNS sağlayıcınıza bağlıdır). DNS sağlayıcınız bunlardan hiçbirini desteklemiyorsa, DNS’i bunları destekleyen bir sağlayıcıya taşıyın (Cloudflare, DNSimple, Route 53, NS1, easyDNS ve benzerleri).
DNS’i your-app-name.herokuapp.com veya herhangi bir *.herokussl.com ana bilgisayar adına yönlendirmeyin: manuel bağlama bunların hiçbirinden doğru şekilde yönlendirilmez. Her zaman Heroku’nun atadığı, alana özel DNS hedefini kullanın.
CSR’ı ve dağıtılan sertifikayı doğrulama
CSR’ı göndermeden önce, Ortak Ad, SAN listesi, anahtar türü ve anahtar uzunluğunu doğrulamak için yerel olarak kod çözümü yapın:
openssl req -in yourdomain.csr -noout -text
Ya da tarayıcınızda aynı bilgileri görmek için CSR’ı CSR Kod Çözücü aracımıza yapıştırın.
Yükledikten sonra, sertifikanın kurulu olduğunu ve trafiği sunduğunu doğrulayın. CLI’dan:
heroku certs:info -a your-app-name
Çıktı, sertifikayı, veren CA’yı, son kullanma tarihini ve kapsadığı alan adlarını listeler. Ardından sitenizi bir tarayıcıda https:// üzerinden açın, kilit simgesinin bulunduğunu kontrol edin ve sertifika zincirinin eksiksiz olduğunu ve protokollerin doğru yapılandırıldığını doğrulamak için SSL Checker aracımızla daha kapsamlı bir dış tarama çalıştırın.
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


