У меня очень простой сценарий:
public class Main {
public static void main(String[] args) {
System.setProperty("javax.net.debug", "ssl");
System.setProperty("javax.net.ssl.trustStore", "H:/data/serverkeystore.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "somestuff");
try {
ServerSocketFactory ssf = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLServerSocket serverSocket = (SSLServerSocket) ssf.createServerSocket(1337);
... code goes on here ...
Не имеет значения, прокомментирую ли я строку
System.setProperty("javax.net.ssl.trustStorePassword", "somestuff");
или использую ее. В ответах на этот вопрос было хорошо описано, для чего используется пароль (даже если там отсутствует информация об источнике) и что если пароль не указан, целостность TrustStore не может бытьпроверено. Так что в моем примере кода, если вы раскомментируете эту строку, Java будет использовать TrustStore без проверки его целостности. С помощью моих собственных тестов я мог определить, что если я введу неправильный пароль и использую код, как показано выше, то это приведет к сообщению об ошибке (что является желаемым результатом). Я просто удивлен, что можно опустить пароль, и тогда Java, очевидно, работает с непроверенным TrustStore. Может кто-нибудь объяснить процедуру инициализации TrustStore в отношении моего вопроса?
Как уже упоминалось в вопросе, я использую свой собственный пароль для TrustStore, который отличается от стандартного пароля "changeit".