При загрузке из хранилища сертификатов закрытый ключ не загружается - PullRequest
0 голосов
/ 27 июня 2019

Аутентификация в RavenDB 4 должна осуществляться с помощью сертификатов, которые я создал с помощью Let's Encrypt. Мой сертификат закрытого ключа (.pfx) хранится в хранилище ключей Azure. Поскольку только защищенные паролем сертификаты могут быть загружены, я сделал это безопасным с помощью пароля.

При загрузке сертификата с использованием отпечатка сертификата он всегда показывает, что у него нет закрытого ключа, что приводит к сбою процесса аутентификации в моем экземпляре RavenDB. И локально через хранилище сертификатов Windows, и в Azure.

Я уже пытался работать с сертификатом закрытого ключа без пароля, затем я смог получить закрытый ключ. Тем не менее, это не решение, поскольку я не могу загрузить его в Azure.

var certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
certStore.Open(OpenFlags.ReadOnly);
X509Certificate2 targetClientCertificate;
var certCollection = certStore.Certificates.Find(X509FindType.FindByThumbprint, ravenDbSettings["CertificateThumbPrint"], false);
targetClientCertificate = new X509Certificate2(certCollection[0].GetRawCertData(), ravenDbSettings["CertificatePassword"], X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable); ;

Я тоже пробовал через использование экспорта, который я нашел где-то

var targetTwo = new X509Certificate2(certCollection[0].Export(X509ContentType.Pfx, ravenDbSettings["CertificatePassword"]));

Но тогда я получил

Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException: «Ключ недопустим для использования в указанном состоянии»

Моя цель - загрузить закрытый ключ сертификата и таким образом иметь возможность проходить аутентификацию в RavenDB.

Ответы [ 2 ]

1 голос
/ 27 июня 2019

Вы должны использовать существующий сертификат, хранящийся в переменной certCollection.Последняя строка (где вы вводите переменную targetClientCertificate) не нужна и не будет работать, если закрытый ключ не экспортируется.Если для кода требуется существующий экземпляр класса X509Certificate2, он сохраняется в certCollection и будет иметь ссылку на закрытый ключ.

0 голосов
/ 27 июня 2019

Это, вероятно, связано с тем, как вы создаете свой сертификат. Попробуйте это:

Скачать openssl: http://gnuwin32.sourceforge.net/packages/openssl.htm

Создание сертификата и закрытого ключа: openssl req -new -newkey rsa: 1024 -days 365 -nodes -x509 -keyout YourName.key -out YourName.cert

Создание файла pfx: openssl pkcs12 -export -inkey YourName.key -in YourName.cert -out YourName.pfx

Импорт YourName.pfx в магазин

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...