セルフホストWeb APIサービスを作成しています。セキュリティを確保するために、 this の記事を調べて実装し、makecertを使用してローカルSSL証明書を正常に生成し、使用している場合は認証されたサービスとトークンを生成します
http://localhost/webapi/authentication/authenticate
リンクしますが、HTTPSを使用してサービスにアクセスしようとすると、Firefoxで次のようになります。
ssl_error_rx_record_too_long
そして、同じリクエストに対して、フィドラーは私に示します:
HTTP/1.1 502 Fiddler-接続失敗日:月、2013年8月26日10:44:27 GMTコンテンツタイプ:text/html; charset = UTF-8接続:閉じるタイムスタンプ:13:44:27.433
[フィドラー] localhostへのソケット接続に失敗しました。
server.fiddler.network.https>とのHTTPS接続のネゴシエートに失敗しましたlocalhostの既存の接続の保護に失敗しました。予期しないパケット形式のため、ハンドシェイクは失敗しました。
私のセルフホスト構成:
private HttpSelfHostServer _server;
private ExtendedHttpsSelfHostConfiguration _config;
public const string ServiceAddress = "https://localhost/webapi";
_config = new ExtendedHttpsSelfHostConfiguration(ServiceAddress);
_server = new HttpSelfHostServer(_config);
_server.OpenAsync();
この投稿 から取得したExtendedHttpSelfHostConfigurationは次のとおりです。
public class ExtendedHttpSelfHostConfiguration : HttpSelfHostConfiguration
{
public ExtendedHttpSelfHostConfiguration(string baseAddress) : base(baseAddress) { }
public ExtendedHttpSelfHostConfiguration(Uri baseAddress) : base(baseAddress) { }
protected override BindingParameterCollection OnConfigureBinding(HttpBinding httpBinding)
{
if (BaseAddress.ToString().ToLower().Contains("https://"))
{
httpBinding.Security.Mode = HttpBindingSecurityMode.Transport;
}
return base.OnConfigureBinding(httpBinding);
}
}
私は何が欠けていますか?前もって感謝します!
このブログ記事 によれば、SSL証明書を作成して特定のポート(私の場合は99)に割り当てる必要があることがわかりました。
ローカルで署名されたSSLを作成しました。次に、ThumbprintとApplicationIdを取得しました。 CMDコマンドnetshを使用(Win7以前のシステムにはhttpcfgツールがあります)、ポートに証明書を割り当てました
netsh http add sslcert ipport=0.0.0.0:99 certhash=3e49906c01a774c888231e5092077d3d855a6861 appid={2d6059b2-cccb-4a83-ae08-8ce209c2c5c1}
、ここでcerthash = SSLThumbprint、およびappid =ApplicationIdI '以前にコピーしました。
これで、HTTPSリクエストを作成できるようになりました!
指定した名前で証明書が作成されます。それを見つけます。
これで証明書を作成できました。次は、自己ホストで使用しているポートに証明書をバインドします。 https:// localhost:50 の場合
_netsh http add sslcert ipport=0.0.0.0:5000 certhash=[cert-thumbprint] appid={[App-Id]}
_
[Assembly: Guid("[app-id]")]
完了です!