22

研究で運を試しましたが、今のところ喜びはありません。

SignalR JavaScript クライアントを、自己署名 SSL 証明書にバインドされている自己ホスト型 SignalR Windows サービスに接続したいと考えています。

私のアプリケーションは http 経由で問題なく動作しますが、Owin WebApplication が https の使用を開始すると、クライアントが繰り返し切断されます。

SSL を使用して SignalR を構成するために行ったことは次のとおりです。

  1. IIS を使用して自己署名証明書を作成しました
  2. mmcの信頼されたルート証明機関に証明書をインポートしました(それが役に立ったかどうかはわかりません)
  3. NETSH コマンドを実行して、SSL をポート 8080 にバインドしました

    netsh http add sslcert ipport=0.0.0.0:8080 certhash=123456f6790a35f4b017b55d09e28f7ebe001bd appid={12345678-db90-4b66-8b01-88f7af2e36bf}
    
  4. 次のようにエクスポートされた SSL を追加するために、自己ホスト型の HubConnection インスタンスにコードを追加しました (接続できないのはクライアントであるため、これは問題ではありません)。

    if (File.Exists("MyCert.cer") 
        && Settings.GetSetting(Settings.Setting.SrProtocol).Equals("https", StringComparison.InvariantCultureIgnoreCase))
            connection.AddClientCertificate(X509Certificate.CreateFromCertFile("MyCert.cer"));
    
  5. https を使用して Owin WebApplication を開始します (これにより、http.sys にバインディングが作成されます)。

    string registerUrl = string.Format("{0}://SOME.WHERE.COM:{1}", Service.Server.SrProtocol, Service.Server.SrPort);
    WebApp.Start<StartUp>(registerUrl);
    

SignalR 2.0 のドキュメントには、次のように書かれています。

Web サーバーを開始するには、WebApplication.Start(endpoint) を呼び出します。これで、ブラウザーで endpoint/signalr/hubs に移動できるはずです。

URL http://SOME.WHERE.COM:8080/signalr/hubsを参照すると、 SignalR を駆動する JavaScript の受信に成功しています。

URL https://SOME.WHERE.COM:8080/signalr/hubsを参照すると失敗し、FF を使用して「サーバーへの接続がリセットされました」というメッセージが表示されます。

私が考慮したいくつかの追加のポイント:

  • NETSH SHOW は、URL が登録されていることを示します

    URL group ID: E300000240000022
    State: Active
    Request queue name: Request queue is unnamed.
    Properties:
        Max bandwidth: inherited
        Max connections: inherited
        Timeouts:
            Timeout values inherited
        Number of registered URLs: 1
        Registered URLs: HTTPS://SOME.WHERE.COM:8080/
    
  • NETSH SHOW は、SSL 証明書が 8080 にバインドされていることを示します。

    IP:port                 : 0.0.0.0:8080 
    Certificate Hash        : 123456f6790a35f4b017b55d09e28f7ebe001bd
    Application ID          : {12345678-db90-4b66-8b01-88f7af2e36bf} 
    Certificate Store Name  : (null) 
    Verify Client Certificate Revocation    : Enabled
    Verify Revocation Using Cached Client Certificate Only    : Disabled
    Usage Check    : Enabled
    Revocation Freshness Time : 0 
    URL Retrieval Timeout   : 0 
    Ctl Identifier          : (null) 
    Ctl Store Name          : (null) 
    DS Mapper Usage    : Disabled
    Negotiate Client Certificate    : Disabled
    

どんな助けでも大歓迎です!

4

1 に答える 1