x509certificate2 - 使用 .netstandard 2.0 库创建证书请求
问题描述
NetStandard 2.0 显然不包括“System.Security.Cryptography.X509Certificates.CertificateRequest”。
那么是不是不可能在 .NETStandard 2.0 库中创建 X509Certificates ?如果不是,为什么不呢?X509Certificates 包括在内,所以这似乎是一个奇怪的排除。
解决方案
.NET Standard 2.0 是在 .NET Framework 4.6.1 和 4.6.2 之间构建的,并且没有 .NET Framework 4.6.2 中不存在的类型。
CertificateRequest
在 4.7.2 中添加到 .NET Framework。
最简单的答案是针对 .NET Framework 或 .NET Core 而不是 .NET Standard,然后该类型将可用(前提是您使用足够高的版本)。或者,除非您使用 custom ,否则X509SignatureGenerator
该类型足够简单,您可以将其与反射绑定。
Type certificateRequestType =
Type.GetType("System.Security.Cryptography.X509Certificates.CertificateRequest");
object request = certificateRequestType.GetConstructor(
new[] { typeof(string), typeof(RSA), typeof(HashAlgorithmName), typeof(RSASignaturePadding) }).Invoke(
new object[] { certDN, key, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1 });
Collection<X509Extension> extensions = (Collection<X509Extension>)
certificateRequestType.GetProperty("CertificateExtensions").GetValue(request);
// add things to the extensions collection
...
DateTimeOffset now = DateTimeOffset.UtcNow;
return (X509Certificate2)certificateRequestType.GetMethod("CreateSelfSigned").Invoke(
new object[] { now.AddMinutes(-5), now.AddDays(30) });
推荐阅读
- c++ - 指定类模板参数的要求
- c - 将空数组传递给函数 - 不起作用
- pointers - 使用指针接收器方法创建包装现有类型的接口
- rust - 为什么在 nightly Rust 1.29 中工作的生成器在 nightly 1.34.0 中会出错?
- javascript - 使用jquery创建html表并追加
- bash - systemd 不启动服务 - 在步骤 USER spawning 失败
- java - 字符串数组
- splunk - 需要对来自不同时区的字段进行计数(具有来自 .csv 上传文件的多个字段)
- macos - Mac OS 终端命令“open”在指定选项时抛出错误 -36
- notepad++ - 如何删除每行符号后面的任何内容但不删除每行前面的文本