Использование самозаверяющих сертификатов - PullRequest
0 голосов
/ 02 ноября 2011

Я использую самоподписанный сертификат для подключения HTTPS к серверу Axis2 и от него. Все эти соединения работают нормально и по желанию.

В моем веб-сервисе есть часть, которая отвечает за отправку электронных писем. Я использую GMail для отправки почты.

Проблема заключается в том, что при попытке отправить письмо по SSL-соединению возникает ошибка сертификата, т. Е. Сертификат GMail не является доверенным. Я столкнулся с подобной проблемой и с JBoss. На этот раз мне удалось обойти эту проблему, загрузив сертификат GMail, а затем импортировав его в хранилище ключей с помощью утилиты Keytool. Долгое время это работало.

Но только недавно у меня снова возникла проблема Старых. Я пытался использовать старую технику, которая исправила проблему в прошлый раз, но на этот раз не сработала (не знаю почему)

Я считаю, что GMail использует подписанный сертификат, которому из коробки должен доверять любой из серверов, пусть это будет JBoss или Axis2. Я не могу понять, в чем проблема на самом деле. Это из-за использования сертификата Self Signed? Или есть какой-то конкретный способ его создания, чтобы подписанные сертификаты были доверенными?

Спасибо за помощь.

1 Ответ

1 голос
/ 09 ноября 2011

Для связи сервера / клиента с шифрованием SSL нам необходимы Keystores и Truststore for Server & Client. Ниже приведены инструкции по их созданию.

#Creating Server keystore and exporting a certificate
keytool -genkey -alias serverkeys -keyalg RSA -keystore server.keystore -storepass changeit -keypass changeit -dname "CN=test.com, OU=Test, O=Test, L=London, ST=London, C=UK"
keytool -export -alias serverkeys -keystore server.keystore -storepass changeit -file server.cer

#Creating Client keystore and exporting a certificate
keytool -genkey -alias clientkeys -keyalg RSA -keystore client.keystore -storepass changeit -keypass changeit -dname "CN=test.com, OU=test, O=test, L=London, ST=London, C=UK"
keytool -export -alias clientkeys -keystore client.keystore -storepass changeit-file client.cer

#Making a copy of cacerts file. These copies will be used for client/server truststore
cp /usr/java/jdk1.6.0_14/jre/lib/security/cacerts client.truststore
cp /usr/java/jdk1.6.0_14/jre/lib/security/cacerts server.truststore

#Copying server certificate to Client truststore
keytool -import -trustcacerts -v -keystore client.truststore -storepass changeit -file server.cer

#Copying Client certificate to Server truststore
keytool -import -trustcacerts -v -keystore server.truststore -storepass changeit -file client.cer

В течение первых нескольких итераций я не использовал cacert, а непосредственно создавал доверенные хранилища из сертификата, и это тоже хорошо работало. Проблемы возникли, когда нам нужно подключиться к некоторым другим службам с помощью SSL, и подключение не может быть установлено, даже если служба использует подписанный сертификат.

Например, подключение к SMTP-серверу GMail не будет работать, если хранилище доверенных сертификатов не было создано из серверов. Причина в том, что даже если GMail использует подписанный сертификат, мы будем использовать доверенное хранилище, которое не будет знать, можно ли доверять сертификату GMail. По этой причине мы использовали cacerts для создания хранилища доверенных сертификатов. После чего мы смогли подключить любую службу, которая использует подписанный сертификат.

Если в случае обнаружения неподписанного сертификата нам нужно будет добавить его в хранилище компонентов.

...