Sunucularınızda HTTPS'yi etkinleştirme

Chris Palmer
Chris Palmer
Matt Gaunt

Bu sayfada, aşağıdaki adımlar dahil olmak üzere sunucularınızda HTTPS'nin ayarlanmasıyla ilgili yol gösterici bilgiler sağlanmaktadır:

  • 2048 bit RSA ortak/ö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'den erişilemeyen bir yere veya IIS'nin gerektirdiği yerlerde (Windows) yüklemeniz gerekir.

Anahtar ve sertifika imzalama istekleri oluşturma

Bu bölümde, özel ve ortak anahtarlar ile bir CSR oluşturmak için çoğu Linux, BSD ve Mac OS X sistemiyle birlikte gelen opensl komut satırı programı kullanılmaktadır.

Genel/özel anahtar çifti oluşturma

Öncelikle 2.048 bitlik bir RSA anahtar çifti oluşturun. Kaba kuvvette tahmin saldırıları, kısa anahtarları kırabilir. 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 şekilde 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şunuzla ve web sitenizle ilgili bilgileri bir sertifika imzalama isteğine veya CSR'ye yerleştirirsiniz. openssl komutu, gerekli meta verileri ister.

Aşağıdaki komut çalıştırılıyor:

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

Aşağıdaki çıktıyı verir:

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çerli olduğundan emin olmak için şu komutu çalıştırın:

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

Yanıt aşağıdaki gibi 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önderin

Farklı sertifika yetkilileri (CA), MT'lerinizi onlara farklı yollarla göndermenizi gerektirir. Bunlar, web sitelerinde bir form kullanmayı veya MT’yi e-postayla göndermeyi içerebilir. Bazı CA'lar veya onların bayileri, bazı durumlarda anahtar çifti ve CSR oluşturma dahil, sürecin bir kısmını ya da tamamını otomatik hale getirebilir.

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

Farklı CA'lar, ortak anahtarınızı kefil etme hizmeti için farklı tutarlarda para alır.

Ayrıca, birkaç farklı ad (ör. tümü example.com, www.example.com, example.net ve www.example.net) veya "joker karakter" (*.example.com gibi) dahil olmak üzere, anahtarınızı birden fazla DNS adıyla eşleme seçenekleri de vardır.

Sertifikaları, /etc/ssl (Linux ve Unix) gibi web'den erişilemeyen bir yerde veya IIS (Windows) gerektiği yerlerde tüm kullanıcı arabirimi 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 kritik 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 A veya A+ aldığınızdan emin olun.

Bu noktada, operasyonlar için çok önemli bir karar vermeniz gerekiyor. Aşağıdakilerden birini seçin:

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

Her ana makine adı için farklı IP adresleri kullanıyorsanız tüm istemciler için hem HTTP'yi hem de HTTPS'yi destekleyebilirsiniz. Ancak, ç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 HTTPS hizmetiniz yoksa hemen etkinleştirin (HTTP'yi HTTPS'ye yönlendirmeden). Daha fazla bilgi için HTTP'yi HTTPS'ye Yönlendirme bölümüne bakın). 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 yararlı bulabilirsiniz.

Çok sayıda ana makine adınız veya alt alan adınız varsa her birinin doğru sertifikayı kullanması gerekir.

Şimdi ve sitenizin kullanım ömrü boyunca düzenli olarak HTTPS yapılandırmanızı Qualys'in SSL Server Testi ile kontrol edin. Siteniz A veya A+ puanı almalıdır. Düşük derecelendirmeye neden olan her şeyi hata olarak değerlendirin ve algoritmalara ve protokollere karşı yeni saldırılar sürekli olarak geliştirildiği için özenli olun.

Site içi URL'leri göreli yap

Artık sitenizi hem HTTP hem de HTTPS üzerinden sunduğunuza göre, protokol ne olursa olsun her şeyin mümkün olduğunca sorunsuz olması gerekiyor. Önemli bir faktör, site içi bağlantılar için göreli URL'lerin kullanılmasıdı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 içinde olduğu gibi dışarıda bırakın.

