TLS vekiller ve HTTP servisler

OpenStack uç noktaları, kamu ağlarındaki hem son kullanıcılara hem de yönetim ağındaki diğer OpenStack servislerine API’ler sağlayan HTTP servisleridir. İç ve dış taleplerin hepsinin TLS üzerinden çalışması şiddetle önerilir. Bu amaca ulaşmak için, API servisleri TLS oturumlarını kurabilen ve sonlandıracak bir TLS proxy’nin arkasında konuşlandırılmalıdır. Aşağıdaki tablo, bu amaçla kullanılabilecek açık kaynak yazılımın kapsamlı bir listesini sunmaktadır:

Yazılımın sonlandırmasının performansı yetersiz olduğu durumlarda, donanım hızlandırıcıları alternatif bir seçenek olarak keşfedilmeye değer olabilir. Seçilen herhangi bir TLS vekil tarafından işlenecek isteklerin boyutunu göz önünde bulundurmak önemlidir.

Örnekler

Aşağıda, daha popüler web sunucularının/TLS sonlandırıcıların bazılarında TLS’yi etkinleştirmek için önerilen yapılandırma ayarlarının örneklerini sunuyoruz.

Before we delve into the configurations, we briefly discuss the ciphers’ configuration element and its format. A more exhaustive treatment on available ciphers and the OpenSSL cipher list format can be found at: ciphers.

ciphers = "HIGH:!RC4:!MD5:!aNULL:!eNULL:!EXP:!LOW:!MEDIUM"

ya da

ciphers = "kEECDH:kEDH:kRSA:HIGH:!RC4:!MD5:!aNULL:!eNULL:!EXP:!LOW:!MEDIUM"

Şifreleme dizgesi seçenekleri “:” ile ayrılırken “!” hemen takip eden ögenin tersini sağlar. Öğe sırası, HIGH gibi niteleyiciler tarafından geçersiz kılınmadığı sürece tercihi gösterir. Yukarıdaki örnek dizesindeki öğelere daha yakından bir göz atalım.

kEECDH:kEDH

Geçici Elliptik Eğri Diffie-Hellman (kısaca EECDH ve ECDHE olarak).

Geçici Diffie-Hellman (EDH veya DHE olarak kısaltılır) asal alan gruplarını kullanır.

Her iki yaklaşım da Mükemmel İleri Gizliliği’ (PFS) sağlar. PFS’yi düzgün yapılandırma hakkında ek tartışma için bkz. Mükemmel ileri gizliliği.

Geçici Eliptik Eğriler, sunucunun adlandırılmış bir eğriyle yapılandırılmasını ve asal alan gruplarına göre daha düşük güvenlik gerektirir ve daha düşük hesaplama maliyeti gerektirir. Bununla birlikte, asal alan grupları daha yaygın olarak uygulanmaktadır ve bu nedenle genellikle her ikisi de listede yer almaktadır.

kRSA

Şifreleme takımları, RSA <https://en.wikipedia.org/wiki/RSA_%28cryptosystem%29> _ değiştirme, kimlik doğrulama veya sırasıyla kullanır.

HIGH

Müzakere aşamasında mümkün olan en üst düzeyde güvenlik şifresini seçer. Bunların tipik olarak 128 bit uzunluğundaki anahtarları vardır.

!RC4

RC4 yok. RC4’ün TLS V3 bağlamında kusurları var. Bkz. RC4’ün TLS ve WPA’daki Güvenliği Hakkında.

!MD5

MD5 yok. MD5 çarpışmaya dayanıklı değildir ve bu nedenle Mesaj Doğrulama Kodları (MAC) veya imzalar için kabul edilemez.

!aNULL:!eNULL

Düz metinlere izin verme.

!EXP

Tasarım gereği genellikle 40 ve 56 bitlik anahtarları kullanarak zayıf olma eğiliminde olan harici şifreleme algoritmalarına izin verme.

ABD şifreleme sistemleri üzerindeki ihracat kısıtlamaları kaldırıldı ve artık desteklenmesi gerekmiyor.

!LOW:!MEDIUM

