terrible Posted December 3, 2014 Posted December 3, 2014 Имеем подопытного в виде: 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 startPerforming 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 не получился. Вопрос: где я ошибся и как всё-таки запустить апач с нормальным ключом в полностью автоматизированном режиме без участия оператора? В гугле ответа на этот вопрос, к сожалению, не нашёл, поэтому прошу помощи Вставить ник Quote
hsvt Posted December 3, 2014 Posted December 3, 2014 (edited) Это смотрели? http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#removepassphrase ? Здесь вроде бы работает через SSLPassPhraseDialog... Edited December 3, 2014 by hsvt Вставить ник Quote
vop Posted December 3, 2014 Posted December 3, 2014 (edited) По хорошему, проще ключ декриптованый использовать. По плохому - я бы не называл скрипт "echo". Ну и добавил бы в скрип вывод что-нибудь в stderr, что бы в логах посмотреть, запускается он вообще, или нет. Edited December 3, 2014 by vop Вставить ник Quote
terrible Posted December 3, 2014 Author Posted December 3, 2014 Это смотрели? 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 пуст Или надо как-то ещё? Вставить ник Quote
vop Posted December 4, 2014 Posted December 4, 2014 (edited) У меня слишком слабые знания в 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 December 4, 2014 by vop Вставить ник Quote
terrible Posted December 4, 2014 Author Posted December 4, 2014 Да, ключ в текстовом формате: 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...., то куда ещё, акромя экрана, будет выведено сообщение? Вставить ник Quote
terrible Posted December 4, 2014 Author Posted December 4, 2014 Закройте тему, я оказался конченным лохом и не проверил работу апача на http протоколе, ошибка бы там, https запустился с дешифрованного ключа без проблем. Вставить ник Quote
vop Posted December 4, 2014 Posted December 4, 2014 (edited) Замечательно, что все получилось. Если в скрипте указать >&2 echo This is a test...., то куда ещё, акромя экрана, будет выведено сообщение? Просто для инфы - stderr будет писаться в лог error_log. Иногда полезно для отладки. Edited December 4, 2014 by vop Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.