我正在使用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给我带来了麻烦。
答案 0 :(得分:0)
我没有完全解决方案,但我可以解释一下这背后的原因以及您可能需要仔细检查一下。
因此,简而言之,由于SNI(服务器名称指示)以及客户端无法支持SNI,这种情况正在发生。
在这种情况下,相同的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指出问题可能是什么。