Рейтинг:0

Как настроить SSL в Tomcat9?

флаг kr

Я попытался установить SSL на tomcat 9 через порт 8443. Однако я не знаю, поддерживает ли tomcat SSL в формате pem или crt.

Я внес изменения в server.xml, но при запуске tomcat я получаю следующую ошибку в журналах catelina.out.

Ниже приведена моя конфигурация server.xma.

 <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeyFile="conf/privkey.key"
                         certificateFile="conf/fullchain.crt"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>

Журналы ошибок Tomcat

org.apache.coyote.AbstractProtocol.init Инициализация обработчика протокола ["https-openssl-nio-8443"]
17 ноября 2021 г. 14:58:19.826 СЕРЬЕЗНЫЙ [main] org.apache.catalina.util.LifecycleBase.handleSubClassException Не удалось инициализировать компонент [Connector [HTTP/1.1-8443]]
    org.apache.catalina.LifecycleException: ошибка инициализации обработчика протокола
        в org.apache.catalina.connector.Connector.initInternal(Connector.java:983)
        в org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
        в org.apache.catalina.core.StandardService.initInternal(StandardService.java:533)
        в org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
        на org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:1059)
        в org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
        на org.apache.catalina.startup.Catalina.load(Catalina.java:584)
        на org.apache.catalina.startup.Catalina.load(Catalina.java:607)
        в java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод)
        в java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        в java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        в java.base/java.lang.reflect.Method.invoke(Method.java:566)
        на org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:304)
        на org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
    Вызвано: java.lang.IllegalArgumentException
        на org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:99)
        на org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:71)
        на org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:218)
        на org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1124)
        в org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1137)
        в org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:574)
        на org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:74)
        в org.apache.catalina.connector.Connector.initInternal(Connector.java:980)
        ... еще 13
    Вызвано: java.lang.NullPointerException
        в org.apache.tomcat.util.net.jsse.PEMFile.<init>(PEMFile.java:101)
        в org.apache.tomcat.util.net.jsse.PEMFile.<init>(PEMFile.java:74)
        на org.apache.tomcat.util.net.SSLUtilBase.getKeyManagers(SSLUtilBase.java:303)
        на org.apache.tomcat.util.net.openssl.OpenSSLUtil.getKeyManagers(OpenSSLUtil.java:98)
        на org.apache.tomcat.util.net.SSLUtilBase.createSSLContext(SSLUtilBase.java:247)
        на org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:
флаг ru
Я настоятельно рекомендую вам оставить ваше приложение Tomcat внутренним и предоставлять его только через обратный прокси-сервер (через Apache2 напрямую или через NGINX), потому что Tomcat печально известен тем, что не делает SSL простым как нативную часть приложения.
Рейтинг:2
флаг cn

Tomcat известен своими трудностями с SSL. Мой совет: поставьте перед ним обратный прокси для обработки SSL.

Существует широкий выбор программных пакетов, которые могут служить обратным прокси-сервером. Двумя наиболее популярными являются Apache и Nginx. Выберите один, установите его на тот же компьютер, что и ваш сервер Tomcat, и настройте его для приема HTTPS-запросов на порт по вашему выбору и пересылки их как HTTP на ваш HTTP-порт Tomcat.

Учебники по настройке Apache или Nginx в качестве обратного прокси-сервера SSL легко доступны во многих местах, например здесь и здесь.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.