Kaba kuvvet saldırılarına (örnek 2-DES) karşı savunmasızlıklarından ötürü düşük (56 veya 64 bit uzunluktaki anahtarlar) ve orta (128 bit uzunluktaki anahtarlar) şifrelere izin vermez. Bu kural yine de üçlü Veri Şifreleme Algoritması (TDEA) ve Gelişmiş Şifreleme Standardı (AES) olarak da bilinen Üçlü Veri Şifreleme Standardı’na (Triple DES) izin verir ve bunların her biri 128 bit’e eşit ve dolayısıyla daha güvenli anahtarlara sahiptir.

Protokoller

Protokoller SSL_CTX_set_options aracılığıyla etkinleştirilir/devre dışı bırakılır. SSLv2/v3’ü devre dışı bırakmanızı ve TLS’yi etkinleştirmenizi öneririz.

Pound

Bu Pound örneği, bu özelliği destekleyen işlemciler bulunan sistemlerde performansı artırmaya yardımcı olan AES-NI hızlandırmayı etkinleştirir. Varsayılan yapılandırma dosyası Ubuntu’da /etc/pound/pound.cfg, RHEL, CentOS, openSUSE ve SUSE Linux Enterprise’da /etc/pound.cfg dir.

## see pound(8) for details
daemon      1
######################################################################
## global options:
User        "swift"
Group       "swift"
#RootJail   "/chroot/pound"
## Logging: (goes to syslog by default)
##  0   no logging
##  1   normal
##  2   extended
##  3   Apache-style (common log format)
LogLevel    0
## turn on dynamic scaling (off by default)
# Dyn Scale 1
## check backend every X secs:
Alive       30
## client timeout
#Client     10
## allow 10 second proxy connect time
ConnTO      10
## use hardware-acceleration card supported by openssl(1):
SSLEngine   "aesni"
# poundctl control socket
Control "/var/run/pound/poundctl.socket"
######################################################################
## listen, redirect and ... to:
## redirect all swift requests on port 443 to local swift proxy
ListenHTTPS
    Address 0.0.0.0
    Port    443
    Cert    "/etc/pound/cert.pem"
    ## Certs to accept from clients
    ##  CAlist      "CA_file"
    ## Certs to use for client verification
    ##  VerifyList  "Verify_file"
    ## Request client cert - don't verify
    ##  Ciphers     "AES256-SHA"
    ## allow PUT and DELETE also (by default only GET, POST and HEAD)?:
    NoHTTPS11   0
    ## allow PUT and DELETE also (by default only GET, POST and HEAD)?:
    xHTTP       1
    Service
        BackEnd
            Address 127.0.0.1
            Port    80
        End
    End
End

Stud

ciphers satırı ihtiyaçlarınıza göre düzeltilebilir, ancak bu makul bir başlangıç noktasıdır. Varsayılan yapılandırma dosyası /etc/stud dizininde bulunur. Ancak, varsayılan olarak sağlanmamaktadır.

# SSL x509 certificate file.
pem-file = "
# SSL protocol.
tls = on
ssl = off
# List of allowed SSL ciphers.
# OpenSSL's high-strength ciphers which require authentication
# NOTE: forbids clear text, use of RC4 or MD5 or LOW and MEDIUM strength ciphers
ciphers = "HIGH:!RC4:!MD5:!aNULL:!eNULL:!EXP:!LOW:!MEDIUM"
# Enforce server cipher list order
prefer-server-ciphers = on
# Number of worker processes
workers = 4
# Listen backlog size
backlog = 1000
# TCP socket keepalive interval in seconds
keepalive = 3600
# Chroot directory
chroot = ""
# Set uid after binding a socket
user = "www-data"
# Set gid after binding a socket
group = "www-data"
# Quiet execution, report only error messages
quiet = off
# Use syslog for logging
syslog = on
# Syslog facility to use
syslog-facility = "daemon"
# Run as daemon
daemon = off
# Report client address using SENDPROXY protocol for haproxy
# Disabling this until we upgrade to HAProxy 1.5
write-proxy = off

Nginx

Bu Nginx örneği, maksimum güvenlik için TLS v1.1 veya v1.2 gerektirir. ssl_ciphers satırı gereksinimlerinize göre uyarlanabilir, ancak bu makul bir başlangıç noktasıdır. Varsayılan yapılandırma dosyası /etc/nginx/nginx.conf dir.

server {
    listen : ssl;
    ssl_certificate ;
    ssl_certificate_key ;
    ssl_protocols TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!EXP:!LOW:!MEDIUM
    ssl_session_tickets off;

    server_name _;
    keepalive_timeout 5;

    location / {

    }
}

