SignalR具有自签名SSL和自主机
SignalR具有自签名SSL和自主机
在研究中试过我的运气,但到目前为止还没有快乐。
我想将SignalR javascript客户端连接到自签名的SignalR Windows服务绑定到自签名SSL证书。
我的应用程序在http上工作得很好,但是当Owin WebApplication开始使用https时,客户端会重复断开连接。
以下是我使用SSL配置SignalR所做的工作。
- 使用IIS创建自签名证书
- 将证书导入mmc中的受信任的根证书颁发机构(不确定是否有帮助)
Ran NETSH命令将SSL绑定到端口8080
netsh http add sslcert ipport=0.0.0.0:8080 certhash=123456f6790a35f4b017b55d09e28f7ebe001bd appid={12345678-db90-4b66-8b01-88f7af2e36bf}
在自托管HubConnection实例中添加了代码以添加这样的导出SSL(尽管这应该无关紧要,因为它是无法连接的客户端):
if (File.Exists("MyCert.cer")
&& Settings.GetSetting(Settings.Setting.SrProtocol).Equals("https", StringComparison.InvariantCultureIgnoreCase))
connection.AddClientCertificate(X509Certificate.CreateFromCertFile("MyCert.cer"));
使用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)。您现在应该可以在浏览器中导航到端点/信号器/集线器。
当我浏览到URL http://SOME.WHERE.COM:8080/signalr/hubs时,我成功接收到驱动SignalR的javascript。
当我浏览到URL https://SOME.WHERE.COM:8080/signalr/hubs时,我没有成功,我收到“使用FF重置了与服务器的连接”。
我考虑了一些额外的观点:
NETSH SHOW表示网址已注册
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
任何帮助是极大的赞赏!
- 1这是博客文章的链接,其中包含注册和创建SSL证书所需的内容以及如何设置SignalR:west-wind.com/weblog/posts/2013/Sep/23 / ... - Rick Strahl2013年 9月30日3: 54
- @RickStrahl这个链接很糟糕...... - Jonesome14年1月1日21:54
- 适合我... - Rick Strahl2016年8月20日18:53
我相信它现在对我有用。这是我为了让事情流动而采取的步骤:
SSL注意事项
SSL和SignalR(Owin WebApplication)要求将证书绑定到端口。
- 使用IIS生成自签名证书,这应该将证书放入CERTMGR中的LOCAL COMPUTER> Personal> Certificates文件夹
- 在CERTMGR中移位+拖动证书到LOCAL COMPUTER>受信任的根证书颁发机构>证书文件夹,它应该在那里复制它
执行以下命令,将SSL证书绑定到0.0.0.0:8080
netsh http add sslcert ipport=0.0.0.0:8080 certhash=123456f6790a35f4b017b55d09e28f7ebe001bd appid={12345678-db90-4b66-8b01-88f7af2e36bf}
netsh http show urlacl > D:\urlacl.txt
输出:
Reserved URL : https://*:8080/
User: SOMEWHERE\Administrator
Listen: Yes
Delegate: No
SDDL: D:(A;;GX;;;S-1-5-21-138209071-46972887-2260295844-1106)
运行以下NETSH命令,将端口8080的所有IP地址保留为“我的服务”应用程序ID和服务帐户
netsh http add urlacl url=https://*:8080/ user=SOMEWHERE\Administrator listen=yes
netsh http show sslcert > D:\sslcert.txt
输出:
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
更新MyServices.exe.config文件以使用https协议(这些是appSetting键,用于在My Service启动时动态设置SignalR的协议和端口)
<add key="SrProtocol" value="https" />
<add key="SrPort" value="8080" />
使用NETSTAT START命令启动My Service
运行以下NETSH命令以显示服务状态占用已注册的URL
netsh http show servicestate > D:\servicestate.txt
输出:
Server session ID: C300000320000039
Version: 2.0
State: Active
Properties:
Max bandwidth: 4294967295
Timeouts:
Entity body timeout (secs): 120
Drain entity body timeout (secs): 120
Request queue timeout (secs): 120
Idle connection timeout (secs): 120
Header wait timeout (secs): 120
Minimum send rate (bytes/sec): 150
URL groups:
URL group ID: C600000340000138
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://*:8080/
我的应用程序不依赖于IIS,但是一旦我使用IIS临时创建绑定到我的SSL证书的端口,我的应用程序就开始工作了,我能够检查NETSH服务状态以查看IIS是如何做到的。我已经删除了IIS绑定并运行了安装说明,但仍然取得了成功。
我的Owing初创公司看起来像这样:
private void configureMessaging()
{
string registerUrl = string.Format("{0}://*:{1}", Service.Server.SrProtocol, Service.Server.SrPort);
try
{
#if DEBUG
//System.Diagnostics.Debugger.Launch();
#endif
// Starts an owin web application to host SignalR, using the protocol and port defined.
WebApp.Start<StartUp>(registerUrl);
}
catch (Exception ex)
{
Logger.Logs.Log(string.Format("Failed to configure messaging. Exception: {0}", ex.RecurseInnerException()), LogType.Error);
if (ex is HttpListenerException || ex.InnerException is HttpListenerException)
{
try
{
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "netsh.exe";
p.StartInfo.Arguments = string.Format("netsh http delete urlacl url={0}"
, registerUrl
);
p.Start();
p.StandardOutput.ReadToEnd();
p.WaitForExit();
}
catch (Exception exP)
{
Logger.Logs.Log(string.Format("Failed to delete urlacl {0}. Exception: {1}"
, registerUrl
, exP.RecurseInnerException()
)
, LogType.Error
)
;
retries = 5;
}
}
if (retries < 5)
{
retries++;
Logger.Logs.Log(string.Format("Attempting to configure messaging again. Attempt No. {0}", retries), LogType.Warn);
Thread.Sleep(1000);
configureMessaging();
}
else
Logger.Logs.Log(string.Format("Exceeded total number of retries to configure messaging.", retries), LogType.Error);
}
}
自托管的HubConnetion实例如下所示:
public IHubProxy MyHubProxy
{
get
{
if (this._MyHubProxy == null)
{
var connection = new HubConnection(string.Format("{0}://{1}:{2}/"
, Settings.GetSetting(Settings.Setting.SrProtocol)
, MyHub.GetLocalhostFqdn(null)
, Settings.GetSetting(Settings.Setting.SrPort)
)
)
;
this._MyHubProxy = connection.CreateHubProxy("MyHub");
if (File.Exists("My.cer")
&& Settings.GetSetting(Settings.Setting.SrProtocol).Equals("https", StringComparison.InvariantCultureIgnoreCase))
connection.AddClientCertificate(X509Certificate.CreateFromCertFile("My.cer"));
connection.Start().Wait();
}
return this._MyHubProxy;
}
}
这里有一些代码比相关的更多,但希望它可能有所帮助!
- “我的应用程序不依赖于IIS,但是一旦我使用IIS临时创建绑定到我的SSL证书的端口,我的应用程序就开始工作了,我能够检查NETSH服务状态,看看IIS是如何做到的。我从那以后删除了IIS绑定并运行了安装说明,但仍然取得了成功。“ 所以你说有人需要IIS首先设置ssl证书然后ssl在Owin中使用自托管工作吗?那将是愚蠢的,因为Owin应该与任何网络服务器脱钩......你会在5个月后将你的答案标记为解决方案,现在有更多的经验吗? - Pascal 2014年 1月26日13:38
- 是的,我不是建议IIS成为这个过程的一部分,它只是我试图找到它的底部。此外,我计划在我的下一个版本中回到SSL,并且很乐意在我审核时将其标记为解决方案,请耐心等待;)谢谢! - ISZ 2014年 2月6日
SignalR具有自签名SSL和自主机的更多相关文章
- https 自签名SSL证书
介绍 TLS或称传输层安全性,及其前身SSL(代表安全套接字层)是用于将正常流量包装在受保护的加密包装中的Web协议. 使用这种技术,服务器可以在服务器和客户端之间安全地发送流量,而不会被外部各方拦截 ...
- Android HTTPS如何10分钟实现自签名SSL证书
前言 去年公司内一个应用加了支付宝支付功能,为了保证安全,支付请求链接写成了https. 由于公司服务器使用的是的自签名证书,而在Android系统中自己签署的不能通过验证的,所以会抛出错误. 于是我 ...
- ASP.NET Web API编程——使用自签名SSL证书
1自签名SSL证书的创建 创建自签名SSL工具xca为:https://sourceforge.net/projects/xca/ 创建过程 1)创建根证书 打开软件,界面如下. 点击,看到下拉菜单, ...
- tomcat 配置自签名ssl证书
背景:据说17年苹果app必须走https协议与后台交互了,网上各种搜索最后还是发现有2篇写的比较全面,折腾后总结出2种实现方式.在这里记录,方便有共同需求的同学们参考 本文只介绍生成自签名ssl证书 ...
- 【倒腾HTTPS】Nginx for Docker自签名SSL证书
前言 合格的web程序员, 必须能自由在 IIS. Nginx. Nginx for Docker上配置Https服务, 博客最近将专题记录 Https & Hsts 如何申请适用于生产 ...
- openssl 自己制作ssl证书:自己签发免费ssl证书,为nginx生成自签名ssl证书
server { listen 80; listen 443 ssl; server_name ~^((cloud)|(demo-cloud)|(demo2-cloud)|(approval1))(( ...
- 使用自签名SSL证书配置HTTPS,解决浏览器提示不安全警告
项目测试过程中需要将应用从HTTP升级到HTTPS,浏览了网上一些帖子,参考<WebLogic11g-单双向SSL配置(以Springside3为例)>一文使用openssl工具来自建CA ...
- Linux中快捷生成自签名ssl证书_113资讯网
一.生成CA私钥 mkdir ca cd ca #创建私钥 (建议设置密码) openssl genrsa -des3 -out myCA.key 2048 生成CA证书 # 20 年有效期 open ...
- 自签名SSL生成
本教程以AppServ生成自签名证书为例,同时配置OpenSSL环境1.生成自签名证书,控制台程序进入Apache目录下的bin目录 >openssl req -config ../conf/o ...
随机推荐
- qt 视频播放器错误解决方法
DirectShowPlayerService::doRender: Unresolved error code 0x80040266 () 当你发布的qmlproject包含QtMultimedia ...
- Windows系统CMD下常用命令
命令 功能ASSOC 显示或修改文件扩展名关联.ATTRIB 显示或更改文件属性.BREAK 设置或清除扩展式 CTRL+C 检查.BCDEDIT 设置启动数据库中的属性 ...
- 复选框checkbox——用背景图片替换样式
input { border : none; display : inline-block; width : 25px; height : 25px; -webkit-apearance : none ...
- 06--STL序列容器(priority_queue)
一:优先队列priority_queue简介 同队列,不支持迭代 (一)和队列相比 同: 优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素. 异: 但是它有一个特性,就是队列中最大的元素总是 ...
- JS中如何获取JSON有多少个字段,JSON子项的个数或叫length
如有JSON数据格式如下: {names:'张三','age':16,'sex':‘男’} 或 {names:'张三','age':16,'sex':‘男’} 如何获取JSON子键的数量?挺头疼的.使 ...
- 使用原生 python 造轮子搭建博客
这篇用来 记录一个 从零开始的 博客搭建,希望坚持下去,因为python 开发效率令人发指,所以会原生从零写 ORM ,Web 框架 前提是打好 异步 io 的基础, 使用异步,有一点要谨记,一旦开始 ...
- ASP.NET MVC深入浅出系列
一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模式,ViewState功不可没,通过的控件的拖拽和绑 ...
- Excel表格中依据某一列的值,将这列中一样的数据放在一个文件中。
一需求:按照标题C的内容,一样的数据整理到一个文件中. 二.操作: 1.atl+F11弹出vb窗口 2.点击 插入===>模块 ,复制以下代码,注意这是一个表头为三行的函数(保存 ...
- 自制stm32板子无法烧录程序的问题
自己画的stm32板子一开始出现了无法烧录程序的情况,主要表现为在点击load图标后出现了Stlink connect error!Target dll has been concelled的窗口.在 ...
- js手写'Promise'
/* * pending:初始化成功 * fulfilled:成功 * rejected:失败 * */ function Promise(executor) {// 执行器 this.status ...
