Apache için Kendinden İmzalı SSL Sertifikası Nasıl Oluşturulur

1. Adım: SSL Sertifikasını Oluşturun

TLS / SSL, bir genel sertifika ve özel anahtarın bir bileşimini kullanarak çalışır. SSL anahtarı sunucuda gizli tutulur. İstemcilere gönderilen içeriği şifrelemek için kullanılır. SSL sertifikası, içeriği isteyen herkesle paylaşılır. İlişkili SSL anahtarı tarafından imzalanmış içeriği şifresini çözmek için kullanılabilir.

OpenSSL ile kendinden imzalı bir anahtar ve sertifika çifti oluşturabiliriz:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

Bir dizi soru sorulacak. Bunu yapmadan önce, verdiğimiz komutta neler olduğuna bakalım:

openssl: Bu OpenSSL sertifikaları, anahtarları ve diğer dosyaları oluşturmak ve yönetmek için temel komut satırı aracıdır.
req: Bu alt komut, X.509 sertifika imzalama isteği (CSR) yönetimini kullanmak istediğimizi belirtir. “X.509”, SSL ve TLS’nin anahtar ve sertifika yönetimi için bağlı olduğu ortak bir anahtar altyapısı standardıdır. Yeni bir X.509 sertifikası oluşturmak istiyoruz, bu yüzden bu alt komutu kullanıyoruz.
-x509: Bu, normalde olduğu gibi bir sertifika imzalama isteği oluşturmak yerine kendinden imzalı bir sertifika yapmak istediğimiz yardımcı programa söyleyerek önceki alt komutu değiştirir.
-nodes: Bu, OpenSSL’e sertifikamızı bir parola ile güvenceye alma seçeneğini atlamasını söyler. Sunucu başlatıldığında, kullanıcı müdahalesi olmadan dosyayı okuyabilmek için Apache’ye ihtiyacımız var. Bir parola, bunun olmasını engelleyecektir çünkü her yeniden başlatmadan sonra girmemiz gerekecekti.
-days 365: Bu seçenek, sertifikanın geçerli sayılacağı süreyi ayarlar. Onu bir yıllığına ayarladık.
-newkey rsa: 2048: Bu, aynı zamanda yeni bir sertifika ve yeni bir anahtar oluşturmak istediğimizi belirtir. Sertifikayı önceki adımda imzalamak için gerekli anahtarı oluşturmadık, bu yüzden sertifikayla birlikte oluşturmamız gerekiyor. Rsa: 2048 kısmı, 2048 bit uzunluğunda bir RSA anahtarı yapmasını söyler.
-keyout: Bu satır, oluşturduğumuz oluşturulmuş özel anahtar dosyasının nereye yerleştirileceği OpenSSL’ye söyler.
-out: Bu, oluşturduğumuz sertifikayı nereye yerleştireceğimizi OpenSSL’ye bildirir.

Yukarıda belirttiğimiz gibi, bu seçenekler hem bir anahtar dosyası hem de bir sertifika oluşturacaktır. Sertifikada bilgileri doğru bir şekilde gömmek için sunucumuz hakkında birkaç soru sorulacak.

Çıktı
Country Name (2 letter code) [AU]:TR
State or Province Name (full name) [Some-State]:Izmir
Locality Name (eg, city) []: Izmir
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Anadolu Panteri.
Organizational Unit Name (eg, section) []:Ar-Ge
Common Name (e.g. server FQDN or YOUR name) []:sunucu_IP_adresi
Email Address []:admin@domain.com

Oluşturduğunuz her iki dosya da / etc / ssl dizininin uygun alt dizinlerine yerleştirilir.

OpenSSL’yi kullanırken, müşterilerle Perfect Forward Secrecy’de pazarlık yaparken kullanılan güçlü bir Diffie-Hellman grubu oluşturmalıyız.

Bunu yazarak yapabiliriz:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Bu işlem birkaç dakika sürebilir, ancak bittiğinde, yapılandırmamızda kullanabileceğimiz /etc/ssl/certs/dhparam.pem adresinde güçlü bir DH grubunuz olacaktır.

2. Adım: Apache’yi SSL Kullanacak Şekilde Yapılandırma

Anahtar ve sertifika dosyalarımızı /etc/ssl dizini altında oluşturduk. Artık bunlardan yararlanmak için Apache konfigürasyonumuzu değiştirmemiz gerekiyor.

Yapılandırmamızda birkaç ayar yapacağız:

Güçlü varsayılan SSL ayarlarını belirtmek için bir yapılandırma snippet’i oluşturacağız.
Oluşturulan SSL sertifikalarımıza işaret etmek için içerilen SSL Apache Sanal Ana Bilgisayar dosyasını değiştireceğiz.
(Önerilen) Şifrelenmiş Sanal Ana Makine’ye istekleri otomatik olarak yönlendirmek için şifrelenmemiş Sanal Ana Bilgisayar dosyasını değiştireceğiz.

İşimiz bittiğinde güvenli bir SSL yapılandırmamız olmalı.

 

Güçlü Şifreleme Ayarları ile Apache Yapılandırma Pasajı Oluşturma

Öncelikle, bazı SSL ayarlarını tanımlamak için bir Apache konfigürasyon snippet’i oluşturacağız. Bu, Apache’yi güçlü bir SSL şifreleme paketi ile kuracak ve sunucumuzu güvende tutmaya yardımcı olacak bazı gelişmiş özellikleri etkinleştirecektir. Ayarlayacağımız parametreler SSL’yi etkinleştiren herhangi bir Sanal Sunucu tarafından kullanılabilir.

/etc/apache2/conf-available dizininde yeni bir snippet oluşturun. Amacını netleştirmek için ssl-params.conf dosyasını adlandıracağız:

sudo nano /etc/apache2/conf-available/ssl-params.conf 

Apache SSL’yi güvenli bir şekilde kurmak için, Cipherli.st sitesindeki Remy van Elst’in önerilerini kullanacağız. Bu site, popüler yazılımlar için kullanımı kolay şifreleme ayarları sağlamak için tasarlanmıştır

/etc/apache2/conf-available/ssl-params.conf
# from https://cipherli.st/
# and https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
# Disable preloading HSTS for now.  You can use the commented out header line that includes
# the "preload" directive if you understand the implications.
#Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off 
SSLSessionTickets Off
SSLUseStapling on 
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"

SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"

 

İşiniz bittiğinde dosyayı kaydedin ve kapatın.

Varsayılan Apache SSL Sanal Ana Bilgisayar Dosyasını Değiştirin

Ardından, /etc/apache2/sites-available/default-ssl.conf dosyasını, varsayılan Apache SSL Sanal Ana Bilgisayar dosyasını değiştirelim. Farklı bir sunucu bloğu dosyası kullanıyorsanız, aşağıdaki komutlarda onun adını kullanın.

Daha fazla ilerlemeden önce, orijinal SSL Sanal Ana Bilgisayar dosyasını yedekleyelim:

sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.bak

Şimdi, ayarlama yapmak için SSL Sanal Ana Bilgisayar dosyasını açın:

sudo nano /etc/apache2/sites-available/default-ssl.conf

İçeride, kaldırılan yorumların çoğunda, Sanal Ana Bilgisayar dosyası varsayılan olarak şu şekilde görünmelidir:

/etc/apache2/sites-available/default-ssl.conf
<IfModule mod_ssl.c>
        <VirtualHost _default_:443>
                ServerAdmin webmaster@localhost

                DocumentRoot /var/www/html

                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined

                SSLEngine on

                SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
                SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

                <FilesMatch "\.(cgi|shtml|phtml|php)$">
                                SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                                SSLOptions +StdEnvVars
                </Directory>

                # BrowserMatch "MSIE [2-6]" \
                #               nokeepalive ssl-unclean-shutdown \
                #               downgrade-1.0 force-response-1.0

        </VirtualHost>
</IfModule>

 

Dosyaya küçük ayarlamalar yapacağız. Bir Sanal Ana Bilgisayar dosyasında (ServerAdmin e-posta adresi, SunucuAdı, vb.) Ayarlamak istediğimiz normal şeyleri ayarlayacağız, sertifika ve anahtar dosyalarımıza işaret edecek şekilde SSL yönergelerini ayarlayacağız ve daha eskiler için uyumluluk sağlayan bir bölümün uncomment’ını yapacağız. tarayıcılar.

