我正在使用Netty进行异步http(s)请求。当请求的URL是https时,我将其添加到管道中:
SSLEngine engine = SecureChatSslContextFactory.getClientContext().createSSLEngine();
engine.setUseClientMode(true);
pipeline.addLast("ssl", new SslHandler(engine));
这很好用,我得到了回复和所有内容,但是输出中写了一条警告: UNKNOWN SERVER CERTIFICATE ,例如,如果我发出请求: https ://www.google.com 这就是我得到的:
UNKNOWN SERVER CERTIFICATE: CN=www.google.com, O=Google Inc, L=Mountain View, ST=California, C=US
由于一切仍然有效,对我来说这不是一个问题,但我想知道两件事:
为什么我会收到警告? googles的证书是一个“众所周知的”,浏览器似乎没有警告它。我应该以某种方式告诉ssl引擎在哪里查找证书?
我可以在运行时以某种方式捕获此警告,而不是打印出此消息吗?
感谢。
答案 0 :(得分:1)
检查以确保在执行此操作时向Netty正确识别“信任存储”,您可能必须将$ {JAVA_HOME} / jre / lib / security / cacerts添加为受信任存储。
如果没有配置,您可能无法通过SSL连接
答案 1 :(得分:1)
查看此主题中的代码示例:Set up Netty with 2-way SSL Handsake (client and server certificate)
我认为这将有助于您的密钥库和信任库设置。