Назад | Перейти на главную страницу

Не удается запустить httpd 2.4.9 с самоподписанным сертификатом SSL

Я не могу запустить httpd 2.4.9 (тоже пробовал 2.4.x) на CentOS 6.5 с самой простой возможной конфигурацией SSL. Версия openssl, установленная на машине, - OpenSSL 1.0.1e-fips 11 Feb 2013 (Я также обновил его с помощью 'yum update' до последней исправленной версии)

Я скомпилировал и установил httpd 2.4.9, используя следующие команды:

./configure --enable-ssl --with-ssl=/usr/local/ssl/ --enable-proxy=shared --enable-proxy_wstunnel=shared --with-apr=apr-1.5.1/ --with-apr-util=apr-util-1.5.3/
make
make install

Теперь я создаю самозаверяющий сертификат по умолчанию, как описано в CentOS HowTo:

openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
cp server.crt /usr/local/apache2/conf
cp server.key /usr/local/apache2/conf
cp server.csr /usr/local/apache2/conf

Вот мой файл httpd-ssl.conf:

Listen 443
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLPassPhraseDialog  builtin
SSLSessionCache        "shmcb:/usr/local/apache2/logs/ssl_scache(512000)"
SSLSessionCacheTimeout  300
<VirtualHost *:443>
    DocumentRoot "/usr/local/apache2/htdocs"
    ServerName 192.168.9.128
    ServerAdmin mymail@mail.com
    ErrorLog "/usr/local/apache2/logs/error_log"
    TransferLog "/usr/local/apache2/logs/access_log"
    SSLEngine on
    SSLCertificateFile "/usr/local/apache2/conf/server.crt"
    SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"
    <FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory "/usr/local/apache2/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0
CustomLog "/usr/local/apache2/logs/ssl_request_log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

когда я запускаю httpd, используя bin/apachectl -k start Я получаю следующие ошибки в error_log:

Wed Jun 04 00:29:27.995654 2014] [ssl:info] [pid 24021:tid 139640404293376] AH01887: Init: Initializing (virtual) servers for SSL
[Wed Jun 04 00:29:27.995726 2014] [ssl:info] [pid 24021:tid 139640404293376] AH01914: Configuring server 192.168.9.128:443 for SSL protocol
[Wed Jun 04 00:29:27.995863 2014] [ssl:debug] [pid 24021:tid 139640404293376] ssl_engine_init.c(312): AH01893: Configuring TLS extension handling
[Wed Jun 04 00:29:27.996111 2014] [ssl:debug] [pid 24021:tid 139640404293376] ssl_util_ssl.c(343): AH02412: [192.168.9.128:443] Cert matches for name '192.168.9.128' [subject: CN=192.168.9.128,OU=XXX,O=XXXX,L=XXXX,ST=NRW,C=DE / issuer: CN=192.168.9.128,OU=XXX,O=XXXX,L=XXXX,ST=NRW,C=DE / serial: AF04AF31799B7695 / notbefore: Jun  3 22:26:45 2014 GMT / notafter: Jun  3 22:26:45 2015 GMT]
[Wed Jun 04 00:29:27.996122 2014] [ssl:info] [pid 24021:tid 139640404293376] AH02568: Certificate and private key 192.168.9.128:443:0 configured from /usr/local/apache2/conf/server.crt and /usr/local/apache2/conf/server.key
[Wed Jun 04 00:29:27.996209 2014] [ssl:info] [pid 24021:tid 139640404293376] AH01914: Configuring server 192.168.9.128:443 for SSL protocol
[Wed Jun 04 00:29:27.996280 2014] [ssl:debug] [pid 24021:tid 139640404293376] ssl_engine_init.c(312): AH01893: Configuring TLS extension handling
[Wed Jun 04 00:29:27.996295 2014] [ssl:emerg] [pid 24021:tid 139640404293376] AH02572: Failed to configure at least one certificate and key for 192.168.9.128:443
[Wed Jun 04 00:29:27.996303 2014] [ssl:emerg] [pid 24021:tid 139640404293376] SSL Library Error: error:0906D06C:PEM routines:PEM_read_bio:no start line (Expecting: DH PARAMETERS) -- Bad file contents or format - or even just a forgotten SSLCertificateKeyFile?
[Wed Jun 04 00:29:27.996308 2014] [ssl:emerg] [pid 24021:tid 139640404293376] SSL Library Error: error:0906D06C:PEM routines:PEM_read_bio:no start line (Expecting: EC PARAMETERS) -- Bad file contents or format - or even just a forgotten SSLCertificateKeyFile?
[Wed Jun 04 00:29:27.996318 2014] [ssl:emerg] [pid 24021:tid 139640404293376] SSL Library Error: error:140A80B1:SSL routines:SSL_CTX_check_private_key:no certificate assigned
[Wed Jun 04 00:29:27.996321 2014] [ssl:emerg] [pid 24021:tid 139640404293376] AH02312: Fatal error initialising mod_ssl, exiting.
AH00016: Configuration Failed

