Я хочу настроить SSL с помощью tomcat 6 и веб-сервера apache, используя соединитель tomcat mod_jk. Я новичок в этом, так что терпите меня.
У меня есть сертификат SSL, купленный и настроенный в Tomcat с использованием файла хранилища ключей. Он отлично работает, если доступ к Tomcat напрямую через https. Теперь мне нужен apache перед tomcat, мой вопрос: нужно ли мне предоставлять сертификат как в tomcat, так и в apache или только в tomcat? Разве apache не должен просто передавать запрос tomcat (используя JkExtractSSL) и позволять ему обрабатывать аутентификацию ssl (проверку сертификата)?
Если пути сертификатов необходимо настроить как в apache, так и в tomcat, тогда у меня есть файлы cert.p7b и certreq.csr, которые, безусловно, несовместимы с apache, не могли бы вы рассказать, как я могу это сделать?
Пока у меня следующая конфигурация:
httpd.conf:
LoadModule ssl_module modules/mod_ssl.so
LoadModule jk_module modules/mod_jk.so
JkWorkersFile /usr/local/apache2/conf/workers.properties
JkShmFile logs/mod_jk.shm
JkLogFile logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkMount /mywebapp/* worker1
JkExtractSSL On
JkHTTPSIndicator HTTPS
JkSESSIONIndicator SSL_SESSION_ID
JkCIPHERIndicator SSL_CIPHER
JkCERTSIndicator SSL_CLIENT_CERT
<VirtualHost _default_:80>
DocumentRoot "/var/lib/tomcat6/webapps/mywebapp"
Alias /mywebap "/var/lib/tomcat6/webapps/mywebapp"
<Directory "/var/lib/tomcat6/webapps/mywebapp">
Options Indexes FollowSymLinks
AllowOverride NONE
Order allow,deny
Allow from all
</Directory>
<Location "/mywebapp/WEB-INF/">
AllowOverride None
Deny from all
</Location>
</VirtualHost>
Include conf/extra/httpd-ssl.conf
httpd-ssl-conf:
<VirtualHost _default_:443>
DocumentRoot "/var/lib/tomcat6/webapps/mywebapp"
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXP56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLOptions +StdEnvVars +ExportCertData
Alias /mywebapp "/var/lib/tomcat6/webapps/mywebapp"
<Directory "/var/lib/tomcat6/webapps/mywebapp">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
JkMount /mywebapp/* worker1
<Location "/mywebapp/WEB-INF/">
AllowOverride None
Deny from all
</Location>
</VirtualHost>
Здесь важно отметить, что SSLCertificateFile и SSLCertificateKeyFile не настроены в httpd-ssl.conf, поскольку я не уверен, нужен ли он как на веб-сервере tomcat, так и на веб-сервере apache. Я уже настроил его в Tomcat с помощью файла хранилища ключей.
SSL используется для зашифрованной связи между клиентом и вашей веб-службой. Если вы ставите Apache перед Tomcat, вам необходимо настроить Apache с помощью сертификата SSL ... и он вам вообще не нужен для Tomcat, потому что Apache обрабатывает все взаимодействия с клиентом.
Если пути сертификатов необходимо настроить как в apache, так и в tomcat, то у меня есть файлы cert.p7b и certreq.csr, которые, безусловно, несовместимы с apache, не могли бы вы рассказать, как я могу это сделать?
В .csr
Файл - это ваш запрос на сертификат и не важен.
Этот вопрос есть ссылки, которые помогут вам преобразовать ваш .p7b
файл в сертификат в формате PEM для использования с Apache.
Вы также можете экспортировать сертификат, закодированный в формате PEM, из своего хранилища ключей, используя -exportcert
команда:
keytool -exportcert -alias <alias> | openssl x509 -inform der
В JkExtractSSL
Директива указывает Apache передать Tomcat некоторую информацию, связанную с SSL. В соответствии с этот документ, который включает следующие переменные среды:
SSL_CIPHER
SSL_CIPHER_USEKEYSIZE
SSL_SESSION_ID
SSL_CLIENT_CERT_CHAIN_
пну, похоже, я не могу комментировать вашу почту larsks, поэтому я отправляю это как ответ. Спасибо за ваш ответ. Это помогло мне прояснить несколько вещей. Итак, на основе вашего ответа я создал .cer
файл из keytool -exportcert
команда, как вы предложили. Однако теперь, когда я запускаю apache, я получаю следующую ошибку:
Error: "[error] mod_ssl: Init: Private key not found (OpenSSL library error follows [error] OpenSSL: error:0D084069:asn1 encoding routines:d2i_ASN1_SET:bad tag [error] OpenSSL:
Я немного погуглил и обнаружил, что «Apache не может прочитать закрытый ключ, защищенный паролем». Ключ не предполагается экспортировать вместе с сертификатом? очевидно нет. Тогда как мне заставить apache прочитать закрытый ключ и где мне найти закрытый ключ?