目前正在创建证书颁发机构和颁发的证书。请求的生成、注册和验证都是功能性的,但是当我检查我的证书存储时,我意识到这是将它们放在我的个人证书目录中。出于记忆、安全和法律原因,我不能这样做。
证书存储在安全的远程数据库中。可以从集合中的随机机器上随机访问或生成证书。如果它们生成证书,它会将它们存储在创建证书的任何机器上。有没有办法生成证书注册(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
}
证书最终在我的个人证书存储中
我的注册发生在这种方法中。它需要一个完全构建和编码的证书请求。
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。我遇到的另一个问题是,尝试使用 root 签署证书会引发 CRYPT_E_NOT_FOUND 异常。
相关分类