У меня есть установка tomcat-hibernate-hsqldb, и я хочу использовать SSL для защиты передачи данных между моим приложением и hsqldb. Однако мне нужно предварительно установить сертификат, который можно использовать при любом развертывании. Я не хочу использовать новый сертификат для каждого нового сайта развертывания. Для этого, если я просто использую самозаверяющий сертификат для любого случайного общего имени, а затем устанавливаю тот же сертификат в хранилище доверенных сертификатов tomcat, я получаю это исключение
java.net.UnknownHostException: Certificate Common Name[random name] does not match host name[192.168.100.10]
Мне нужно отключить проверку имени хоста в этой настройке, но вся информация, которую я нашел в Интернете, указывает на механизм ее отключения для 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
}));
}
}
Есть ли способ обойти этот механизм и отключить проверку имени хоста?