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
}));
}
}
どういうわけかこのメカニズムをバイパスしてホスト名の検証を無効にする方法はありますか?