HTTPS kullanarak HTTP kaynakları içeren bir sayfanın sunulması sorunlara neden olabilir. Bir tarayıcı güvenli olmayan kaynakları kullanan başka bir şekilde güvenli olan 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 sayfayı bozar. Bununla birlikte, HTTPS kaynaklarını HTTP sayfasına güvenli bir şekilde ekleyebilirsiniz. Bu sorunları düzeltme konusunda daha fazla bilgi için Karma İçeriği Düzeltme bölümüne bakın.

Sitenizdeki diğer sayfalara yönlendiren HTTP tabanlı bağlantıları izlemek de kullanıcı deneyimini HTTPS'den HTTP'ye düşürebilir. Bunu düzeltmek için site içi URL'lerinizi protokole bağlı (protokol olmadan, //example.com ile başlayan) veya ana makineye göre (/jquery.js gibi yalnızca yol ile başlayarak) yaparak mümkün olduğunca göreceli 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>
Göreli site içi 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 bağlı 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 bağlantılar için HTTPS URL'leri kullanın.

Hata yapmamak için bağlantılarınızı elle değil, bir 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ı bu dosyaların bir geliştirme kopyasında test edin. Değişiklikleri, normal olarak yalnızca değişiklikler KG'den geçtikten sonra üretime aktarın. Sitenizdeki karma içeriği algılamak için Bram van Damme komut dosyasını veya benzer bir içeriği kullanabilirsiniz.

Diğer sitelere bağlantı oluştururken (bu sitelerin kaynaklarını eklemek yerine) protokolü değiştirmeyin. Bu sitelerin çalışma şekli üzerinde herhangi bir denetiminiz yoktur.

Büyük siteler için taşıma işleminin daha kolay olması için protokole bağlı URL'leri öneririz. HTTPS'yi tam olarak dağıtıp dağıtamayacağınızdan henüz emin değilseniz sitenizi tüm alt kaynaklarda HTTPS kullanmaya zorlamak geri tepebilir. HTTPS'nin sizin için yeni ve tuhaf olduğu bir dönem olabilir ve HTTP sitesinin her zamanki gibi çalışmaya devam etmesi gerekir. Zaman içinde taşıma işlemini tamamlayıp HTTPS'de kilitleyeceksiniz (sonraki iki bölüme bakın).

Siteniz komut dosyalarına, resimlere veya CDN ya da jquery.com gibi bir üçüncü tarafın sunduğu 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 hizmeti sunmuyorsa kendisinden HTTPS sunmasını isteyin. jquery.com da dahil olmak üzere çoğu zaten yapıyor.
  • Kaynakları hem HTTP hem de HTTPS sağlayan, sizin kontrol ettiğiniz bir sunucudan sunun. Bu zaten çoğu zaman iyi bir fikirdir, çünkü bu şekilde sitenizin görünümü, performansı ve güvenliği üzerinde daha iyi denetime sahip olursunuz ve sitenizin güvenliğini sağlamak için üçüncü bir tarafa güvenmeniz gerekmez.

HTTP'den HTTPS'ye yönlendirme

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

Katı Taşıma Güvenliği ve güvenli çerezleri etkinleştir

Bu noktada, HTTPS kullanımını "kilitlemeye" hazırsınız demektir:

  • 301 yönlendirme maliyetinden kaçınmak için HTTP Strict Transport Security'yi (HSTS) kullanın.
  • Çerezlerde her zaman güvenlik işaretini ayarla.

Öncelikle Strict Transport Security'yi kullanarak istemcilerinize, bir http:// referansını izlerlerken bile sunucunuza her zaman HTTPS kullanarak bağlanmaları gerektiğini bildirin. Bu, SSL Kaldırma gibi saldırıları engeller ve HTTP'yi HTTPS'ye Yönlendirme bölümünde etkinleştirdiğimiz 301 redirect öğesinin gidiş dönüş maliyetini önler.

