如何解决Golang + C#中TLS的配置问题
我正在开发一个视频游戏,但我对客户端和服务器之间的安全通信主题非常迷茫。如果有人能给我一条电缆,我将不胜感激。
我的项目基于通过 TCP 套接字进行通信的客户端 (c # - Unity) + 服务器 (Go)。现在我正在使用 TLS 1.2 添加安全性,尽管遵循了几篇文章和帖子,我得到了一个显然有效的解决方案,但我认为我并没有真正获得安全通信,因为尽管我将客户端的数字证书更改为完全不同的数字证书并且与键无关,一切都一样,这让我觉得我没有正确配置
关于 RSA 密钥的使用,我使用以下方案:
//// Client C# ////
byte[] certBytes = Convert.FromBase64String("AS9ggSEPw5yp7+IH5S9ingq+.........."); //Cert .pem
X509Certificate2 cert = new X509Certificate2(certBytes);
X509CertificateCollection certCollection = new X509CertificateCollection(new X509Certificate[] { cert });
tcpClient = new TcpClient(serverAddress,serverPort);
sslStreamSerma = new SslStream(tcpClient.GetStream(),false,ValidateCertificate);
sslStreamSerma.AuthenticateAsClient(sermaName,certCollection,SslProtocols.Tls12,false);
java -Xmx1024M -xms1024M -jar minecraft.jar
我对此很困惑......我不明白这里发生了什么,所以无论客户端使用什么数字证书,通信都会继续工作......我应该创建两对密钥,一个用于客户端和服务器之一?证书应该用公钥生成吗?
如果有人可以帮助我,我将不胜感激......
解决方法
问题是您的客户端证书没有执行客户端身份验证所需的关联私钥。
byte[] certBytes = Convert.FromBase64String("AS9ggSEPw5yp7+IH5S9ingq+.........."); //Cert .pem
X509Certificate2 cert = new X509Certificate2(certBytes);
此代码部分仅读取证书的公共部分,而不是私钥。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。