0

tomcat-hibernate-hsqldbを設定していて、SSLを使用してアプリケーションとhsqldb間のデータ転送を保護したいと考えています。ただし、どの展開でも使用できる証明書を事前にインストールする必要があります。新しい展開サイトごとに新しい証明書を使用したくありません。このため、任意のランダムな共通名に対して自己署名証明書の発行を使用してから、同じ証明書をTomcatのトラストストアにインストールすると、この例外が発生します。

 java.net.UnknownHostException: Certificate Common Name[random name] does not match host name[192.168.100.10] 

この設定でホスト名の検証を無効にする必要がありますが、Webで見つけたすべての情報は、HttpsURLConnectionでホスト名を無効にするメカニズムを示しています。私はhsqldbがファイルにそれを行うためのカスタムコードを持っていると信じています

org.hsqldb.serverHsqlSocketFactorySecure

これを行うメソッドは次のとおりです。

protected void verify(String host, SSLSession session) throws Exception {

    X509Certificate[] chain;
    X509Certificate   certificate;
    Principal         principal;
    PublicKey         publicKey;
    String            DN;
    String            CN;
    int               start;
    int               end;
    String            emsg;

    chain       = session.getPeerCertificateChain();
    certificate = chain[0];
    principal   = certificate.getSubjectDN();
    DN          = String.valueOf(principal);
    start       = DN.indexOf("CN=");

    if (start < 0) {
        throw new UnknownHostException(
            Error.getMessage(ErrorCode.M_SERVER_SECURE_VERIFY_1));
    }

    start += 3;
    end   = DN.indexOf(',', start);
    CN    = DN.substring(start, (end > -1) ? end
                                           : DN.length());

    if (CN.length() < 1) {
        throw new UnknownHostException(
            Error.getMessage(ErrorCode.M_SERVER_SECURE_VERIFY_2));
    }

    if (!CN.equalsIgnoreCase(host)) {

        // TLS_HOSTNAME_MISMATCH
        throw new UnknownHostException(
            Error.getMessage(
                ErrorCode.M_SERVER_SECURE_VERIFY_3, 0,
                new Object[] {
            CN, host
        }));
    }
}

どういうわけかこのメカニズムをバイパスしてホスト名の検証を無効にする方法はありますか?

4

1 に答える 1

0

hsqldb フォーラムで同じ質問をして、これに対する回避策がないことを知りました。あなたができる唯一のことは、verify メソッドを呼び出しているコードをコメントアウトしてから、jar を再構築することです。なぜ hsqldb が HostnameVerifier (http://docs.oracle.com/javase/6/docs/api/javax/net/ssl/HostnameVerifier.html) を使用しなかったのか、私はまだ困惑しています。カスタムのホスト名検証ツール。

于 2012-08-05T14:48:43.743 に答える