Затем я пытаюсь сгенерировать недостающие ПАРАМЕТРЫ DH и ПАРАМЕТРЫ EC:

openssl dhparam -outform PEM -out dhparam.pem 2048
openssl ecparam -out ec_param.pem -name prime256v1
cat dhparam.pem ec_param.pem >> /usr/local/apache2/conf/server.crt

И это смягчает ошибку, но выходит следующее:

[Wed Jun 04 00:34:05.021438 2014] [ssl:info] [pid 24089:tid 140719371077376] AH01887: Init: Initializing (virtual) servers for SSL
[Wed Jun 04 00:34:05.021487 2014] [ssl:info] [pid 24089:tid 140719371077376] AH01914: Configuring server 192.168.9.128:443 for SSL protocol
[Wed Jun 04 00:34:05.021874 2014] [ssl:debug] [pid 24089:tid 140719371077376] ssl_engine_init.c(312): AH01893: Configuring TLS extension handling
[Wed Jun 04 00:34:05.022050 2014] [ssl:debug] [pid 24089:tid 140719371077376] ssl_util_ssl.c(343): AH02412: [192.168.9.128:443] Cert matches for name '192.168.9.128' [subject: CN=192.168.9.128,OU=XXX,O=XXXX,L=XXXX,ST=NRW,C=DE / issuer: CN=192.168.9.128,OU=XXX,O=XXXX,L=XXXX,ST=NRW,C=DE / serial: AF04AF31799B7695 / notbefore: Jun  3 22:26:45 2014 GMT / notafter: Jun  3 22:26:45 2015 GMT]
[Wed Jun 04 00:34:05.022066 2014] [ssl:info] [pid 24089:tid 140719371077376] AH02568: Certificate and private key 192.168.9.128:443:0 configured from /usr/local/apache2/conf/server.crt and /usr/local/apache2/conf/server.key
[Wed Jun 04 00:34:05.022285 2014] [ssl:debug] [pid 24089:tid 140719371077376] ssl_engine_init.c(1016): AH02540: Custom DH parameters (2048 bits) for 192.168.9.128:443 loaded from /usr/local/apache2/conf/server.crt
[Wed Jun 04 00:34:05.022389 2014] [ssl:debug] [pid 24089:tid 140719371077376] ssl_engine_init.c(1030): AH02541: ECDH curve prime256v1 for 192.168.9.128:443 specified in /usr/local/apache2/conf/server.crt
[Wed Jun 04 00:34:05.022397 2014] [ssl:info] [pid 24089:tid 140719371077376] AH01914: Configuring server 192.168.9.128:443 for SSL protocol
[Wed Jun 04 00:34:05.022464 2014] [ssl:debug] [pid 24089:tid 140719371077376] ssl_engine_init.c(312): AH01893: Configuring TLS extension handling
[Wed Jun 04 00:34:05.022478 2014] [ssl:emerg] [pid 24089:tid 140719371077376] AH02572: Failed to configure at least one certificate and key for 192.168.9.128:443
[Wed Jun 04 00:34:05.022488 2014] [ssl:emerg] [pid 24089:tid 140719371077376] SSL Library Error: error:140A80B1:SSL routines:SSL_CTX_check_private_key:no certificate assigned
[Wed Jun 04 00:34:05.022491 2014] [ssl:emerg] [pid 24089:tid 140719371077376] AH02312: Fatal error initialising mod_ssl, exiting.

AH00016: Ошибка конфигурации

Я попытался сгенерировать простую пару сертификат / ключ точно так, как описано в httpd документы К сожалению, я все еще получаю те же ошибки, что и выше.

Я видел отчет об ошибке с аналогичной проблемой: https://issues.apache.org/bugzilla/show_bug.cgi?id=56410 Но версия openssl, которая у меня есть, работает там. Я также попытался применить патч из отчета, а также безуспешно построить последнюю ветку 2.4.x, я получаю те же ошибки, что и выше.

Я также попытался создать короткую цепочку сертификатов и установить сертификат корневого ЦС с помощью директивы SSLCertificateChainFile. Это тоже не помогло, я получаю те же ошибки, что и выше.

