Jump to content
Калькуляторы

Настройка HTTPS апач24 не получается автоматический запуск, только вручную

Имеем подопытного в виде: FreeBSD 8.4-STABLE + Apache24

Подключаем SSL в целом в стандартном, по гугловским мануалам, конфигом:

httpd.conf

 

LoadModule cache_module libexec/apache24/mod_cache.so
LoadModule cache_socache_module libexec/apache24/mod_cache_socache.so
LoadModule socache_shmcb_module libexec/apache24/mod_socache_shmcb.so
LoadModule socache_dbm_module libexec/apache24/mod_socache_dbm.so
LoadModule socache_memcache_module libexec/apache24/mod_socache_memcache.so
LoadModule ssl_module libexec/apache24/mod_ssl.so

...
Include etc/apache24/extra/httpd-ssl.conf

<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

 

s2# cat /usr/local/etc/apache24/extra/httpd-ssl.conf

#SSLRandomSeed startup file:/dev/random  512
#SSLRandomSeed startup file:/dev/urandom 512
#SSLRandomSeed connect file:/dev/random  512
#SSLRandomSeed connect file:/dev/urandom 512

Listen 443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl
SSLPassPhraseDialog  builtin
#SSLPassPhraseDialog |/usr/local/etc/apache24/echo
#SSLPassPhraseDialog exec:/usr/local/etc/apache24/echo

#SSLSessionCache         "dbm:/var/run/ssl_scache"
SSLSessionCache        "shmcb:/var/run/ssl_scache(512000)"
SSLSessionCacheTimeout  300

<VirtualHost _default_:443>

#   General setup for the virtual host
#DocumentRoot "/usr/local/www/apache24/data"
DocumentRoot "/usr/local/www/billing"
ServerName ssl.billing-lan.net:443
ServerAdmin you@example.com
ErrorLog "/var/log/httpd-error.log"
TransferLog "/var/log/httpd-access.log"

SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/apache24/server.crt"
SSLCertificateKeyFile "/usr/local/etc/apache24/server.key"
#SSLCertificateKeyFile "/usr/local/etc/apache24/server.dec.key"

<FilesMatch "\.(cgi|shtml|phtml|php)$">
   SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/usr/local/www/apache24/cgi-bin">
   SSLOptions +StdEnvVars
</Directory>

BrowserMatch "MSIE [2-5]" \
        nokeepalive ssl-unclean-shutdown \
        downgrade-1.0 force-response-1.0

CustomLog "/var/log/httpd-ssl_request.log" \
         "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"


</VirtualHost>
s2#

 

В этой конфигурации апач запускается:

 

s2# sh /usr/local/etc/rc.d/apache24 start

Performing sanity check on apache24 configuration:

Syntax OK

Starting apache24.

Apache/2.4.10 mod_ssl (Pass Phrase Dialog)

Some of your private key files are encrypted for security reasons.

In order to read them you have to provide the pass phrases.

 

Private key ssl.billing-lan.net:443:0 (/usr/local/etc/apache24/server.key)

Enter pass phrase:

 

OK: Pass Phrase Dialog successful.

s2#

 

После чего нормально выдаёт сертификаты на подтверждение и в целом замечаний нет.

 

Однако ребутать апач и руками прописывать ключ к сертификату не очень хочется, то я попробовал запустить его со скриптом:

SSLPassPhraseDialog builtin

заменил на

SSLPassPhraseDialog |/usr/local/etc/apache24/echo

 

Где:

 

s2# cat /usr/local/etc/apache24/echo
#!/bin/bash
/bin/echo parol
s2#

 

chmod 0755 /usr/local/etc/apache24/echo

chown www:www /usr/local/etc/apache24/echo

 

В такой конфигурации апач стартовать не желает:

 

s2# sh /usr/local/etc/rc.d/apache24 start
Performing sanity check on apache24 configuration:
Syntax OK
Starting apache24.
/usr/local/etc/rc.d/apache24: WARNING: failed to start apache24
s2#

 

