В настоящее время создаются центры сертификации и выданные сертификаты.Генерация запроса, регистрация и проверка работоспособны, но когда я проверил хранилище сертификатов, я понял, что он помещает их в личный каталог сертификатов.По памяти, по соображениям безопасности и по юридическим причинам я не могу этого иметь.
Сертификаты хранятся в защищенной удаленной базе данных.Сертификаты могут быть случайным образом доступны или генерироваться на случайной машине из коллекции.Если они генерируют сертификаты, они будут храниться на том компьютере, на котором был создан сертификат.Есть ли способ сгенерировать регистрацию сертификата (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регистрация происходит в этом методе.Требуется полностью скомпонованный и закодированный запрос сертификата.
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;
}
EDIT В настоящее время я ограничен .NET 4.5.x.Еще одна проблема, с которой я сталкиваюсь, заключается в том, что при попытке подписать сертификат с правами root возникает исключение CRYPT_E_NOT_FOUND.