我使用Netty进行异步http请求。当请求的url是https时,我会将其添加到管道中:
SSLEngine engine = SecureChatSslContextFactory.getClientContext().createSSLEngine();
engine.setUseClientMode(true);
pipeline.addLast("ssl", new SslHandler(engine));
这很好,我得到了响应和所有内容,但输出中会写一条警告,说:未知服务器证书,例如,如果我发出请求:https://www.google.com这就是我得到的:
UNKNOWN SERVER CERTIFICATE: CN=www.google.com, O=Google Inc, L=Mountain View, ST=California, C=US
由于一切仍在运行,这对我来说不是什么大问题,但有两件事我想知道:
为什么我会收到警告?谷歌的证书是一个"众所周知"的证书,浏览器似乎没有对此发出警告。我应该告诉ssl引擎在哪里查找证书吗?
我能在运行时以某种方式捕捉到这个警告而不是打印出这个消息吗?
谢谢。
检查以确保"信任存储"正确标识给Netty。在执行此操作时,您可能需要考虑添加${JAVA_HOME}/jre/lib/security/cacerts作为受信任存储。
如果没有配置,您可能无法通过SSL 连接
Dave,
看看这个线程中的代码示例:使用双向SSL握手(客户端和服务器证书)设置Netty
我认为这将帮助您设置密钥库和信任库。