1

私が知る限り、Netty で SSL ホスト名検証を有効にするために使用できる「フラグ」または構成設定はありません。私が見た例では、SslHandler.handshake() によって返される ChannelFuture を使用してカスタム実装を追加しています。

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
            ...

ここで正しい軌道に乗っていること、およびホスト名の検証を単に「有効にする」方法を見逃していないことを確認したいだけです。

4

1 に答える 1

4

Java 7 を使用している場合は、デフォルトのトラスト マネージャーを介して、SSLSocketまたはを構成することでこれを行うことができます。SSLEngine(これは Netty とは無関係です。)

このようなものが動作するはずです:

SSLContext sslContext = SSLContext.getDefault();
SSLEngine sslEngine = sslContext.createSSLEngine();

SSLParameters sslParams = new SSLParameters();
sslParams.setEndpointIdentificationAlgorithm("HTTPS");
sslEngine.setSSLParameters(sslParams);

このSSLEngineで説明されているように、インスタンスを引数としてSslHandlerコンストラクターに渡すことができます。

エンドポイント識別アルゴリズムは、HTTPS または LDAP のいずれかです。他のプロトコルの場合、HTTPS ルールはかなり賢明なはずです。

(もちろん、間違ったホスト名を使用してそのホストに接続することによって、それが機能することを確認できます。たとえば、ホスト名の代わりに IP アドレスを含む URL を使用して、証明書にサブジェクトの別名 IP アドレス エントリが含まれていないと仮定します。それのための。)

于 2012-11-09T21:25:38.633 に答える