zoukankan      html  css  js  c++  java
  • signalr core客户端通过ssl连接服务的方式

    signalr core客户端通过ssl连接服务的方式

    生成自签证的证书

    下载地址: https://slproweb.com/products/Win32OpenSSL.html

    下载安装windows版本并安装

    安装好后进入安装目录,找到start.bat双击执行打开cmd命令行,打开的命令窗口设置好了环境变量,可以使用OpenSSL命令。

    执行以下命令生成证书

    > openssl
    > req -newkey rsa:2048 -nodes -keyout certificate.key -x509 -days 365 -out certificate.cer
    

    根据命令提示行输入信息后在当前目录下生成certificate.keycertificate.cer。因此建议执行OpenSSL命令前使用cd命令移动到合适的文件夹
    如:

    > d:
    > cd d:	emp
    

    生成pfx文件

    pkcs12 -export -in certificate.cer -inkey certificate.key -out certificate.pfx
    

    根据提示输入密码即可。

    修改signalr服务的配置

    修改appsetting.json

    {
     "Kestrel": {
        "Endpoints": {
          //"Http": {
          //  "Url": "http://*:5110"
          //},
          "Https": {
            "Url": "https://*:5111",
            "Certificate": {
              "Path": "socialnetwork.pfx",
              "Password": "Qwer123@BN"
            }
          }
        },
      }
    }
    

    注意以上配置针对Kestrel服务器。如果使用iis承载服务则为iis配置证书。

    客户端配置

    客户端项目的根目录自签证的证书certificate.cer,并设置该文件的属性"复制到输出目录"的值为"始终复制"

    客户端连接服务器时判断服务器发送的证书是否配对。此代码在客户端可信的情况下可有保证证书没有被中间人篡改。

        var connection = new HubConnectionBuilder()
                    .WithUrl("https://localhost:5001/chathbu", options=> {
                        var fileInfo = new FileInfo("certificate.cer");
                        X509Certificate2 x509Certificate = new X509Certificate2(fileInfo.FullName);
                        //针对https连接的ssl证书验证,此配置必须
                        options.HttpMessageHandlerFactory = (msgHandler) =>
                        {
                            if (msgHandler is HttpClientHandler httpClientHandler)
                            {
                                httpClientHandler.ServerCertificateCustomValidationCallback += (sender, certificate, chain, sslPolicyErrors) =>
                                {
                                    return x509Certificate.Equals(certificate);//判断服务器的公开证书是否和客户端自带的证书相同
                                };
                            }
                            return msgHandler;
                        };
                        //针对websocket连接的ssl证书验证,使用websocket连接时必须配置
                        options.WebSocketConfiguration = (websocketOption) => {
                            websocketOption.RemoteCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => { 
                                return x509Certificate.Equals(certificate);//判断服务器的公开证书是否和客户端自带的证书相同
                                };
                        };
                    })
                    .Build();
    
  • 相关阅读:
    WordPress让文本小工具支持简码
    修改WordPress后台登录地址,提高安全性
    WordPress用键盘左右方向键来查看上一篇和下一篇文章
    Git 补丁操作
    Git 标签操作
    Git 修正错误
    Git 删除操作
    Git 重命名操作
    Git 移动操作
    Git 藏匿操作
  • 原文地址:https://www.cnblogs.com/chiikin/p/12896512.html
Copyright © 2011-2022 走看看