Я пытаюсь держаться подальше от CERTENROLLLib, я пытался использовать ванильный .NET8 CertificateRequest для генерации CSR, получения обратно сертификата и повторной интеграции закрытого ключа. в сертификат перед сохранением его обратно в X509Store Windows внутри StoreName.My.
Код, который у меня есть, при его отладке показывает, что закрытый ключ возвращается в сертификат, но после его сохранения я не могу экспортировать сертификат с его закрытым ключом... его там практически нет. Есть ли способ заархивировать то, что я описал здесь?
public static readonly X509KeyStorageFlags InstallFlags = X509KeyStorageFlags.Exportable |
X509KeyStorageFlags.PersistKeySet |
X509KeyStorageFlags.UserKeySet;
byte[] rawData = Convert.FromBase64String(x509Base64);
using (var tmp = new X509Certificate2(rawData, "", InstallFlags))
{
string pubKey = Convert.ToBase64String(tmp.PublicKey.EncodedKeyValue.RawData);
SomeTempCryptoDictionary.TryGetValue(pubKey, out var crypto);
using (var certWithPrivateKey = tmp.CopyWithPrivateKey((RSA) crypto))
using (var store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
{
store.Open(OpenFlags.ReadWrite);
store.Add(certWithPrivateKey);
store.Close();
certWithPrivateKey.Reset();
}
}
Я не уверен, разрешено ли мне вводить туда пустой пароль, но он не жаловался и не выдавал никаких ошибок, я определенно не могу передать ноль. Такое ощущение, что я ДЕЙСТВИТЕЛЬНО близок к тому, чтобы заставить его работать без CERTENROLLLib, просто не знаю, чего еще мне не хватает...?
Это та часть, где был сгенерирован CSR используя CertificateRequest.
RSA rsa = RSA.Create(2048);
X500DistinguishedName dn = new X500DistinguishedName("CN=HelloWorld");
CertificateRequest csr = new CertificateRequest(dn, rsa,
HashAlgorithmName.SHA256,
RSASignaturePadding.Pkcs1);
string pubKey = Convert.ToBase64String(csr.PublicKey.EncodedKeyValue.RawData);
// saved to be use when it comes back
SomeTempCryptoDictionary.Add(pubKey, rsa);
return Convert.ToBase64String(csr.CreateSigningRequest());
Изменить: по предложению @bartonjs, результат тот же, даже при попытке экспорта/импорта как Pkcs12
using (var certWithPrivateKey = tmp.CopyWithPrivateKey((RSA) crypto))
using (var certExportable = new X509Certificate2(certWithPrivateKey.Export(X509ContentType.Pkcs12)))
using (var store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
Подробнее здесь: https://stackoverflow.com/questions/782 ... -x509store
Невозможно сохранить X509Certificate2 с его закрытым ключом в X509Store. ⇐ C#
Место общения программистов C#
1731754991
Anonymous
Я пытаюсь держаться подальше от CERTENROLLLib, я пытался использовать ванильный .NET8 CertificateRequest для генерации CSR, получения обратно сертификата и повторной интеграции закрытого ключа. в сертификат перед сохранением его обратно в X509Store Windows внутри StoreName.My.
Код, который у меня есть, при его отладке показывает, что закрытый ключ возвращается в сертификат, но после его сохранения я не могу экспортировать сертификат с его закрытым ключом... его там практически нет. Есть ли способ заархивировать то, что я описал здесь?
public static readonly X509KeyStorageFlags InstallFlags = X509KeyStorageFlags.Exportable |
X509KeyStorageFlags.PersistKeySet |
X509KeyStorageFlags.UserKeySet;
byte[] rawData = Convert.FromBase64String(x509Base64);
using (var tmp = new X509Certificate2(rawData, "", InstallFlags))
{
string pubKey = Convert.ToBase64String(tmp.PublicKey.EncodedKeyValue.RawData);
SomeTempCryptoDictionary.TryGetValue(pubKey, out var crypto);
using (var certWithPrivateKey = tmp.CopyWithPrivateKey((RSA) crypto))
using (var store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
{
store.Open(OpenFlags.ReadWrite);
store.Add(certWithPrivateKey);
store.Close();
certWithPrivateKey.Reset();
}
}
Я не уверен, разрешено ли мне вводить туда пустой пароль, но он не жаловался и не выдавал никаких ошибок, я определенно не могу передать ноль. Такое ощущение, что я ДЕЙСТВИТЕЛЬНО близок к тому, чтобы заставить его работать без CERTENROLLLib, просто не знаю, чего еще мне не хватает...?
Это та часть, где был сгенерирован CSR используя CertificateRequest.
RSA rsa = RSA.Create(2048);
X500DistinguishedName dn = new X500DistinguishedName("CN=HelloWorld");
CertificateRequest csr = new CertificateRequest(dn, rsa,
HashAlgorithmName.SHA256,
RSASignaturePadding.Pkcs1);
string pubKey = Convert.ToBase64String(csr.PublicKey.EncodedKeyValue.RawData);
// saved to be use when it comes back
SomeTempCryptoDictionary.Add(pubKey, rsa);
return Convert.ToBase64String(csr.CreateSigningRequest());
Изменить: по предложению @bartonjs, результат тот же, даже при попытке экспорта/импорта как Pkcs12
using (var certWithPrivateKey = tmp.CopyWithPrivateKey((RSA) crypto))
using (var certExportable = new X509Certificate2(certWithPrivateKey.Export(X509ContentType.Pkcs12)))
using (var store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
Подробнее здесь: [url]https://stackoverflow.com/questions/78271143/unable-to-save-x509certificate2-with-its-private-key-in-x509store[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия