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

Anahtar ve sertifika imzalama isteği 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 sitenizle ilgili bilgileri bir sertifika imzalama isteği veya CSR'ye yerleştirirsiniz. openssl Komutu, gerekli meta verileri ister.

Aşağıdaki komutu çalıştırın:

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önderin

Farklı sertifika yetkilileri (CA'lar), CSR'lerinizi kendilerine farklı şekillerde göndermenizi gerektirir. Bu yöntemler arasında web sitelerindeki bir formu kullanma veya müşteri temsilcisine e-posta gönderme yer alabilir. 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'yi etkinleştirmek, 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 A veya A+ puanı aldığınızdan emin olun.

Bu noktada, önemli bir işlem kararı almanız 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.
  • Ad tabanlı 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 hem de HTTPS'yi destekleyebilirsiniz. Ancak çoğu site operatörü, IP adreslerini korumak ve genel olarak daha kullanışlı olduğu için ad tabanlı sanal barındırma kullanır.

Sunucularınızda HTTPS hizmeti yoksa hemen etkinleştirin (HTTP'yi HTTPS'ye yönlendirmeden). 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 hale getirin

Sitenizi hem HTTP hem de HTTPS'de yayınladığınıza göre, protokolden bağımsız olarak her şeyin olabildiğince sorunsuz çalışması gerekir. Site içi bağlantılar için göreli URL'lerin kullanılması önemli bir faktördü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 sayfa yayınlamak 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üzeltmeyle ilgili daha fazla bilgi için Karışık İçerikleri Düzeltme başlıklı makaleyi inceleyin.

Sitenizdeki diğer sayfalara giden 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 göreli (//example.com ile başlayan, protokol içermeyen) veya barındırıcıya göreli (/jquery.js gibi yalnızca yola başlayan) olacak şekilde 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 yalnızca normal şekilde QA'dan geçtikten sonra üretime gönderin. 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 sitelerden kaynak eklemek yerine) protokolü değiştirmeyin. Bu sitelerin işleyişi üzerinde kontrol sahibi değilsiniz.

Büyük sitelerde taşıma işlemini daha sorunsuz hale getirmek için protokole göre URL'ler kullanmanızı öneririz. Henüz HTTPS'yi tam olarak dağıtıp dağıtamayacağınızdan emin değilseniz sitenizi tüm alt kaynaklar için HTTPS'yi kullanmaya zorlamak ters etki yaratabilir. 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, CDN veya jquery.com gibi üçüncü taraflardan sunulan komut dosyalarına, resimlere ya da diğer kaynaklara bağlıysa 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önlendirme

Arama motorlarına sitenize erişmek için HTTPS'yi kullanmalarını söylemek istiyorsanız <link rel="canonical" href="https://…"/> etiketlerini kullanarak her sayfanın başına bir standart bağlantı ekleyin.

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, istemcilere http:// referansı kullanırken bile sunucunuza her zaman HTTPS kullanarak bağlanmaları gerektiğini söylemek için Strict Transport Security'yi kullanın. 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. OWASP'ın HSTS sayfasında, çeşitli sunucu yazılımı türleriyle ilgili 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 gösterilirse diğer her şeyi doğru yapmış olsanız bile kullanıcının oturumunun tamamı için güvenlik garantiniz ortadan kalkar.

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, çeşitli uygulama çerçevelerinde Güvenli işaretinin nasıl ayarlanacağı 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, HTTPS'yi olumlu 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şıma yapacağınız konusunda da bir kılavuz 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. 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.

TLS, bazı durumlarda performansı artırabilir. Bunun başlıca nedeni, HTTP/2'yi mümkün kılmasıdır. 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.

Yönlendiren üstbilgileri

Kullanıcılar HTTPS sitenizden diğer HTTP sitelerine giden bağlantıları izlediğinde kullanıcı aracıları Referer üst bilgisini göndermez. Bu sorunla karşılaşırsanız sorunu çö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 geçişin reklam gösterimlerini azaltmadığından emin olmak ister. Ancak karma içerik güvenliğiyle ilgili endişeler nedeniyle, HTTP <iframe> HTTPS sayfaları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 çıkmazdan çıkma sürecini başlatabilirsiniz. Yeterli sayıda reklamveren düzgün şekilde etkileşime geçene kadar Site içi URL'leri göreli yap seçeneğini tamamlamayı ertelemek isteyebilirsiniz.