В следующей таблице, взятой из официальных документов 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](https://i.stack.imgur.com/kWBML.png)
Также обратите внимание это утверждение , которое показывает отличную совместимость между атрибутами конфигурации 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" .../>