HSTS'yi etkinleştirmek için Strict-Transport-Security üstbilgisini ayarlayın. OWASP'ın HSTS sayfasında, çeşitli sunucu yazılımları için talimatlara yönlendiren bağlantılar bulunmaktadır.

Çoğu web sunucusu, özel üstbilgi ekleme konusunda benzer bir yeteneğe sahiptir.

Ayrıca, istemcilerin hiçbir zaman HTTP üzerinden çerez (kimlik doğrulama veya site tercihleri gibi) göndermediklerinden emin olmak da önemlidir. Örneğin, bir kullanıcının kimlik doğrulama çerezi düz metin olarak gösterilirse diğer her şeyi doğru yapmış olsanız bile oturumun tamamı için güvenlik garantiniz kaldırılır!

Bunu önlemek için web uygulamanızı, belirlediği çerezlerde her zaman Güvenli işaretini ayarlayacak şekilde değiştirin. Bu OWASP sayfasında, çeşitli uygulama çerçevelerinde Güvenli işaretinin nasıl ayarlanacağı açıklanmaktadır. Her appl çerçevesinin işareti ayarlamak için bir 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 ve kullanıcılarınızı HTTP'den sitenizin HTTPS sürümüne yönlendirmek için 301 (Moved Permanently) kullanın.

Arama sıralaması

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

Performans

İçerik ve uygulama katmanları iyi ayarlandığında (tavsiye için Steve Souders'ın kitaplarına bakın) kalan TLS performansıyla ilgili endişeler genellikle uygulamanın genel maliyetine kıyasla az olur. Ayrıca, bu maliyetleri azaltabilir ve amorti edebilirsiniz. TLS optimizasyonuyla ilgili tavsiyeler için Ilya Grigorik'in High Performance Scanner Networking (Yüksek Performanslı Tarayıcı Ağları) ve Ivan Ristic'in OpenSSL Cookbook (Madde Korumalı SSL ve TLS) makalelerine bakın.

Bazı durumlarda TLS, çoğunlukla HTTP/2'yi mümkün hale getirmenin sonucu olarak performansı artırabilir. Daha fazla bilgi için Chris Palmer'ın Chrome Dev Summit 2014 etkinliğinde yaptığı HTTPS ve HTTP/2 performansıyla ilgili konuşmasına bakın.

Yönlendiren 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. Böyle bir sorun varsa bunu çözmenin birkaç yolu vardır:

  • Diğer siteler HTTPS'ye taşınmalıdır. Yönlendiren siteler bu kılavuzun Sunucularınızda HTTPS'yi etkinleştirme bölümünü tamamlarsa sitenizdeki bağlantıları http:// yerine https:// olarak değiştirebilir veya protokole bağlı bağlantılar kullanabilirsiniz.
  • Yönlendiren başlıklarıyla ilgili çeşitli sorunları çözmek 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 isterler. Ancak karma içerik güvenlik endişeleri nedeniyle HTTP <iframe>, HTTPS sayfasında çalışmaz. Reklamverenler HTTPS üzerinden yayınlayana kadar reklam gelirlerini kaybetmeden HTTPS'ye geçiş yapamazlar. Ancak site operatörleri HTTPS'ye geçene kadar reklamverenlerin HTTPS'yi yayınlama motivasyonları çok düşüktür.

HTTPS üzerinden reklam hizmetleri sunan reklamverenleri kullanarak ve hiç HTTPS sunmayan reklamverenlerden en azından bu seçeneği bir seçenek haline getirmelerini isteyerek bu sorunu gidermeye başlayabilirsiniz. Yeterli sayıda reklamveren düzgün bir şekilde çalışana kadar Site İçi URL'leri göreceli yapma işlemini ertelemeniz gerekebilir.