Можно ли не предоставлять публичный сертификат клиенту? - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь сделать ssl веб-сервер с Jetty, но я не хочу предоставлять сертификат сервера, если какой-либо клиент пытается подключиться. В обычных случаях любой может загрузить сертификат сервера, доверять и подключиться к серверу. Но я бы хотел установить сертификат сервера вручную на своем клиенте, чтобы быть уверенным, что только мой клиент имеет этот сертификат и может подключаться к моему серверу.

Это возможно? В интернете я не нашел ничего связанного с Пристанью.

Я играю с некоторым примером кода и моим складом доверенных сертификатов. Ничего особенного.

        final Server server = new Server();
        server.setHandler(new HelloWorld());

        final HttpConfiguration httpConfiguration = new HttpConfiguration();
        httpConfiguration.setSecureScheme("https");
        httpConfiguration.setSecurePort(8085);

        final ServerConnector http = new ServerConnector(server,
                new HttpConnectionFactory(httpConfiguration));
        http.setPort(8081);
        server.addConnector(http);

        final SslContextFactory sslContextFactory = new SslContextFactory("mykey.jks");
        sslContextFactory.setKeyStorePassword("tester");
        sslContextFactory.setNeedClientAuth(true);

        final HttpConfiguration httpsConfiguration = new HttpConfiguration(httpConfiguration);
        httpsConfiguration.addCustomizer(new SecureRequestCustomizer());
        final ServerConnector httpsConnector = new ServerConnector(server,
                new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString()),
                new HttpConnectionFactory(httpsConfiguration));
        httpsConnector.setPort(8085);
        server.addConnector(httpsConnector);

        server.start();
        server.join();

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

1 Ответ

0 голосов
/ 12 января 2019

Вместо попытки защиты через скрытность вы должны реализовать Двухсторонний SSL . Вы можете взглянуть на 2-way SSL с Java: Keystore наносит ответный удар статья.

Клиент всегда может слепо доверять или игнорировать любой сертификат, представленный сервером. Пока кто-то знает адрес сервера, он сможет сделать запрос.

...