آپاچی؛ شب ۱۲: HTTPS و انتخاب گواهی با SNI
فهرست نوشته
گواهی شب قبل را نصب میکنیم و تفاوت انتخاب گواهی با انتخاب سایت را میسنجیم. نتیجه باید HTTPS معتبر برای نام سایت باشد، با شکست مشخص برای نام اشتباه.
این جلسه بخشی از دورهٔ آپاچی در ۵۰ شب است. قرارداد نامها، مسیرها و روش اعمال تغییر را در راهنمای دوره بخوان.
محیط: www.key، www.crt و ca.crt شب یازدهم در پوشهٔ کاربر وبسرور؛ ماژول ssl فعال.
نصب کلید و میزبان TLS#
sudo install -d -m 750 /etc/apache-lab/tls
sudo install -m 600 ~/apache-lab/pki/www.key /etc/apache-lab/tls/www.key
sudo install -m 644 ~/apache-lab/pki/www.crt /etc/apache-lab/tls/www.crt
sudo install -m 644 ~/apache-lab/pki/ca.crt /etc/apache-lab/tls/ca.crt
در Debian/Ubuntu sudo a2enmod ssl را اجرا کن. در RHEL بستهٔ mod_ssl نصب شده؛ برای مسیر جدید یک نگاشت cert_t با semanage fcontext -a -t cert_t '/etc/apache-lab/tls(/.*)?' بساز و restorecon -Rv /etc/apache-lab/tls را با sudo اجرا کن.
بلوک زیر را به فایل سایت www اضافه کن؛ بلوک HTTP فعلی فعلاً باقی میماند:
<VirtualHost *:443>
ServerName www.example.test
DocumentRoot /var/www/apache-lab/public
SSLEngine on
SSLCertificateFile /etc/apache-lab/tls/www.crt
SSLCertificateKeyFile /etc/apache-lab/tls/www.key
<Directory /var/www/apache-lab/public>
Options -Indexes -Includes -ExecCGI
AllowOverride None
Require all granted
</Directory>
ErrorLog /var/log/apache2/www-error.log
CustomLog /var/log/apache2/www-access.log combined
</VirtualHost>
مسیر لاگ RHEL را تغییر بده. وجود یک Listen 443 کافی است؛ آن را دوباره اضافه نکن. در RHEL بلوک VirtualHost پیشفرض ssl.conf را با backup حذف یا غیرفعال کن و تنظیمات global آن را حفظ کن. -S باید ترتیب میزبانها را تأیید کند.
آزمون هویت#
از کلاینت و با ca.crt محلی:
curl --cacert ~/apache-lab/pki/ca.crt \
--resolve www.example.test:443:192.168.56.10 https://www.example.test/
openssl s_client -connect 192.168.56.10:443 -servername www.example.test \
-verify_hostname www.example.test -CAfile ~/apache-lab/pki/ca.crt \
-verify_return_error </dev/null
SNI نام سرویس را هنگام TLS میفرستد؛ Host پس از TLS در HTTP میآید. نام اشتباه یا CA نپذیرفته باید شکست بخورد. برای RHEL IP .30 را جایگزین کن. هیچکدام با -k اصلاح نمیشوند.
بازگشت: بلوک TLS و فایلهای نسخهٔ سالم را بازیابی، نحو را بررسی و reload کن. داشتن یک HTTPS پیشفرض با نام درست، مجوز ورود به برنامه ایجاد نمیکند.
منبع: راهنمای TLS در Apache ، VirtualHost و SNI .