SSL异常<kik.botframework.com>

时间:2017-07-25 15:25:47

标签: java ssl botframework

我正在使用Bot Connector REST API,但我遇到了Kik频道的问题。当我尝试回复消息时,我收到此错误:

$GroupList = Import-CSV "C:\Users\eh3599\Desktop\Powershell CSV Test\Test2-TestOutput1.csv" -header GroupName,Domain | Select GroupName,Domain

我使用的服务网址是“https://kik.botframework.com”。

此刻我正在运行本地服务器。在这种配置中连接Skype频道没有任何问题,但Kik给我带来了麻烦。

2 个答案:

答案 0 :(得分:0)

我没有完全解决方案,但我可以解释一下这背后的原因以及您可能需要仔细检查一下。

因此,简而言之,由于SNI(服务器名称指示)以及客户端无法支持SNI,这种情况正在发生。

查看此答案,了解此问题https://serverfault.com/questions/594368/openssl-returns-different-ssl-certificate-to-that-shown-by-chrome

在这种情况下,相同的IP托管了一堆域和证书。大多数现代浏览器都支持SNI,并且能够检测到这一点并向您显示正确的证书(尝试使用Firefox)。

但是,当服务器的SSL客户端尝试进行握手(未指定“服务器名称”/“主机名”)时,它不知道要获取哪个证书,因此会获取核心证书。

<强>解决方案吗 客户端应“指示”这是主机名,然后它将获取正确的证书。

实施例: openssl s_client -connect dev.botframework.com:443

VS

openssl s_client -servername dev.botframework.com -connect dev.botframework.com:443

如何解决这个问题?

跳过主机名验证阶段。 Disabling SSL Certificate Validation in Spring RestTemplate或其他示例:

Registry<ConnectionSocketFactory> registry = RegistryBuilder.    <ConnectionSocketFactory>create()
            .register("http",             PlainConnectionSocketFactory.getSocketFactory()).register("https", new         SSLConnectionSocketFactory(SSLContexts.createDefault(), new HostnameVerifier() {
                    @Override
                    public boolean verify(String hostname, SSLSession     session) {            
                        return true;
                    }
                })).build();

答案 1 :(得分:0)

问题最终是我的服务器使用的HttpClient库的版本相当旧(4.2.5)并且不支持服务器名称指示。我可以根据这里修补它以支持SNI:Server Name Indication (SNI) Support。感谢Arka指出问题可能是什么。