Для связи сервера / клиента с шифрованием 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 для создания хранилища доверенных сертификатов. После чего мы смогли подключить любую службу, которая использует подписанный сертификат.
Если в случае обнаружения неподписанного сертификата нам нужно будет добавить его в хранилище компонентов.