В логи ничего по этому вопросу не пишет, дебаг конфига и апача результатов не принёс :(

 

Пробовал сунуть ему в конфиг decrypted key:

SSLCertificateKeyFile "/usr/local/etc/apache24/server.dec.key"

В этом случае апач запускается, сертификаты не выдаёт, но требует их, т.е. работать невозможно.

 

Соответственно полностью автоматизированный запуск апача с нормальным ecnrypted key не получился.

 

Вопрос: где я ошибся и как всё-таки запустить апач с нормальным ключом в полностью автоматизированном режиме без участия оператора?

 

В гугле ответа на этот вопрос, к сожалению, не нашёл, поэтому прошу помощи

Share this post


Link to post
Share on other sites

По хорошему, проще ключ декриптованый использовать. По плохому - я бы не называл скрипт "echo".

 

Ну и добавил бы в скрип вывод что-нибудь в stderr, что бы в логах посмотреть, запускается он вообще, или нет.

Edited by vop

Share this post


Link to post
Share on other sites

Это смотрели? http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#removepassphrase ? Здесь вроде бы работает через SSLPassPhraseDialog...

Смотрел конечно, пробовал и Remove the encryption и exec, как и выше написал - при Remove the encryption в браузер получаю 403 ошибку, в логах это сопровождается такой записью:

 

[Wed Dec 03 17:48:17.741670 2014] [ssl:warn] [pid 44705] AH01909: host:443:0 server certificate does NOT include an ID which matches the server name

[Wed Dec 03 17:48:17.783353 2014] [ssl:warn] [pid 44706] AH01909: host:443:0 server certificate does NOT include an ID which matches the server name

[Wed Dec 03 17:48:17.874538 2014] [mpm_prefork:notice] [pid 44706] AH00163: Apache/2.4.10 (FreeBSD) OpenSSL/1.0.1e configured -- resuming normal operations

[Wed Dec 03 17:48:17.874588 2014] [core:notice] [pid 44706] AH00094: Command line: '/usr/local/sbin/httpd -D NOHTTPACCEPT'

[Wed Dec 03 17:48:21.711142 2014] [authz_core:error] [pid 44707] [client 192.168.28.10:20172] AH01630: client denied by server configuration: /usr/local/www/billing/

 

Если же делаю через exec, то апач не стартует, но в логи пишет вот такое:

 

[Wed Dec 03 17:50:41.744678 2014] [ssl:emerg] [pid 44758] AH02580: Init: Pass phrase incorrect for key host:443:0

[Wed Dec 03 17:50:41.744934 2014] [ssl:emerg] [pid 44758] SSL Library Error: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag

[Wed Dec 03 17:50:41.744954 2014] [ssl:emerg] [pid 44758] SSL Library Error: error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error

[Wed Dec 03 17:50:41.744968 2014] [ssl:emerg] [pid 44758] SSL Library Error: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag

[Wed Dec 03 17:50:41.744982 2014] [ssl:emerg] [pid 44758] SSL Library Error: error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error (Type=RSA)

[Wed Dec 03 17:50:41.744997 2014] [ssl:emerg] [pid 44758] SSL Library Error: error:04093004:rsa routines:OLD_RSA_PRIV_DECODE:RSA lib

[Wed Dec 03 17:50:41.745010 2014] [ssl:emerg] [pid 44758] SSL Library Error: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag

[Wed Dec 03 17:50:41.745024 2014] [ssl:emerg] [pid 44758] SSL Library Error: error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error (Type=PKCS8_PRIV_KEY_INFO)

 

Получается, что пароль, который указан в /usr/local/etc/apache24/echo апач понимает неверно? :(

 

Ну и добавил бы в скрип вывод что-нибудь в stderr, что бы в логах посмотреть, запускается он вообще, или нет.

У меня слишком слабые знания в bash, попробовал вот так: /bin/echo parol @>/var/log/httpd-access.log, но файл httpd-access.log пуст

Или надо как-то ещё?

Share this post


Link to post
Share on other sites
У меня слишком слабые знания в bash, попробовал вот так: /bin/echo parol @>/var/log/httpd-access.log, но файл httpd-access.log пуст

Или надо как-то ещё?

 

Немного проще:

 

>&2 echo This is a test....

 

Ну и вопрос по существу - а в каком формате сертификат и ключ? Он должен быть в PEM формате (т.е. текстовый). Внутри должно быть что-то типа такого:

 

-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDPtwTXUYgKDZmE+t4I6rKGAq+ZyMWz4PsMB9yKQpdjAC9RGNHJ
c1X4FHgu3D/96wX6hLNsqHtl3LuAoCtuCSJSBWPEtEeW09m0uMjs3wlEiGXhzUSe
6QzFh78CyN/QekoRa5aOKLDraPNaRu08cPRahHEaeqRm+EN0H51JTWAoKQIDAQAB
....
пропущено
....
WUVY53UfNSTAXxmKHG1Yi4YHb0/UyAM6I7f9LzdE53Sp0V8ZXUfAfwywDbapXljx
ZZ44PGKsVOE+DUio3c0CQQCFHtD7+l5eaSo+Uacct9CiDqsG1Urs//EBxlIyjPvq
Y99h3hG57ygN+wsGI+uTSjWFWi8lvOI8gnY6E1Fd/B8s
-----END RSA PRIVATE KEY-----

 

Ну и надо посмотреть, что бы в файле с самим сертификатом не было ключа. Или, наоборот, добавить туда ключ, что бы все было в одном файле.

Edited by vop

Share this post


Link to post
Share on other sites

Да, ключ в текстовом формате:

 

s2# cat /usr/local/etc/apache24/server.key
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,B201FD3100C5EEEE

xkAS+PsmfuXkt38KLi2lZrnakOyJ8EAvestCSDQzBL5FccfOvP4n0g6kOH0deItt
ePnu35qBXDCcX4+/r9CfTe4txjqF+COuBOe5dgpttOsJav37AZNA9/gkerUW4N8k
l2qidNVA7DqQrvyWi8k+FTsJa2oBAr9m/pgbnl5HgWPcp+sOWATADbWrg0J6TGrx
xchQZ5SFd9yCvjAvVakXI19+frU66aeYDRCRHCLxWK8zwsjHq7/MxMrCJgUtj8aJ
oY0OLwUxeDujeirb7G6GPSXILNaSABSto9gL/j9pWzCol45g+wgsZ8iAsABnucHy
eDkf2Y2B14g1eCAkJV+04gg7xhVmWYEuCeV6H2/lBfTh52GoLExu0JaP3oS4kZeF
....
пропущено
....
/sOBMA3Es5SV6ekrtxJ4jRzwMtV/lCLHivwgPZZl4+gFRgigqr54qakYJso+wrH2
UVG3w1qu5QWzIgxsjWW7hA+jtDmxyVd4RZdZKALjRygfgq36FCWU7Ql5NR+2MFlR
0P7rcI1EaKc607zgnCk5JShEZRKDhcIWr1RgLGEQoxGnP2bnls3svg==
-----END RSA PRIVATE KEY-----
s2#

 

Если в скрипте указать >&2 echo This is a test...., то куда ещё, акромя экрана, будет выведено сообщение?

Share this post


Link to post
Share on other sites

Закройте тему, я оказался конченным лохом и не проверил работу апача на http протоколе, ошибка бы там, https запустился с дешифрованного ключа без проблем.

Share this post


Link to post
Share on other sites

Замечательно, что все получилось.

 

Если в скрипте указать >&2 echo This is a test...., то куда ещё, акромя экрана, будет выведено сообщение?

 

Просто для инфы - stderr будет писаться в лог error_log. Иногда полезно для отладки.

Edited by vop

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this