Поддержка проверки имени хоста Netty SSL
Из того, что я могу сказать, нет никаких "флагов" или настроек конфигурации, которые я могу использовать, чтобы включить проверку имени хоста SSL в Netty. Примеры, которые я видел, добавляют пользовательские реализации с использованием ChannelFuture, возвращаемого SslHandler.handshake():
ChannelFuture handshakeFuture = sslHandler.handshake();
handshakeFuture.addListener(new ChannelFutureListener()
{
public void operationComplete(ChannelFuture future) throws Exception
{
if (future.isSuccess())
{
// get peer certs, verify CN (or SAN extension, or..?) against requested domain
...
Я просто хочу убедиться, что я на правильном пути и что я не упускаю способ просто "включить" проверку имени хоста.
1 ответ
Если вы используете Java 7, вы можете сделать это, настроив SSLSocket
или же SSLEngine
сделать это для вас через менеджер доверия по умолчанию. (Это не зависит от Нетти.)
Примерно так должно работать:
SSLContext sslContext = SSLContext.getDefault();
SSLEngine sslEngine = sslContext.createSSLEngine();
SSLParameters sslParams = new SSLParameters();
sslParams.setEndpointIdentificationAlgorithm("HTTPS");
sslEngine.setSSLParameters(sslParams);
SSLEngine
экземпляр может быть передан в качестве аргумента SslHandler
конструктор, как описано в этом примере.
Алгоритм идентификации конечной точки может быть либо HTTPS, либо LDAP. Для других протоколов правила HTTPS должны быть достаточно разумными.
(Конечно, вы можете проверить, что он работает, подключившись к этому хосту, используя неправильное имя хоста, например, используя URL с IP-адресом вместо имени хоста, при условии, что сертификат не содержит запись IP-адреса Subject Alternative Name для этого.)