我有一個tomcat-hibernate-hsqldb設置,我想使用SSL來保護我的應用程序和hsqldb之間的數據傳輸。但是,我需要預先安裝可在任何部署中使用的證書。我不想爲每個新的部署站點使用新的證書。對於這一點,如果我只是使用自簽名證書問題,任何隨機的通用名稱,然後在Tomcat中安裝的信任存儲相同的證書,然後我得到這個異常在hsqldb中禁用主機名驗證
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
}));
}
}
有沒有辦法以某種方式繞過這個機制和禁用主機名驗證?