. NET 6'da sertifika özel anahtar izinleri

0

Soru

Windows Sertifika Deposuna özel anahtarlı bir sertifika almaya çalışıyorum. Sertifikayı aşağıdakileri kullanarak başarıyla içe aktarabilirim

X509Certificate2 certificate = new(certByteArray, certPassword, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet);
X509Store store = new(StoreName.TrustedPeople, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadWrite);
store.Add(certificate);

Ancak sahip olduğum sorun, bir kullanıcının özel anahtara programlı olarak nasıl erişebileceğidir.
Bu bağlantıları yararlı buldum:
https://www.pkisolutions.com/accessing-and-using-certificate-private-keys-in-net-framework-net-core/
CngKey Makine anahtarına izin atama

. NET 5'te Sertifika PrivateKey İzinlerini Ayarlama

Certlm ile kullanıcı arayüzü üzerinden erişim izni verebilirim.msc > Sertifikayı Kişisel depo'ya sürükleyin > > Sertifikaya sağ tıklayın > > > Tüm Görevler > > > > Özel anahtarları yönet > > > > > Kullanıcı ve izni ekle
Ama bunu programlı olarak yapmam gerekiyor

Örneklerin geldiği yer olan. NET Full Framework'ten değişiklikler var. Üzerinde bir günden fazla zaman harcadım, birden fazla sertifika denedim, sertifika kesinlikle dışa aktarılabilir olarak işaretlendi ve yönetici olarak çalışıyor. Yalnızca Windows çözümünden memnunum

Bu var olduğu yer

const string NCRYPT_SECURITY_DESCR_PROPERTY = "Security Descr";
const CngPropertyOptions DACL_SECURITY_INFORMATION = (CngPropertyOptions)4;

X509Store trustedPeopleStore = new(StoreName.TrustedPeople, StoreLocation.LocalMachine);
trustedPeopleStore.Open(OpenFlags.ReadWrite);

var certificates = trustedPeopleStore.Certificates.Find(X509FindType.FindByThumbprint, "xxxxxxxxxxxxxxxxxxxxxx", false);

RSA rsa = certificates[0].GetRSAPrivateKey();
RSACng rsaCng = rsa as RSACng;

CngProperty prop = rsaCng.Key.GetProperty(NCRYPT_SECURITY_DESCR_PROPERTY, DACL_SECURITY_INFORMATION);

Rsacng'yi görebiliyorum.Anahtar hata ayıklamada bulunur, ancak bir sonraki satırda başarısız olur (kesinlikle dışa aktarılabilir) Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException: 'Key not valid for use in specified state.' Ayrıca, acl'yi doğrudan dosyada ayarlamayı denememeniz gerektiğine dair yorumları okudum, ancak bunun doğru olup olmadığından emin değilim

.net acl c# cng
2021-11-24 00:59:41
1

En iyi cevabı

0

Program aracılığıyla erişim sağlayan bazı örnek kodlar için bu kod projesi gönderisine bakın (özellikle "AddAccessToCertificate" yöntemine bakın).

Daha fazla bilgi için bunu kontrol edin: Kişisel depoya programlı olarak sertifika ekleme

2021-12-02 16:48:54

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................