2017-07-25 4 views
0

ボットコネクタREST APIを使用していますが、Kikチャネルに問題があります。私はメッセージに応答しようとすると、私はこのエラーが発生します:私は使用していますSSL例外<kik.botframework.com>

javax.net.ssl.SSLException: hostname in certificate didn't match: <kik.botframework.com> != <*.azurewebsites.net> OR <*.azurewebsites.net> OR <*.scm.azurewebsites.net> OR <*.azure-mobile.net> OR <*.scm.azure-mobile.net> 

サービスURLは「https://kik.botframework.com」です。

現時点では、これをローカルサーバーから実行しています。私はこの設定でSkypeチャンネルに接続するのに何の問題もありませんでしたが、Kikは私にトラブルを与えています。

答えて

0

問題は、私のサーバーを使用しているのHttpClientライブラリのバージョンは(4.2.5)かなり古いですし、サーバ名の表示をサポートしていないことになってしまいました。 SNIをサポートするようにパッチを当てることができました:Server Name Indication (SNI) Support。問題がどのようなものかを指摘してくれたArkaに感謝します。

0

私は解決策がありませんが、私はこれの背後にある理由とあなたの側を再確認する必要があるかもしれないことを説明することができます。

SNI(Server Name Indication)が原因であり、クライアントが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(); 
関連する問題