Почему можно указать хранилище доверенных сертификатов, в котором используется нестандартный пароль без указания пароля? - PullRequest
0 голосов
/ 25 октября 2019

У меня очень простой сценарий:

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".

1 Ответ

1 голос
/ 25 октября 2019

Это даже зависит от реализации SPI (JCE), на самом деле вам не нужен пароль для просмотра списка JKS-хранилища.

Сертификаты не являются конфиденциальными, но вы не хотели бы, чтобы кто-либо вмешивался в список сертификатов, которым должна доверять система (например, предоставляя поддельный / ложный корневой CA).

Должно бытьспособ обеспечить доверие к хранилищу доверенных сертификатов (пароль должен быть подтвержден). Если вы введете неправильный пароль, произойдет ли сбой?

Да, это не удастся, и если вы не предоставите пароль, вы не сможете обновить доверенное хранилище

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...