【发布时间】:2016-04-02 20:47:09
【问题描述】:
我正在使用这个little class,它返回一个字节数组中的 pfx 文件。
服务器端:
byte[] serverCertificatebyte;
var date = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day);
serverCertificatebyte = Certificate.CreateSelfSignCertificatePfx("CN=RustBuster" + RandomString(5),
date,
date.AddDays(7));
然后我将它发送给客户端(长度:1654):
tcpClient.GetStream().Write(serverCertificatebyte , 0, serverCertificatebyte .Length);
一旦客户阅读了它,我想将它转换为证书类: (这里长度也是1654)
我尝试做一个新的 X509Certificate2(data);我在下面得到错误。这适用于服务器端。怎么了?
我也试过 new X509Certificate2(data, string.Empty);并得到同样的错误
错误 System.Security.Cryptography.CryptographicException:无法解码证书。 ---> System.Security.Cryptography.CryptographicException:输入数据无法编码为有效证书。 ---> System.ArgumentOutOfRangeException: 不能为负数。
参数名称:长度
在 System.String.Substring (Int32 startIndex, Int32 长度) [0x00000] in :0
在 Mono.Security.X509.X509Certificate.PEM(System.String 类型,System.Byte[] 数据)[0x00000] in :0
在 Mono.Security.X509.X509Certificate..ctor (System.Byte[] data) [0x00000] in :0
【问题讨论】:
-
您正在使用 Mono。它不是黑盒,所以尝试介入。我记得 X509Certificate2 类中有一个错误。不完全确定它是什么,但我认为它与从文件读取 pfx 与从字节 [] 读取有关。尝试将字节保存到文件中,然后使用
new X509Certificate2(filepath, String.Empty)或new X509Certificate2(filepath, null)。 -
等等。你是说我应该把字节变成一个文件然后读取它吗?
-
是的。将 byte[] 写入文件,然后在 X509Certificate2 中使用该文件。
-
好的。我希望这行得通。很快就会告诉结果。文件名应该是什么? .pfx?
-
X509Certificate2 类文件的扩展名无关紧要。但通常扩展名是 .p12 或 .pfx。
标签: c# ssl x509certificate2