• 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();
    
  • 相关阅读:
    最优比率环 SPFA+二分
    严格次小生成树
    SPFA判断负环BFS+DFS
    poj 1149 PIGS 网络流-最大流 建图理解
    9.20开始的停课日常
    Speed
    [BZOJ4827][Hnoi2017]礼物(FFT)
    中山纪念中学集训日志
    [POJ1151][HDU1542]Atlantis(线段树,扫描线)
    [BZOJ2002][洛谷P3203][Hnoi2010]Bounce 弹飞绵羊(LCT维护链长)
  • 原文地址:https://www.cnblogs.com/chiikin/p/12896512.html
Copyright © 2020-2023  润新知