2401_83604760 2025-06-16 20:57 采纳率: 0%
浏览 19

一个json数据推送前SSL身份验证的问题,能解决者300元酬谢!

一个json数据推送前SSL身份验证的问题,能帮忙解决者300元酬谢!

A客户端,我自己的,windows2022系统,IIS服务器,已做过ssl认证,访问网址 https://www.xox.com/
B服务器,目标服务器,由A推送json数据给B,操作系统未知。API访问地址 https://api.xox.com

请求B服务器的身份验证不是常用的token方式,操作如下:

1、A上执行:openssl genrsa -aes256 -out a.pem 2048 ,生成a.pem 文件;
2、A上执行:openssl req -new -sha256 -key a.pem -out a.csr ,生成a.csr 文件;
3、将a.csr文件用邮件发给B方开发人员,B方邮件返回 b.pem 文件,用记事本打开b.pem,里面是两串密钥;
4、A上执行:openssl pkcs12 -export -out a.p12 -inkey a.pem -in b.pem ,生成a.p12文件;
5、将a.p12文件导入windows证书,显示如下图:

img

6、生成的a.p12证书如果导入a的postman则可以向b服务器正常推送数据,说明证书本身没问题,windows无法验证的原因是“证书链不全”,缺少中间证书或根证书;

如果哪位大拿有意提供协助,请与我联系,我将进一步提供所需详细信息,电话:18612676826 邮箱 uhoo@qq.com

  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2025-06-16 21:01
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    解决方案

    根据你的问题,客户端需要在推送 JSON 数据前进行 SSL 身份验证。考虑到你已经在 IIS 服务器上配置了 SSL 认证,下面是一些可能的解决方案:

    1. 使用 System.Net.Security.SslStream 类在客户端进行 SSL 身份验证。可以使用以下代码:
    using System.Net.Security;
    using System.IO;
    using System.Net;
    
    // 创建 SSL 流
    SslStream sslStream = new SslStream(new NetworkStream(new TcpClient("www.xox.com", 443).GetStream()));
    
    // 发送客户端证书
    sslStream.AuthenticateAsClient("www.xox.com");
    
    // 使用 SSL 流发送 JSON 数据
    using (StreamWriter writer = new StreamWriter(sslStream))
    {
        writer.WriteLine(jsonData);
    }
    
    1. 使用 System.Security.Cryptography.X509Certificates 类在客户端加载证书,并使用 SslStream 类进行 SSL 身份验证。可以使用以下代码:
    using System.Security.Cryptography.X509Certificates;
    using System.Net.Security;
    using System.IO;
    using System.Net;
    
    // 加载客户端证书
    X509Certificate2 clientCert = new X509Certificate2("path/to/client.crt", "client password");
    
    // 创建 SSL 流
    SslStream sslStream = new SslStream(new NetworkStream(new TcpClient("www.xox.com", 443).GetStream()));
    
    // 发送客户端证书
    sslStream.AuthenticateAsClient("www.xox.com", clientCert, clientCert.GetCertHash(), 0);
    
    // 使用 SSL 流发送 JSON 数据
    using (StreamWriter writer = new StreamWriter(sslStream))
    {
        writer.WriteLine(jsonData);
    }
    
    1. 使用 System.Net.Http NuGet 包中的 HttpClient 类,使用 HttpClientHandler 类进行 SSL 身份验证。可以使用以下代码:
    using System.Net.Http;
    using System.Net.Http.Headers;
    
    // 创建 HttpClientHandler
    HttpClientHandler handler = new HttpClientHandler();
    handler.ClientCertificateOptions = ClientCertificateOption.Automatic;
    handler.ClientCertificates.Add(new X509Certificate2("path/to/client.crt", "client password"));
    
    // 创建 HttpClient
    HttpClient client = new HttpClient(handler);
    
    // 发送 JSON 数据
    HttpResponseMessage response = await client.PostAsync("https://www.xox.com", new StringContent(jsonData, Encoding.UTF8, "application/json"));
    

    这些解决方案都可以帮助你在推送 JSON 数据前进行 SSL 身份验证。如果你需要更多帮助或有其他问题,请随时问我。

    评论

报告相同问题?

问题事件

  • 创建了问题 6月16日