Apache

Varsayılan yapılandırma dosyası Ubuntu’da /etc/apache2/apache2.conf, RHEL ve CentOS`da /etc/httpd/conf/httpd.conf, openSUSE ve SUSE Linux Enterprise’da /etc/apache2/httpd.conf.

<VirtualHost <ip address>:80>
  ServerName <site FQDN>
  RedirectPermanent / https://<site FQDN>/
</VirtualHost>
<VirtualHost <ip address>:443>
  ServerName <site FQDN>
  SSLEngine On
  SSLProtocol +TLSv1 +TLSv1.1 +TLSv1.2
  SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!EXP:!LOW:!MEDIUM
  SSLCertificateFile    /path/<site FQDN>.crt
  SSLCACertificateFile  /path/<site FQDN>.crt
  SSLCertificateKeyFile /path/<site FQDN>.key
  WSGIScriptAlias / <WSGI script location>
  WSGIDaemonProcess horizon user=<user> group=<group> processes=3 threads=10
  Alias /static <static files location>
  <Directory <WSGI dir>>
    # For http server 2.2 and earlier:
    Order allow,deny
    Allow from all

    # Or, in Apache http server 2.4 and later:
    # Require all granted
  </Directory>
</VirtualHost>

Kısa bir WSGI betiği ile eşleştirmeniz gereken Apache’deki Hesaplama API’si SSL uç noktası.

<VirtualHost <ip address>:8447>
  ServerName <site FQDN>
  SSLEngine On
  SSLProtocol +TLSv1 +TLSv1.1 +TLSv1.2
  SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!EXP:!LOW:!MEDIUM
  SSLCertificateFile    /path/<site FQDN>.crt
  SSLCACertificateFile  /path/<site FQDN>.crt
  SSLCertificateKeyFile /path/<site FQDN>.key
  SSLSessionTickets Off
  WSGIScriptAlias / <WSGI script location>
  WSGIDaemonProcess osapi user=<user> group=<group> processes=3 threads=10
  <Directory <WSGI dir>>
    # For http server 2.2 and earlier:
    Order allow,deny
    Allow from all

    # Or, in Apache http server 2.4 and later:
    # Require all granted
  </Directory>
</VirtualHost>

HTTP sıkı taşıma güvenliği

Tüm canlı dağıtımlarında HTTP sıkı taşıma güvenliği (HSTS) kullanılmasını öneriyoruz. Bu başlık, tarayıcıların tek bir güvenli hale getirdikten sonra güvensiz bağlantı kurmalarını engeller. HTTP hizmetlerini genel veya güvenilmeyen bir alana yerleştirdiyseniz, HSTS özellikle önemlidir. HSTS’yi etkinleştirmek için, web sunucunuzu, tüm isteklerle bu gibi bir başlık gönderecek şekilde yapılandırın:

Strict-Transport-Security: max-age=31536000; includeSubDomains

Test sırasında 1 gün kısa bir zaman aşımı ile başlayın ve testler, kullanıcılar için sorun yaşamadığınızı gösterdikten sonra bir yıla yükseltin. Bir kez bu başlık büyük bir zaman aşımı olarak ayarlandığında, (tasarım gereği) devre dışı bırakmanın çok zor olduğunu unutmayın.

Mükemmel ileri gizliliği

Kusursuz iletme gizliliği için TLS sunucularını yapılandırmak, anahtar boyutu, oturum kimlikleri ve oturum biletleri etrafında dikkatli bir planlama yapmayı gerektirir. Buna ek olarak, çoklu sunucu dağıtımları için paylaşılan durum da önemli bir husustur. Yukarıdaki Apache ve Nginx için örnek yapılandırmalar bu kaygılardan bazılarını hafifletmek için oturum biletleri seçeneklerini devre dışı bırakır. Gerçek dünya dağıtımları, bu özelliği gelişmiş performans için etkinleştirmek isteyebilir. Bu güvenli bir şekilde yapılabilir, ancak anahtar yönetim konusunda özel bir dikkat gerektirir. Bu yapılandırmalar bu kılavuzun kapsamı dışındadır. Sorun alanı anlayabilmek için ImperialViolet tarafından TLS ileri gizliliğini nasıl küçümseneceğinizi okumanızı öneririz.