РЕДАКТИРОВАТЬ: Возможно, было предпочтительнее спросить об этом на сервере Fault, но моя репутация не позволила мне опубликовать более двух ссылок.: (
Я хочу, чтобы некоторые страницы, на которых на моем веб-сайте были защищены пароли, поэтому я выполнил этот, чтобы создать собственный сертификат SSL. Я также следил за этим, потому что он объясняет, как создавать самоподписанные многодоменные сертификаты (subjectAltName
позволяет мне получить действительный сертификат, например .com и *.example.com, я не нашел другого способа сделать это).
Поэтому мне пришлось смешивать команды, чтобы получить то, что я хотел, и я думаю, что все в порядке с тем, что я сделал (хотя я подробно расскажу об этом позже на всякий случай).
Теперь я должен настроить Apache для прослушивания запросов на порту 443 и обеспечения безопасности SSL на соответствующих страницах. Поэтому я нашел этот.
При определении прослушивания VirtualHost на порту 443 он говорит следующее:
<VirtualHost 127.0.0.1:443>
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/something.crt
SSLCertificateKeyFile /etc/apache2/ssl/something.key
SSLCertificateChainFile /etc/apache2/ssl/gd_bundle.crt
...
</VirtualHost>
Я думаю, что знаю, какие файлы мне нужно указывать для полей SSLCertificateFile
и SSLCertificateKeyFile
, но я не могу понять, что такое SSLCertificateChainFile
. Все, что я нашел при поиске в сообществах Google и Stack Exchange, пока не помогло мне, поэтому я прошу его здесь:
Какой файл я должен предоставить для SSLCertificateChainFile
, и как его создать, если необходимо?
Вот файлы, которые я создал, следуя инструкциям разных ссылок, с командами, которые я использовал для их создания.
- Ключ центра сертификации (ca.key):
openssl genrsa -des3 -out ca.key 1024
- Сертификат ключа (ca.san.csr):
openssl req -new -key ca.key -out ca.san.csr -config /etc/ssl/openssl.cnf
Здесь я указал путь к файлу конфигурации, потому что мне пришлось немного изменить его, чтобы добавитьsubjectAltName
. Я мог бы также проверить, что все прошло хорошо сopenssl req -text -noout -in ca.san.csr
. Все описано здесь. - Создание и подпись сертификата (ca.san.crt):
openssl x509 -req -days 3650 -in ca.san.csr -signkey ca.key -out ca.san.crt -extensions v3_req -extfile /etc/ssl/openssl.cnf
Опять же, файл conf необходим, потому что в нем определеныsubjectAltNames
. - Ключ сервера (server.key):
openssl genrsa -out server.key 1024
- Сертификат ключа (server.san.csr):
openssl req -new -key server.key -out server.san.csr -config /etc/ssl/openssl.cnf
- Сертификат сервера (server.san.crt):
openssl x509 -days 3650 -CA ca.san.crt -CAkey ca.key -set_serial 01 -in server.san.csr -req -out server.san.crt
Для SSLCertificateFile
я думал, что я предоставил файл server.san.crt
, для меня это выглядит наиболее логично, а также файл server.key
для SSLCertificateKeyFile
. SSLCertificateChainFile
похоже, запрашивает файл .crt
, поэтому он может быть единственным другим .crt
файлом, который у меня есть, ca.san.crt
, но я действительно не уверен в этом.
Есть ли у кого-нибудь намек?
Спасибо, что прочитали это время.
Решение
В этом конкретном случае, поскольку я использую собственный сертификат, SSLCertificateChainFile
не имеет большого смысла (см. Отмеченный ответ ниже). Таким образом, вам просто нужно указать один и тот же файл сертификата для обеих директив, SSLCertificateFile
и SSLCertificateChainFile
.
Перед тем, как использовать директивы SSL*
, вам нужно сделать только одно дело с Apache. SSL по умолчанию отключен в Apache, поэтому вам нужно включить его с помощью sudo a2enmod ssl
, или при перезапуске Apache вы получите сообщение об ошибке, что вы можете что-то изменить в своих файлах vHosts.
Как только вы это сделаете и перезапустите сервер, вы можете подключиться к вашим vHosts с помощью HTTPS. Ваш браузер сообщит вам, что сертификат недействителен, поскольку он подписан сам по себе, но ваше соединение будет безопасным.