gpt4 book ai didi

c# - 注册 X509Certificate2 而不会在机器上留下任何痕迹

转载 作者:行者123 更新时间:2023-11-30 17:30:02 27 4
gpt4 key购买 nike

当前正在创建证书颁发机构和颁发的证书。请求的生成、注册和验证都可以正常运行,但是当我检查我的证书存储时,我意识到,它是将它们放在我的个人证书目录中。出于内存、安全和法律原因,我不能这样做。

证书存储在安全的远程数据库中。证书可以随机访问或在随机机器上从集合中生成。如果他们生成证书,它将把它们存储在创建证书的任何机器上。有没有一种方法可以生成证书注册 (CX509Enrollment),之后不会在机器上留下任何证书痕迹?

控制入学的部分相对较小且直接。它只能以管理员身份运行。我认为这是因为它正在向商店添加证书。

我目前正在运行一个单独的项目文件来尝试调试这个问题。我的两个证书都已构建并保存在内存中。

static void Main(string[] args)
{
X509Certificate2 rootCert = CreateSelfSignedCertificate("testRoot");
X509Certificate2 signedChild = CreateSignedCertificate("testyMcTesterson", rootCert);

X509Chain chain = new X509Chain();
chain.ChainPolicy = new X509ChainPolicy()
{
RevocationMode = X509RevocationMode.NoCheck,
VerificationFlags = X509VerificationFlags.AllFlags,
UrlRetrievalTimeout = new TimeSpan(0, 1, 0)
};
chain.ChainPolicy.ExtraStore.Add(rootCert);
bool isValid = chain.Build(signedChild); //Is True :D
}

证书最终在我的个人证书库中

My current certificate store

我的注册是通过这种方法进行的。它需要一个完全构造和编码的证书请求。

public static CX509Enrollment EnrollCertificateRequest(CX509CertificateRequestCertificate certRequest)
{
var enroll = new CX509Enrollment();
enroll.InitializeFromRequest(certRequest);
string csr = enroll.CreateRequest();
enroll.InstallResponse(InstallResponseRestrictionFlags.AllowUntrustedCertificate,
csr, EncodingType.XCN_CRYPT_STRING_BASE64, "");

return enroll;
}

编辑我目前仅限于 .NET 4.5.x。我遇到的另一个问题是,尝试使用根证书签署证书会引发 CRYPT_E_NOT_FOUND 异常。

最佳答案

CX509Enroll 可能没有办法做到这一点。但是您可以使用 .NET Framework 4.7.2 和 CertificateRequest 来实现您的目标。类。

using (RSA rsa = RSA.Create(2048))
{
CertificateRequest request = new CertificateRequest(
"CN=Your Name Here",
rsa,
HashAlgorithmName.SHA256,
RSASignaturePadding.Pkcs1);

SubjectAlternativeNameBuilder builder = new SubjectAlternativeNameBuilder();
builder.AddDnsName("your.name.here");
builder.AddDnsName("your.other.name.here");

request.CertificateExtensions.Add(builder.Build());

// Any other extensions you're supposed to request, like not being a CA.
request.CertificateExtensions.Add(
new X509BasicConstraintsExtension(false, false, 0, false));

// TLS Server?
request.CertificateExtensions.Add(
new X509EnhancedKeyUsageExtension(
new OidCollection
{
new Oid("1.3.6.1.5.5.7.3.1")
},
false));

byte[] derEncodedRequest = request.CreateSigningRequest();

X509Certificate2 responseWithPrivateKey;

using (X509Certificate2 response = SendRequestToServerAndGetResponse(derEncodedRequest))
{
responseWithPrivateKey = response.CopyWithPrivateKey(rsa);
}

// Use it, save it to a PFX, whatever.
// At this point, nothing has touched the hard drive.
}

关于c# - 注册 X509Certificate2 而不会在机器上留下任何痕迹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50474749/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com