Sunucularınızda HTTPS'yi etkinleştirme

Chris Palmer
Chris Palmer
Matt Gaunt

Bu sayfada, sunucularınızda HTTPS'yi ayarlamayla ilgili aşağıdaki adımlar da dahil olmak üzere yol gösterici bilgiler verilmektedir:

  • 2048 bit RSA genel/özel anahtar çifti oluşturma.
  • Ortak anahtarınızı yerleştiren bir sertifika imzalama isteği (CSR) oluşturma.
  • Nihai sertifika veya sertifika zinciri almak için CSR'nizi sertifika yetkilinizle (CA) paylaşma
  • Nihai sertifikanızı /etc/ssl (Linux ve Unix) gibi web'e erişilemeyen bir yere veya IIS'nin gerektirdiği her yere (Windows) yükleme

Anahtarlar ve sertifika imzalama istekleri oluşturma

Bu bölümde, özel ve genel anahtarlar ile CSR oluşturmak için çoğu Linux, BSD ve Mac OS X sisteminde bulunan openssl komut satırı programı kullanılır.

Genel/özel anahtar çifti oluşturma

Başlamak için 2.048 bit RSA anahtar çifti oluşturun. Daha kısa anahtarlar, kaba kuvvet tahmini saldırılarıyla kırılabilir. Daha uzun anahtarlar ise gereksiz kaynaklar kullanır.

RSA anahtar çifti oluşturmak için aşağıdaki komutu kullanın:

openssl genrsa -out www.example.com.key 2048

Bu işlem sonucunda aşağıdaki çıkış elde edilir:

Generating RSA private key, 2048 bit long modulus
.+++
.......................................................................................+++
e is 65537 (0x10001)

Sertifika imzalama isteği oluşturma

Bu adımda, ortak anahtarınızı ve kuruluşunuz ve web siteniz hakkındaki bilgileri bir sertifika imzalama isteğine veya CSR'ye yerleştirirsiniz. openssl komutu sizden gerekli meta verileri ister.

Aşağıdaki komutu çalıştırmak:

openssl req -new -sha256 -key www.example.com.key -out www.example.com.csr

Aşağıdakileri döndürür:

You are about to be asked to enter information that will be incorporated
into your certificate request

What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CA
State or Province Name (full name) [Some-State]:California
Locality Name (for example, city) []:Mountain View
Organization Name (for example, company) [Internet Widgits Pty Ltd]:Example, Inc.
Organizational Unit Name (for example, section) []:Webmaster Help Center Example
Team
Common Name (e.g. server FQDN or YOUR name) []:www.example.com
Email Address []:webmaster@example.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

CSR'nin geçerliliğini kontrol etmek için şu komutu çalıştırın:

openssl req -text -in www.example.com.csr -noout

Yanıt şu şekilde görünmelidir:

Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=CA, ST=California, L=Mountain View, O=Google, Inc.,
OU=Webmaster Help Center Example Team,
CN=www.example.com/emailAddress=webmaster@example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:ad:fc:58:e0:da:f2:0b:73:51:93:29:a5:d3:9e:
                    f8:f1:14:13:64:cc:e0:bc:be:26:5d:04:e1:58:dc:
                    ...
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: sha256WithRSAEncryption
         5f:05:f3:71:d5:f7:b7:b6:dc:17:cc:88:03:b8:87:29:f6:87:
         2f:7f:00:49:08:0a:20:41:0b:70:03:04:7d:94:af:69:3d:f4:
         ...

CSR'nizi bir sertifika yetkilisine gönderme

Farklı sertifika yetkilileri (CA) MT'lerinizi kendilerine farklı yollarla göndermenizi gerektirir. Bunlar, web sitesindeki bir formu kullanmak veya MT’yi e-postayla göndermek olabilir. Bazı CA'lar veya bayileri, bazı durumlarda anahtar çifti ve CSR oluşturma dahil olmak üzere sürecin bir kısmını veya tamamını otomatikleştirebilir.

CSR'yi CA'nıza gönderin ve nihai sertifikanızı veya sertifika zincirinizi almak için CA'nın talimatlarını uygulayın.

Farklı CA'lar, ortak anahtarınız için garanti verme hizmeti karşılığında farklı miktarlarda ücret alır.