Bu değişiklikleri yaptıktan sonra, sunucu bloğunuz buna benzer görünmelidir:

 

/etc/apache2/sites-available/default-ssl.conf
<IfModule mod_ssl.c>
        <VirtualHost _default_:443>
                ServerAdmin your_email@example.com
                ServerName server_domain_or_IP

                DocumentRoot /var/www/html

                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined

                SSLEngine on

                SSLCertificateFile      /etc/ssl/certs/apache-selfsigned.crt
                SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key

                <FilesMatch "\.(cgi|shtml|phtml|php)$">
                                SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                                SSLOptions +StdEnvVars
                </Directory>

                BrowserMatch "MSIE [2-6]" \
                               nokeepalive ssl-unclean-shutdown \
                               downgrade-1.0 force-response-1.0

        </VirtualHost>
</IfModule>

 

 

İşiniz bittiğinde dosyayı kaydedin ve kapatın.

(Önerilen) HTTPS’ye Yönlendirilecek Şifrelenmemiş Sanal Ana Bilgisayar Dosyasını Değiştirin

Şu an olduğu gibi, sunucu şifrelenmemiş HTTP ve şifrelenmiş HTTPS trafiğini de sağlayacaktır. Daha iyi güvenlik için çoğu durumda HTTP’yi otomatik olarak HTTPS’ye yönlendirmesi önerilir. Bu işlevselliği istemiyor veya ihtiyacınız yoksa, bu bölümü güvenle atlayabilirsiniz.

Şifrelenmemiş Sanal Ana Bilgisayar dosyasını tüm trafiği SSL şifreli olarak yönlendirmek için ayarlamak için /etc/apache2/sites-available/000-default.conf dosyasını açabiliriz:

sudo nano /etc/apache2/sites-available/000-default.conf

İçeride, VirtualHost yapılandırma blokları içinde, tüm trafiği sitenin SSL sürümüne işaret eden bir Yönlendirme yönergesi eklememiz gerekir:

/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
        . . .

        Redirect "/" "https://your_domain_or_IP/"

        . . .
</VirtualHost>

 

İşiniz bittiğinde dosyayı kaydedin ve kapatın.

3. Adım: Güvenlik Duvarını Ayarlayın

Eğer ufw güvenlik duvarını etkinleştirdiyseniz, önkoşul kılavuzlarının önerdiği gibi, SSL trafiğine izin vermek için ayarları değiştirmeniz gerekebilir. Şans eseri, Apache kurulum sonrasında birkaç profili ufw ile kaydeder.

Mevcut profilleri yazarak görebiliriz:

sudo ufw app list

Böyle bir liste görmelisiniz:

Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH
Geçerli ayarı yazarak görebilirsiniz:
sudo ufw status

Daha önce yalnızca normal HTTP trafiğine izin verdiyseniz, çıktınız şunun gibi görünebilir:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Apache                     ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Apache (v6)                ALLOW       Anywhere (v6)

Ek olarak HTTPS trafiğine izin vermek için “Apache Tam” profiline izin verebilir ve sonra yedek “Apache” profil ödeneğini silebiliriz:

sudo ufw allow 'Apache Full'
sudo ufw delete allow 'Apache'
    Durumunuz şu şekilde olmalı:
sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Apache Full                ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Apache Full (v6)           ALLOW       Anywhere (v6)

4. Adım: Apache'deki Değişiklikleri Etkinleştirin

Artık değişikliklerimizi yaptık ve güvenlik duvarımızı ayarladık, SSL ve header modüllerini Apache'de etkinleştirebilir, SSL-hazır Sanal Sunucumuzu etkinleştirebilir ve Apache'yi yeniden başlatabiliriz.

SSL snippet'indeki bazı ayarların gerektirdiği mod_ssl, Apache SSL modülü ve mod_header'ları a2enmod komutuyla etkinleştirebiliriz:

sudo a2enmod ssl
sudo a2enmod headers

 

Ardından, SSL Sanal Ana Bilgisayarı a2ensite komutuyla etkinleştirebiliriz:

sudo a2ensite default-ssl

ssl-params.conf dosyamızı, belirlediğimiz değerlerde okumaya da ihtiyacımız olacak:

sudo a2enconf ssl-params

Bu noktada sitemiz ve gerekli modüller etkinleştirildi. Dosyalarımızda sözdizimi hatası olmadığından emin olmak için kontrol etmeliyiz. Bunu yazarak yapabiliriz:

sudo apache2ctl configtest

 

Her şey başarılı olursa, şuna benzer bir sonuç elde edersiniz:

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK

aİlk satır, sadece ServerName yönergesinin global olarak ayarlanmadığını belirten bir mesajdır. Bu iletiden kurtulmak isterseniz, ServerName sunucunuzun /etc/apache2/apache2.conf dosyasındaki etki alanı adını veya IP adresini ayarlayabilirsiniz. Mesajın zarar vermeyeceği için bu isteğe bağlıdır.

Çıktınızda Sözdizimi Tamam varsa, yapılandırma dosyanızın sözdizimi hatası yoktur. Değişikliklerimizi uygulamak için Apache'yi güvenle yeniden başlatabiliriz:

sudo systemctl restart apache2

5. Adım: Şifreleme Testi

Şimdi SSL sunucumuzu test etmeye hazırız.

Web tarayıcınızı açın ve https: // yazıp sunucunuzun alan adını veya IP adresini adres çubuğuna yazın:

https://sunucu_domain_or_IP

 

 

Oluşturduğumuz sertifika, tarayıcınızın güvenilir sertifika yetkililerinden biri tarafından imzalanmadığından, aşağıdaki gibi korkutucu bir uyarı görürsünüz:

Bu beklenen ve normaldir. Sadece sertifikamızın şifreleme yönüyle ilgileniyoruz, ev sahibimizin özgünlüğünün üçüncü taraf doğrulaması değil. "GELİŞMİŞ" ve ardından ana makinenize devam etmek için sağlanan bağlantıyı tıklayın:

Sitenize götürülmelisiniz. Tarayıcı adres çubuğuna bakarsanız, üzerinde "x" olan bir kilit görürsünüz. Bu durumda, bu sadece sertifikanın doğrulanamadığı anlamına gelir. Hala bağlantınızı şifreliyor.

Apache'yi HTTP'yi HTTPS'ye yönlendirecek şekilde yapılandırdıysanız, yönlendirme işlevinin doğru şekilde çalışıp çalışmadığını da kontrol edebilirsiniz:

 

http://sunucu_domain_or_IP

 Bu, aynı simgeyle sonuçlanırsa, bu, yönlendirme işleminin doğru şekilde çalıştığı anlamına gelir.

6. Adım: Kalıcı Yönlendirmeye Geçin

Yönlendirmeniz doğru bir şekilde çalıştıysa ve yalnızca şifrelenmiş trafiğe izin vermek istediğinizden eminseniz, yeniden yönlendirmeyi kalıcı hale getirmek için şifrelenmemiş Apache Sanal Ana Bilgisayarı'nı tekrar değiştirmeniz gerekir.

Sunucu bloğu yapılandırma dosyanızı tekrar açın:

sudo nano /etc/apache2/sites-available/000-default.conf

Daha önce eklediğimiz Yönlendirme satırını bulun. 302 geçici yönlendirmeden 301 kalıcı yönlendirmeye yapılan yönlendirmeyi değiştiren bu satıra kalıcı olarak ekle:

/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
        . . .

        Redirect permanent "/" "https://your_domain_or_IP/"

        . . .
</VirtualHost>

 

Dosyayı kaydedin ve kapatın.

Sözdizimi hataları için yapılandırmanızı kontrol edin:

sudo apache2ctl configtest

Hazır olduğunuzda, yönlendirmeyi kalıcı hale getirmek için Apache'yi yeniden başlatın:

sudo systemctl restart apache2

 

Sonuç

Apache sunucunuzu istemci bağlantıları için güçlü şifreleme kullanacak şekilde yapılandırdınız. Bu, istekleri güvenli bir şekilde sunmanıza olanak tanır ve dış tarafların trafiğinizi okumasını engeller.

 

 

 

Kaynak: .digitalocean.com

howtoforge.com

Yazımız sadece tavsiye niteliğindedir ve eklentilerden kaynaklı yaşanacak problemlerden anadolupanteri.net sorumlu değildir.