我写了一个web api(Asp.net core)并将它部署到了IIS上,然后为它安装了一个自签名的数字证书。现在我需要在unity客户端中获取数字证书并获取里面的公钥,请问我该如何实现。
如果证书是 pfx 格式并且嵌入在程序集的 Resources 中,示例代码如下
var assembly = typeof(CertificateFactory).GetTypeInfo().Assembly;
using var stream = assembly.GetManifestResourceStream(
assembly.GetManifestResourceNames().First(r => r.EndsWith("cnblogs.pfx")));
var bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
var cert = new X509Certificate2(bytes, "******");
Console.WriteLine(cert.PublicKey.GetRSAPublicKey().KeySize);
不,它并不是嵌入在程序集里的而且格式是crt,它被安装在IIS上,前端并不拥有。我模拟的场景是,在前端程序(unity客户端)调用服务器的时候,服务器将返回一个数字证书,然后前端程序获取到这个数字证书的时候验证这个数字证书是否被篡改或掉包,如果没有则获取它的公钥,最后利用公钥来加密对称密钥并返回给服务器,服务器保存这个对称密钥,在以后的数据通信时都使用这个对称密钥来对数据进行加密。现在的问题是,我不知道如何在前端程序中获取这个数字签名。
@暮光肆意:你这是要手动HTTPS握手?
@luzemin: 我并不是很了解,因为我是昨天才开始了解这方面的知识,所以可能在存在一些错误的理解。我查阅到一些资料是这样说的:“当客户端(浏览器)与服务器通信时,服务器会首先返回数字证书给客户端(浏览器),客户端(浏览器)收到数字证书之后将会检验这数字证书是否安全”。而我则是将浏览器改为unity客户端,但是我并不知道如何在unity客户端中对服务器返回的数字证书进行检验并获取里面的公钥,我想要实现这个功能(可能正如你所说,是收到与HTTPS握手吧)
服务器可以装个自动续签免费SSL证书的东西
www.fastnat.club
拿去用不谢,免费域名和证书