Anahtarınızı birden fazla DNS adıyla eşleme seçenekleri de vardır. Örneğin, birkaç farklı ad (ör. example.com'un tamamı, www.example.com, example.net ve www.example.net) veya *.example.com gibi "joker karakter" adlar.

Sertifikaları, /etc/ssl (Linux ve Unix) gibi web'e erişilemeyen bir yere veya IIS'in (Windows) gerektirdiği her yere tüm ön uç sunucularınıza kopyalayın.

Sunucularınızda HTTPS'yi etkinleştirme

Sunucularınızda HTTPS'nin etkinleştirilmesi, web sayfalarınızın güvenliğini sağlamada önemli bir adımdır.

  • Sunucunuzu HTTPS desteği için ayarlamak üzere Mozilla'nın Sunucu Yapılandırması aracını kullanın.
  • Sitenizi Qualys'in SSL Sunucu Testi ile düzenli olarak test edin ve en azından bir A veya A+ aldığınızdan emin olun.

Bu noktada operasyonla ilgili çok önemli bir karar vermeniz gerekir. Aşağıdakilerden birini seçin:

  • Web sunucunuzun içerik yayınladığı her ana makine adına ayrı bir IP adresi ayırın.
  • Ada dayalı sanal barındırma kullanın.

Her ana makine adı için ayrı IP adresleri kullanıyorsanız tüm istemciler için hem HTTP hem de HTTPS'yi destekleyebilirsiniz. Bununla birlikte, çoğu site operatörü IP adreslerini korumak ve genel olarak daha kullanışlı olduğundan ada dayalı sanal barındırma kullanır.

Sunucularınızda henüz HTTPS hizmeti yoksa şimdi (HTTP'yi HTTPS'ye yönlendirmeden) etkinleştirin. Daha fazla bilgi için HTTP'yi HTTPS'ye yönlendirme başlıklı makaleyi inceleyin. Web sunucunuzu, satın aldığınız ve yüklediğiniz sertifikaları kullanacak şekilde yapılandırın. Mozilla'nın yapılandırma oluşturucusunu kullanabilirsiniz.

Birçok barındırıcı adınız veya alt alan adınız varsa bunların her birinin doğru sertifikayı kullanması gerekir.

Ardından, sitenizin kullanım süresi boyunca düzenli olarak Qualys SSL Sunucu Testi ile HTTPS yapılandırmanızı kontrol edin. Siteniz A veya A+ puanı almalıdır. Daha düşük not almasına neden olan her şeyi hata olarak değerlendirin ve algoritmalara ve protokollere yönelik yeni saldırılar her zaman geliştirildiği için dikkatli olun.

Site içi URL'leri göreli yapın

Sitenizi hem HTTP hem de HTTPS üzerinden yayınladığınıza göre, protokolden bağımsız olarak her şeyin olabildiğince sorunsuz çalışması gerekir. Önemli bir faktör, site içi bağlantılar için göreceli URL'ler kullanmaktır.

Site içi URL'lerin ve harici URL'lerin belirli bir protokole bağlı olmadığından emin olun. Göreli yollar kullanın veya protokolü //example.com/something.js'te olduğu gibi çıkarın.

HTTPS kullanarak HTTP kaynakları içeren bir sayfanın sunulması sorunlara neden olabilir. Bir tarayıcı, güvenli olmayan kaynaklar kullanan güvenli bir sayfayla karşılaştığında kullanıcıları sayfanın tamamen güvenli olmadığı konusunda uyarır ve bazı tarayıcılar HTTP kaynaklarını yüklemeyi veya yürütmeyi reddederek sayfanın bozulmasına neden olur. Ancak HTTPS kaynaklarını HTTP sayfalarına güvenli bir şekilde ekleyebilirsiniz. Bu sorunları düzeltme konusunda daha fazla yardım için Karma İçeriği Düzeltme bölümüne bakın.

Sitenizdeki diğer sayfalara yönlendiren HTTP tabanlı bağlantıları takip etmek de kullanıcı deneyimini HTTPS'den HTTP'ye düşürebilir. Bu sorunu düzeltmek için site içi URL'lerinizi protokole bağlı (protokol eksik, //example.com ile başlayan) veya ana makineye bağlı (/jquery.js gibi yalnızca yoldan başlayarak) yaparak mümkün olduğunca göreli hale getirin.

Yapılması gerekenler
<h1>Welcome To Example.com</h1>
<script src="/jquery.js"></script>
<link rel="stylesheet" href="/assets/style.css"/>
<img src="/images/logo.png"/>;
<p>A <a href="/2014/12/24">new post on cats!</a></p>
Site içi göreli URL'ler kullanın.
Yapılması gerekenler
<h1>Welcome To Example.com</h1>
<script src="//example.com/jquery.js"></script>
<link rel="stylesheet" href="//assets.example.com/style.css"/>
<img src="//img.example.com/logo.png"/>;
<p>A <a href="//example.com/2014/12/24/">new post on cats!</a></p>
Alternatif olarak, protokole göreli site içi URL'ler de kullanabilirsiniz.
Yapılması gerekenler
<h1>Welcome To Example.com</h1>
<script src="/jquery.js"></script>
<link rel="stylesheet" href="/assets/style.css"/>
<img src="/images/logo.png"/>;
<p>A <a href="/2014/12/24">new post on cats!</a></p>
<p>Check out this <a href="https://foo.com/"><b>other cool site.</b></a></p>
Mümkün olduğunda diğer sitelere giden bağlantılar için HTTPS URL'leri kullanın.

Hata yapmamak için bağlantılarınızı manuel olarak değil, komut dosyasıyla güncelleyin. Sitenizin içeriği bir veritabanındaysa komut dosyanızı veritabanının geliştirme kopyasında test edin. Sitenizin içeriği yalnızca basit dosyalardan oluşuyorsa komut dosyanızı dosyaların geliştirme kopyasında test edin. Değişiklikleri üretime sadece değişiklikler QA'yı geçtikten sonra uygulayabilirsiniz. Sitenizdeki karma içeriği tespit etmek için Bram van Damme'nin komut dosyasını veya benzer bir aracı kullanabilirsiniz.

Diğer sitelere bağlantı verirken (bu sitelerdeki kaynakları eklemek yerine) protokolü değiştirmeyin. Bu sitelerin çalışma biçimi üzerinde herhangi bir denetiminiz yoktur.

Büyük siteler için taşıma işlemini daha sorunsuz hale getirmek amacıyla protokole bağlı URL'ler kullanmanızı öneririz. HTTPS'yi henüz tam olarak dağıtıp dağıtamayacağınızdan emin değilseniz sitenizi tüm alt kaynaklar için HTTPS kullanmaya zorlamak işe yarayabilir. HTTPS'nin sizin için yeni ve garip olduğu bir dönem olabilir. Bu süreçte HTTP sitesi her zamanki gibi çalışmaya devam eder. Zaman içinde taşıma işlemini tamamlar ve HTTPS'yi etkinleştirirsiniz (sonraki iki bölüme bakın).

Siteniz komut dosyalarına, resimlere veya CDN ya da jquery.com gibi üçüncü taraflarca sunulan diğer kaynaklara dayanıyorsa iki seçeneğiniz vardır:

  • Bu kaynaklar için protokole bağlı URL'ler kullanın. Üçüncü taraf HTTPS sunmuyorsa bunu yapmasını isteyin. jquery.com da dahil olmak üzere çoğu site bunu zaten yapıyor.
  • Kaynakları, hem HTTP hem de HTTPS sunan ve kontrol ettiğiniz bir sunucudan yayınlayın. Bu genellikle iyi bir fikirdir. Böylece sitenizin görünümü, performansı ve güvenliği üzerinde daha iyi kontrol sahibi olursunuz ve sitenizin güvenliğini sağlamak için üçüncü bir tarafa güvenmeniz gerekmez.

HTTP'yi HTTPS'ye yönlendir

Arama motorlarına, sitenize erişmek için HTTPS kullanmalarını bildirmek istiyorsanız <link rel="canonical" href="https://…"/> etiketlerini kullanarak her sayfanın başına standart bağlantı yerleştirin.

Katı Aktarım Güvenliği'ni ve güvenli çerezleri etkinleştirme

Bu noktada, HTTPS'yi kullanmaya "sabitlemeye" hazırsınız:

  • 301 yönlendirmesinin maliyetini önlemek için HTTP Strict Transport Security (HSTS) kullanın.
  • Çerezlerde her zaman Güvenli işaretini ayarlayın.

Öncelikle Katı Taşıma Güvenliği'ni kullanarak istemcilere, bir http:// referansını takip etseler bile her zaman HTTPS kullanarak sunucunuza bağlanmaları gerektiğini söyleyin. Bu, SSL Stripping gibi saldırıları önler ve HTTP'yi HTTPS'ye yönlendir bölümünde etkinleştirdiğimiz 301 redirect için gidiş dönüş maliyetini önler.

HSTS'yi etkinleştirmek için Strict-Transport-Security başlığını ayarlayın. Çeşitli sunucu yazılımları için OWASP'ın HSTS sayfasında talimatların bağlantıları yer alır.

Çoğu web sunucusu, özel üstbilgi eklemek için benzer bir özellik sunar.

Müşterilerin hiçbir zaman HTTP üzerinden çerez (ör. kimlik doğrulama veya site tercihleri için) göndermediğinden emin olmak da önemlidir. Örneğin, bir kullanıcının kimlik doğrulama çerezi düz metin olarak açığa çıkarsa başka her şeyi doğru yapmış olsanız bile, oturumun tamamına ait güvenlik garantiniz kaybolur.

Bunu önlemek için web uygulamanızı, oluşturduğu çerezlerde her zaman Güvenli işaretini ayarlayacak şekilde değiştirin. Bu OWASP sayfasında, Güvenli işaretinin nasıl ayarlanacağı çeşitli uygulama çerçevesinde açıklanmaktadır. Her uygulama çerçevesinin işareti ayarlama yöntemi vardır.

Çoğu web sunucusu basit bir yönlendirme özelliği sunar. Arama motorlarına ve tarayıcılara HTTPS sürümünün standart olduğunu belirtmek için 301 (Moved Permanently) simgesini kullanın ve kullanıcılarınızı HTTP'den sitenizin HTTPS sürümüne yönlendirin.

Arama sıralaması

Google, pozitif bir arama kalitesi göstergesi olarak HTTPS'yi kullanır. Google, arama sıralamasını korurken sitenizi nasıl aktaracağınız, taşıyacağınız veya taşıma yapacağınız konusunda bir kılavuz da yayınlar. Bing, web yöneticileri için yönergeler de yayınlar.

Performans

İçerik ve uygulama katmanları iyi ayarlandığında (tavsiye için Steve Souders'in kitaplarına bakın), kalan TLS performansı endişeleri genellikle uygulamanın toplam maliyetine kıyasla küçüktür. Ayrıca, bu maliyetleri azaltabilir ve amorti edebilirsiniz. TLS optimizasyonu hakkında öneriler için Ilya Grigorik'in High Performance Browser Networking (Yüksek Performanslı Tarayıcı Ağı) kitabının yanı sıra Ivan Ristic'in OpenSSL Cookbook (OpenSSL Tarif Defteri) ve Bulletproof SSL And TLS (SSL ve TLS'yi Kurşun Geçirmez Hale Getirme) kitaplarına göz atın.

Bazı durumlarda TLS, çoğunlukla HTTP/2'nin mümkün hale getirilmesinin sonucunda performansı artırabilir. Daha fazla bilgi için Chris Palmer'ın Chrome Dev Summit 2014'te HTTPS ve HTTP/2 performansı hakkındaki konuşmasına bakın.

Başvuran başlıkları

Kullanıcılar HTTPS sitenizden diğer HTTP sitelerine giden bağlantıları izlediğinde kullanıcı aracıları Yönlendiren başlığını göndermez. Bu bir sorunsa, bunu çözmenin birkaç yolu vardır:

  • Diğer siteler HTTPS'ye taşınmalıdır. Referans siteler bu kılavuzun Sunucularınızda HTTPS'yi etkinleştirme bölümünü tamamlarsa sitenizdeki bağlantıları http:// yerine https:// ile değiştirebilir veya protokole göre bağlantılar kullanabilirsiniz.
  • Yönlendiren üstbilgileriyle ilgili çeşitli sorunları gidermek için yeni yönlendiren politikası standardını kullanın.

Reklam geliri

Reklam göstererek sitelerinden para kazanan site operatörleri, HTTPS'ye taşımanın reklam gösterimlerini azaltmadığından emin olmak ister. Ancak karma içerik güvenliğiyle ilgili endişeler nedeniyle, HTTP <iframe> bir HTTPS sayfasında çalışmaz. Reklamverenler HTTPS üzerinden yayınlayana kadar site operatörleri reklam gelirini kaybetmeden HTTPS'ye geçemez. Ancak site operatörleri HTTPS'ye geçene kadar reklamverenlerin HTTPS üzerinden yayınlama konusunda pek motivasyonu olmaz.

HTTPS üzerinden reklam hizmetleri sunan reklamverenleri kullanarak ve hiç HTTPS yayınlamayan reklamverenlerin en azından bunu bir seçenek haline getirmesini isteyerek bu çıkmazı aşma sürecine başlayabilirsiniz. Yeterli sayıda reklamveren düzgün bir şekilde birlikte çalışıncaya kadar Site İçi URL'leri göreli yap işlemini tamamlamayı ertelemeniz gerekebilir.