В чем разница между реализацией SSL APR и реализацией SSL JSSE на TOMCAT5.5 - PullRequest
17 голосов
/ 20 июня 2010

Я настраиваю SSL для поддержки HTTPS на TOMCAT 5.5, поэтому я сослался на http://tomcat.apache.org/tomcat-5.5-doc/ssl-howto.html,, в котором подробно описывается, как реализовать SSL.

В этом документе описываются два способа реализации SSL, а именно реализация APR и реализация JSSE. Интересно, в чем разница между ними, включая их недостатки и преимущества?

Ответы [ 4 ]

24 голосов
/ 26 июня 2010

Разница в том, что JDK использует свою собственную реализацию SSL, в то время как APR использует то, что установлено на компьютере, то есть OpenSSL в большинстве случаев.

Если для https используется низкий или средний трафик,Решение Java просто отлично, но для очень тяжелой загрузки (например, когда большинство страниц выполняется по https), собственное решение OpenSSL намного лучше, его можно перекомпилировать и оптимизировать, поэтому оно будет работать еще быстрее и потреблять меньше ресурсов.Основной недостаток APR + OpenSSL, однако, заключается в том, что он требует больше конфигурации и настройки + тестирования, а версия Java работает просто из коробки.

Что я обычно делаю, это всегда использую Java SSL по умолчаниюрешение вместе с инструментами мониторинга, и если трафик становится тяжелым, чем, и только чем тратить усилия на настройку решения APR.

1 голос
/ 06 марта 2015

Tomcat версии ниже 5.5.29 не поддерживает новый атрибут коннектора "allowUnsafeLegacyRenegotiation", а также, если вы используете старую машину Java (jvm 1.6 или более раннюю версию без исправлений безопасности) и не хотите обновлять ни java, ни Tomcat единственный способ - это использовать APR. См:

О исправлениях безопасности для RFC 5746 CVE-2009-3555

О исправлениях Tomcat

Об уязвимости MITM

1 голос
/ 11 апреля 2014

При использовании APR Tomcat может использовать движок OpenSSL, который уязвим к ошибке Heartbleed (http://heartbleed.com).. Затем вы можете просто переключить ваш server.xml из APR:

<-- Define a APR SSL Coyote HTTP/1.1 Connector on port 8443 --> <Connector protocol="org.apache.coyote.http11.Http11AprProtocol" port="8443" .../>

Для реализации Java SSL, которая не подвержена этой ошибке:

<-- Define a blocking Java SSL Coyote HTTP/1.1 Connector on port 8443 --> <Connector protocol="org.apache.coyote.http11.Http11Protocol" port="8443" .../>

Или, если вы все равно хотите использовать APR, убедитесь, что вы используете Tomcat Nativeбиблиотека, скомпилированная с версией OpenSSL, которая не уязвима для Heartbleed (OpenSSL 1.0.1g или выше), см. https://issues.apache.org/bugzilla/show_bug.cgi?id=56363.

0 голосов
/ 10 июля 2019

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

  • APR поддерживается с момента Tomcat 5.5.x, NIO был добавлен в Tomcat 6.x, а NIO2 добавлен в Tomcat 8.x.
  • APR может использовать только OpenSSL, но NIO и NIO2 могут использовать либо JSSE, либо OpenSSL.
  • блокирует APR при выполнении рукопожатия SSL, в то время как другие два этого не делают.

OpenSSL connector comparison

Также обратите внимание это утверждение , которое показывает отличную совместимость между атрибутами конфигурации JSSE и OpenSSL начиная с Tomcat 8.5:

Соединители NIO и NIO2 используют либо реализацию JSSE Java SSL, либо реализацию OpenSSL, тогда какAPR / родной соединитель использует только OpenSSL.До Tomcat 8.5 различные атрибуты конфигурации использовались для JSSE и OpenSSL.Начиная с Tomcat 8.5 и, насколько это возможно, общие атрибуты конфигурации используются как для JSSE, так и для OpenSSL.Также, если используется реализация JSSE OpenSSL, конфигурация может быть установлена ​​с использованием атрибутов JSSE или APR (примечание: но не оба типа в одной и той же конфигурации).Это поможет упростить переключение между реализациями коннекторов для коннекторов SSL.

Tomcat Инструкции по SSL содержит раздел , который углубляется в связи между коннекторами,Вот как заставить NIO или NIO2 использовать JSSE:

<!-- Define an HTTP/1.1 Connector on port 8443, JSSE NIO implementation -->
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
           sslImplementationName="org.apache.tomcat.util.net.jsse.JSSEImplementation"
           port="8443" .../>

<!-- Define an HTTP/1.1 Connector on port 8443, JSSE NIO2 implementation -->
<Connector protocol="org.apache.coyote.http11.Http11Nio2Protocol"
           sslImplementationName="org.apache.tomcat.util.net.jsse.JSSEImplementation"
           port="8443" .../>

А вот как настроить NIO для использования OpenSSL (аналогично для NIO2):

<!-- Define an HTTP/1.1 Connector on port 8443, JSSE NIO implementation and OpenSSL -->
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="8443"
           sslImplementationName="org.apache.tomcat.util.net.openssl.OpenSSLImplementation"
           .../>

Наконец, чтобы настроить APR:

<!-- Define an HTTP/1.1 Connector on port 8443, APR implementation -->
<Connector protocol="org.apache.coyote.http11.Http11AprProtocol"
           port="8443" .../>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...