gpt4 book ai didi

java - 在 hsqldb 中禁用主机名验证

转载 作者:太空宇宙 更新时间:2023-11-03 15:04:48 25 4
gpt4 key购买 nike

我有一个 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
}));
}
}

有没有办法以某种方式绕过此机制并禁用主机名验证?

最佳答案

在 hsqldb 论坛上问了同样的问题,了解到没有解决方法。您唯一可以做的就是注释掉调用验证方法的代码,然后重建 jar。我仍然感到困惑,为什么 hsqldb 没有使用 HostnameVerifier (http://docs.oracle.com/javase/6/docs/api/javax/net/ssl/HostnameVerifier.html),这会使它更容易编写自定义主机名 validator 。

关于java - 在 hsqldb 中禁用主机名验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11793028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com