terrible Posted December 3, 2014 · Report post Имеем подопытного в виде: 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 Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
hsvt Posted December 3, 2014 (edited) · Report post Это смотрели? http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#removepassphrase ? Здесь вроде бы работает через SSLPassPhraseDialog... Edited December 3, 2014 by hsvt Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vop Posted December 3, 2014 (edited) · Report post По хорошему, проще ключ декриптованый использовать. По плохому - я бы не называл скрипт "echo". Ну и добавил бы в скрип вывод что-нибудь в stderr, что бы в логах посмотреть, запускается он вообще, или нет. Edited December 3, 2014 by vop Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
terrible Posted December 3, 2014 · Report post Это смотрели? 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 Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vop Posted December 4, 2014 (edited) · Report post У меня слишком слабые знания в 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 Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
terrible Posted December 4, 2014 · Report post Да, ключ в текстовом формате: 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 Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
terrible Posted December 4, 2014 · Report post Закройте тему, я оказался конченным лохом и не проверил работу апача на http протоколе, ошибка бы там, https запустился с дешифрованного ключа без проблем. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vop Posted December 4, 2014 (edited) · Report post Замечательно, что все получилось. Если в скрипте указать >&2 echo This is a test...., то куда ещё, акромя экрана, будет выведено сообщение? Просто для инфы - stderr будет писаться в лог error_log. Иногда полезно для отладки. Edited December 4, 2014 by vop Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...