Мне нужно выполнять вызовы веб-службы из моего собственного веб-сервера, работающего на Apache / Tomcat. Apache / Tomcat, работающий в Linux, должен выполнять вызовы на сервер Microsoft, на котором работает IIS через HTTPS, который использует внутренний центр сертификации (CA) для SSL.
Как заставить Apache / Tomcat доверять правильному корневому сертификату из этого центра сертификации?
Кроме того, как проверить, работает ли это доверие? Я предполагаю, что запроса браузера с сервера, на котором размещен Apache / Tomcat, недостаточно.
Я предполагаю, что вы уже экспортировали сертификат CA в файл, например "internal-ca.pem". Кроме того, я предполагаю, что именно Tomcat инициирует SSL-соединение с сервером IIS.
Вы жестяная банка должен использовать Java keytool для импорта сертификата в хранилище ключей Java, которое используется вашим механизмом Tomcat. Хранилище ключей для сертификатов CA - $ JAVA_HOME / jre / lib / security / cacerts. Итак, чтобы импортировать ваш новый сертификат internal-ca.pem в это хранилище ключей, вы должны использовать:
$JAVA_HOME/bin/keytool -importcert \
-keystore $JAVA_HOME/jre/lib/security/cacerts \
-file /path/to/internal-ca.pem \
-trustcacerts -alias internal-ca-1
Пароль по умолчанию для хранилища ключей: Измени это
Убедитесь, что ваш сертификат находится в хранилище ключей:
$JAVA_HOME/bin/keytool -list \
-keystore $JAVA_HOME/jre/lib/security/cacerts -v | less
Протестируйте соединение с сервером:
openssl s_client -CAfile /path/to/internal-ca.pem -connect server:port
Это должно дать вам ближе к концу своего вывода:
Verify return code: 0 (ok)
Если вы хотите проверить доверие из Tomcat, вам придется написать тестовый код для этого. Извините, я не знаю Java. :-)
SSLProxyEngine on
SSLProxyCACertificateFile /etc/ssl/internal-ca.crt
SSLProxyVerify require