Меня не интересует установка усиленной безопасности и т. Д. Единственное, что мне нужно, это запустить httpd с простейшей конфигурацией SSL, чтобы продолжить тестирование конфигурации прокси для mod_proxy_wstunnel.

Кто-нибудь сталкивался и решил эту проблему?

Моя последовательность создания самоподписанного сертификата неверна?

Буду очень признателен за любую помощь!

PS: Обновлен исходный http-ssl.conf, чтобы отразить правильное состояние, которое я тестировал.

Похоже, проблема связана с созданным вами сертификатом. Похоже, вы забыли / пропустили несколько шагов. Я думаю, вы указали парольную фразу для сертификата, и apache не может ее найти. Парольную фразу можно указать через SSLPassPhraseDialog, который отсутствует в вашем файле конфигурации.

В качестве альтернативы вы можете избежать этой парольной фразы, удалив ее из сертификата при создании сертификата. Я успешно сгенерировал самоподписанный сертификат, выполнив следующие шаги в http://www.akadia.com/services/ssh_test_certificate.html

Я бы предложил восстановить новый сертификат, используя инструкции, упомянутые в приведенной выше ссылке, и снова протестировать его ....

Похоже, моя проблема была неправильно построена httpd с "неправильным" openssl. Первоначально я загрузил исходные коды openssl 1.0.1g, собрал и установил их и указал на установленную версию при настройке httpd:

cd ../openssl-1.0.1g
./config -fPIC no-gost no-shared no-zlib 
make depend
make
make install 

cd ../httpd-2.4.9
./configure --enable-ssl --with-ssl=/usr/local/ssl/ --with-apr=apr-1.5.1/ --with-apr-util=apr-util-1.5.3/
make
make install

Вместо этого я установил пакет openssl-devel с помощью yum и использовал расположение openssl по умолчанию:

yum install openssl-devel
cd ../httpd-2.4.9
./configure --enable-ssl --with-apr=apr-1.5.1/ --with-apr-util=apr-util-1.5.3/
make
make install

Сервер запустился сразу после установки с простым сертификатом, созданным в папке / usr / local / apache2 / conf с помощью следующей команды:

openssl req -new -x509 -nodes -out server.crt -keyout server.key

В качестве примечания я заметил, что вы используете уязвимую версию OpenSSL (1.0.1e-fips). В этой версии есть известная ошибка Heartbleed. Обратитесь http://en.wikipedia.org/wiki/Heartbleed Больше подробностей.

Вы можете попробовать обновить OpenSSL до соответствующей последней версии, которая решает эту проблему.

Ваша первоначальная команда, которая создает центр сертификации, может быть неправильной. Я бы попытался восстановить ЦС, используя следующие команды, взятые из Arch Linux Wiki:

# openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out server.key
# chmod 600 server.key
# openssl req -new -key server.key -out server.csr
# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Дайте нам знать, как это происходит!

Спустя 4 года после того, как первоначальный плакат решил его проблему, я наткнулся на эту страницу между появлением похожей проблемы и поиском решения. Совсем другое, но опубликовано для тех, кто приходит сюда после исследования похожих сообщений об ошибках. Моя конфигурация очень похожа на вашу, идеально подходит для httpd-2.2, но таинственным образом не работает для httpd-2.4, где все просто нужно сделать немного по-другому. После того, как вырвали много волосков, это в конечном итоге сработало для меня. Первая подсказка: вы больше не можете полагаться только на свое определение VirtualHost. Вы должен сослаться на действительную пару сертификат / ключ из conf.d / ssl.conf, например (расположение для моей системы Fedora):

SSLCertificateFile /etc/pki/tls/certs/localhost.crt

SSLCertificateKeyFile /etc/pki/tls/private/localhost.pem

Мой - самоподписанный сертификат, перенесенный из httpd-2.2 / openssl-1.0.2h. Сертификат находится в формате ascii PEM. Ключ был преобразован в чистую копию RSA, поэтому при запуске httpd пароль не требуется. (перед этим внимательно оцените свое окружение). Кажется, не имеет большого значения, для чего сделан сертификат, потому что это все еще сертификаты, определенные в разделе VirtualHost, которые будут представлены клиентам. Для меня эти сертификаты (перенесенные из httpd-2.2) представлены в краткой форме PEM, тогда как соответствующие ключи снова находятся в форме открытой копии RSA. Конечно, у вас должен быть загружен mod_ssl.so, но если у вас что-то работает в httpd-2.2, вы уже это сделали.