建立TCP连接时出现PlatformNotSupportedException



升级到Visual Studio 2019后,我发现现有的Xamarin应用程序无法再建立TCP连接。

经过一番研究,我发现Visual Studio 2019也附带了MSBuild 16,而VS2017附带了MSBbuild 15。

在我为RSA系统加密生成证书和密钥对后使用这段代码之前:

var cert = new X509Certificate2(DotNetUtilities.ToX509Certificate(bcCert)) 
{ PrivateKey = DotNetUtilities.ToRSA((RsaPrivateCrtKeyParameters)keyPair.Private) };

使用Visual Studio 2019,您无法设置私钥。这可以在反编译的X509Certificate2.cs中看到C:ProgramFiles(x86)MicrosoftVisualStudio2019ProfessionalCommon7IDEReferenceAssembliesMicrosoftFrameworkMonoAndroidv1.0System.dll

在这个repo之后,我发现了一个ConvertBouncyCert方法,它将在我生成的X509Certificate周围返回一个X509Certificate2包装器,该包装器将附加私钥,但我仍然得到了unable to decode异常。

Jeremy的库包含将X509Certificate转换为X509Certification2:的代码

var pkcs12Store = new Pkcs12Store();
var certEntry = new X509CertificateEntry(BouncyCert);
pkcs12Store.SetCertificateEntry(BouncyCert.SerialNumber.ToString(), certEntry);
pkcs12Store.SetKeyEntry(BouncyCert.SerialNumber.ToString(),
new AsymmetricKeyEntry(KeyPair.Private), new[] { certEntry });
X509Certificate2 keyedCert;
using (MemoryStream pfxStream = new MemoryStream()) {
pkcs12Store.Save(pfxStream, null, new SecureRandom());
pfxStream.Seek(0, SeekOrigin.Begin);
keyedCert = new X509Certificate2(pfxStream.ToArray(), "", X509KeyStorageFlags.Exportable);
}
return keyedCert;

您需要创建一个Pkcs12StoreBuilder对象,并将DER编码设置为true。

var pkcs12StoreBuilder = new Pkcs12StoreBuilder();
pkcs12StoreBuilder.SetUseDerEncoding(true);
var pkcs12Store = pkcs12StoreBuilder.Build();
var certificateEntry = new X509CertificateEntry(bouncyCert);

本文很好地解释了DER以及密码学和RSA系统中围绕它的所有组件。

相关内容

  • 没有找到相关文章

最新更新