Добрый день!
Извиняюсь, что не по теме Django, но точно знаю, что здесь сидит большое количество специалистов и мб кто то поможет советом.
Необходимо заставить работать HTTPS на Apache в локальной сети (с самоподписным сертификатом).
Что сделано:
По статье с Хабра (https://habr.com/post/192446/) были созданы самоподписные сертификаты и ключи).
На сервере подключен модуль mod_ssl.so, а так же выполнены настройки:
SSLEngine On
SSLCertificateFile "путь до/сертификата.crt"
SSLCertificateKeyFile "путь до/ключа.key"
SSLCACertificateFile "путь до/CA-сертификата.crt" (пробовал с этой опцией и без)
<Location />
SSLRequireSSL On
SSLVerifyClient optional
SSLVerifyDepth 1 (пробовал различные значения...)
SSLOptions +StdEnvVars +StrictRequire
</Location>
Запускаю апач - все ок, ошибок нет.
На клиенте импортирую сертификат CA, как в статье (пробовал так же выписывать для юзеров отдельный сертификат по аналогии с сервером и импортировать его - не помогло) в доверенные корневые центры + перезагружаю браузер.
Захожу на сайт - https работает, шифрование идет (проверял снифером), если сертификат удалить у пользователя - браузер сразу же начинает ругаться на то, что нет доверия к сертификату и пускает на страницу с перечеркнутым HTTPS (поидее так и должно быть).
Тут я подумал, что было бы отлично, чтобы пользователи без сертификата вообще не могли использовать ресурс (либо через mod_rewrite, в случае ошибок ssl редиректились куда-либо... пока надо реализовать хотябы недоступность ресурса, в случае когда у юзера нет сертификата), для этого надо применить директиву SSLVerifyClient require, поменял конфиг + перезапустил апач. На клиенте проверил, что сертификат есть в контейнере, захожу на сайт.... а он сразу выходит в ошибку ERR_SSL_PROTOCOL_ERROR.
Кусок лога ssl:
[Wed Sep 12 16:12:11.074234 2018] [ssl:error] [pid 4508:tid 944] [client 10.32.140.66:49330] AH02261: Re-negotiation handshake failed
[Wed Sep 12 16:12:11.074234 2018] [ssl:error] [pid 4508:tid 944] SSL Library Error: error:140890C7:SSL routines:ssl3_get_client_certificate:peer did not return a certificate -- No CAs known to server for verification?
AH02008: SSL library error 1 in handshake
SSL Library Error: error:140800FF:SSL routines:ssl3_accept:unknown state
Отсюда вопрос - почему https нормально работает (реально шифрует и не ругается в браузере - работает ли?) при использовании SSLVerifyClient optional, а не работает с флагом require, и как сделать так, чтобы работал с require?
Большое спасибо за консультации!