亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用使用 Microsoft 增強型 RSA 和 AES 加密提供程序的

如何使用使用 Microsoft 增強型 RSA 和 AES 加密提供程序的

C#
MMMHUHU 2022-10-23 13:44:31
我正在使用 dotnet core 構建一個證書,如下所示:    private X509Certificate2 buildSelfSignedServerCertificate(string CertificateName,string password,string dns)    {        SubjectAlternativeNameBuilder sanBuilder = new SubjectAlternativeNameBuilder();        sanBuilder.AddIpAddress(IPAddress.Loopback);        sanBuilder.AddIpAddress(IPAddress.IPv6Loopback);        if (!string.IsNullOrEmpty(dns))        {            sanBuilder.AddDnsName(dns);        }      //       //  sanBuilder.AddDnsName(Environment.MachineName);        X500DistinguishedName distinguishedName = new X500DistinguishedName($"CN={CertificateName}");        using (RSA rsa = RSA.Create(2048*2))        {            var request = new CertificateRequest(distinguishedName, rsa, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);            //request.CertificateExtensions.Add(            //    new X509KeyUsageExtension(X509KeyUsageFlags.DataEncipherment | X509KeyUsageFlags.KeyEncipherment | X509KeyUsageFlags.DigitalSignature, false));            //request.CertificateExtensions.Add(            //   new X509EnhancedKeyUsageExtension(            //       new OidCollection { new Oid("1.3.6.1.5.5.7.3.1"), new Oid("1.3.6.1.5.5.7.3.2") }, false));            request.CertificateExtensions.Add(sanBuilder.Build());            var certificate = request.CreateSelfSigned(new DateTimeOffset(DateTime.UtcNow.AddDays(-1)), new DateTimeOffset(DateTime.UtcNow.AddDays(3650)));             bool isWindows = System.Runtime.InteropServices.RuntimeInformation                           .IsOSPlatform(OSPlatform.Windows);        }    }并且它不適用于服務結構,并且從我讀到的以下評論中:如果輸出包含如下內容: Provider = Microsoft Software Key Storage Provider 那么這確實是 CNG 證書(由 Key Storage Provider 頒發)。我認為證書是使用 New-SelfSignedCertificate PowerShell cmdlet 創建的,除非另有說明,否則它將使用 CNG 提供程序。如果是這種情況,并且您可以創建另一個用于此集群的證書,您可以嘗試以下操作:證書輸出看起來像這樣,確實提供者是錯誤的。有沒有辦法修復我上面的 c# 方法來解決這個問題?使用“Microsoft 增強型 RSA 和 AES 加密提供程序”
查看完整描述

2 回答

?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

答案取決于您要對證書做什么。


PersistKeySet 行為

如果您想將其添加到X509Store它將“永遠”保持的位置(因此您將其作為帶有PersistKeySet標志的 PFX 導入),那么自我發現的解決方案是正確的:


using (RSA rsa = new RSACryptoServiceProvider(4096, new CspParameters(24, "Microsoft Enhanced RSA and AES Cryptographic Provider", Guid.NewGuid().ToString())))

{

     CertificateRequest req = ...;

     return req.CreateSelfSigned(...);

}

最重要的是,密鑰被賦予了名稱 ( Guid.NewGuid().ToString()),使其成為持久密鑰。這允許對cert.CopyWithPrivateKey埋在里面的調用CreateSelfSigned附加到磁盤上的鍵上。


EphemeralKeySet 行為,具有受控的 PFX 導出

如果您對該方法的唯一調用是將其導出到 PFX,那么您希望做的事情略有不同。


using (RSACryptoServiceProvider rsa = <same as above>)

{

    // Delete this key on Dispose / finalization.

    rsa.PersistKeyInCsp = false;


    CertificateRequest req = ...;


    using (X509Certificate2 cert = req.CreateSelfSigned(...))

    {

        // At this line the persisted key still exists so it reports its name and CSP/KSP into the PFX.

        return cert.Export(X509ContentType.Pkcs12, password);

    }

}

再次,密鑰被命名,使 CSP 和名稱保留在 PFX/PKCS12 中。但是該對象被標記為自刪除,因此它會自行清理。


如果您當時返回證書而不是導出,則證書將不再能夠使用其私鑰,并且以后的 PFX 導出將失敗。


“PerphemeralKeySet”行為證書

如果您想暫時使用證書,并控制 PFX 導出,并且密鑰不會永遠存在...結合前兩件事。


using (RSACryptoServiceProvider rsa = ...)

{

    rsa.PersistKeyInCsp = false;


    CertificateRequest req = ...;


    using (X509Certificate2 cert = req.CreateSelfSigned(...))

    {

        // Export the PFX using the current key.  Re-import it with no flags to

        // make it a normal "perphemeral" key behavior.

        return new X509Certificate2(cert.Export(X509ContentType.Pkcs12), "", X509KeyStorageFlags.Exportable);

    }

}

此處的 PFX 導入,因為它發生在原始密鑰被釋放/刪除之前,它會移動到基于 GUID 的新密鑰名稱。如果您關心使用相同的名稱,請byte[]在讓 Dispose 調用密鑰對象之前導出到 a,然后重新導入,并且將使用相同的密鑰名稱(在所有當前版本的 Windows 上)......但現在刪除語義與證書的生命周期而不是 RSA 對象的生命周期相關聯。


查看完整回答
反對 回復 2022-10-23
?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

以下代碼似乎確實有效,并且我確認它可以與 Service Fabric 一起使用。


    private X509Certificate2 buildSelfSignedServerCertificate(string CertificateName,string password,string dns)

    {


        SubjectAlternativeNameBuilder sanBuilder = new SubjectAlternativeNameBuilder();

        sanBuilder.AddIpAddress(IPAddress.Loopback);

        sanBuilder.AddIpAddress(IPAddress.IPv6Loopback);

        if (!string.IsNullOrEmpty(dns))

        {

            sanBuilder.AddDnsName(dns);

        }

      // 

      //  sanBuilder.AddDnsName(Environment.MachineName);


        X500DistinguishedName distinguishedName = new X500DistinguishedName($"CN={CertificateName}");


        using (RSA rsa = new RSACryptoServiceProvider(2048 * 2, new CspParameters(24, "Microsoft Enhanced RSA and AES Cryptographic Provider", Guid.NewGuid().ToString())))

        {


            var request = new CertificateRequest(distinguishedName, rsa, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);


            //request.CertificateExtensions.Add(

            //    new X509KeyUsageExtension(X509KeyUsageFlags.DataEncipherment | X509KeyUsageFlags.KeyEncipherment | X509KeyUsageFlags.DigitalSignature, false));



            //request.CertificateExtensions.Add(

            //   new X509EnhancedKeyUsageExtension(

            //       new OidCollection { new Oid("1.3.6.1.5.5.7.3.1"), new Oid("1.3.6.1.5.5.7.3.2") }, false));


            request.CertificateExtensions.Add(sanBuilder.Build());


            var certificate = request.CreateSelfSigned(new DateTimeOffset(DateTime.UtcNow.AddDays(-1)), new DateTimeOffset(DateTime.UtcNow.AddDays(3650)));

             bool isWindows = System.Runtime.InteropServices.RuntimeInformation

                           .IsOSPlatform(OSPlatform.Windows);

            if(isWindows)

                certificate.FriendlyName = CertificateName;


            return certificate;

           // return new X509Certificate2(certificate.Export(X509ContentType.Pfx, password), password, X509KeyStorageFlags.MachineKeySet);

        }

    }

生成以下證書


================ Certificate 2 ================

X509 Certificate:

Version: 3

Serial Number: 5f35de2753dd8527

Signature Algorithm:

    Algorithm ObjectId: 1.2.840.113549.1.1.11 sha256RSA

    Algorithm Parameters:

    05 00

Issuer:

    CN=CN=Test

  Name Hash(sha1): 6ef7a8d0891b98b0093b19c9421fdb9e5b344b99

  Name Hash(md5): 252ddd96b0338b433e7d73b2697a63c7


 NotBefore: 3/12/2019 1:49 PM

 NotAfter: 3/10/2029 1:49 PM


Subject:

    CN=CN=Test

  Name Hash(sha1): 6ef7a8d0891b98b0093b19c9421fdb9e5b344b99

  Name Hash(md5): 252ddd96b0338b433e7d73b2697a63c7


Public Key Algorithm:

    Algorithm ObjectId: 1.2.840.113549.1.1.1 RSA (RSA_SIGN)

    Algorithm Parameters:

    05 00

Public Key Length: 4096 bits

Public Key: UnusedBits = 0

    0000  30 82 02 0a 02 82 02 01  00 ad 51 42 bd 46 df d1

    0010  af 96 8e 13 3d 1c 52 34  95 d3 dd be 4f eb 9e ac

    0020  60 54 fb 54 2c 39 c8 43  4d 84 76 60 b7 3a 65 94

    0030  d0 bb 52 7e d6 de 7e 86  c2 cc c7 63 6d 95 1b fb

    0040  2f 94 97 cb 75 2f eb 7f  cc de f8 66 58 3d 59 a5

    0050  50 0c a6 86 d6 84 87 ae  fb 4f 71 30 20 f3 43 be

    0060  78 9e a0 0c 38 e8 63 79  1f 90 e7 28 97 8d 48 9c

    0070  86 c7 66 63 83 61 6a 11  58 f6 70 ed 1f ce 68 e5

    0080  a0 2a 76 66 28 d9 80 77  3f f5 38 47 fa 7b cf 43

    0090  38 8c 46 0e 00 ed 93 30  69 8b c8 22 93 ca eb a1

    00a0  0b 52 20 e1 3b 83 15 3f  4d 3b 10 b1 a6 d7 d4 f5

    00b0  8f 7f 29 53 ad 9c 14 a6  4e 09 71 05 0d da 4d e6

    00c0  d2 52 d4 64 4c 79 9d bf  cb bd 27 cd 72 86 84 77

    00d0  1d 33 6a b8 93 32 11 a7  3d 8a 33 92 54 d4 ae 9b

    00e0  18 15 e1 35 b5 d3 08 cf  63 d1 d7 ab a9 60 2a 59

    00f0  d6 1c e4 3c a0 c8 4c 03  07 75 e0 e2 08 23 02 63

    0100  ce 53 c8 d4 8c e1 58 2a  f4 0a eb 96 3a e1 45 4f

    0110  19 34 89 bc 57 c2 37 be  ee 86 54 b1 ac a4 44 02

    0120  54 66 7d 1a 8c d1 05 45  c5 b8 4b 08 c7 a9 4e 84

    0130  a1 8b dc 1f e9 7f 78 c6  77 f4 7d 69 78 3b 81 e1

    0140  8b 4c 12 0d ad a5 ea 21  e7 3a 26 f6 3c 18 46 e7

    0150  09 f9 35 93 05 84 3b d2  2d e1 d9 2d 40 ee 8b 48

    0160  55 5c f5 6b 0f af 6f ef  13 28 65 5d 13 83 df ed

    0170  97 23 57 31 07 4e 52 1d  93 49 2e 20 90 0b c9 a4

    0180  16 56 b5 74 97 df 6e 16  4a b4 38 c6 25 a2 b8 ad

    0190  2f 73 96 5c 58 01 73 14  af 79 c1 a6 a1 d0 21 ae

    01a0  ff f2 ec a4 61 28 bc c7  f8 0f de fb e0 4c 33 46

    01b0  f4 e2 c5 3f ee a0 c2 f4  cd 78 c0 f1 ce 56 d9 bb

    01c0  78 f0 a7 43 ea d7 01 ab  c1 aa 9f 06 3a 9e ab f9

    01d0  47 ef 1e f1 6f 33 d3 e7  d0 ba 31 1c 92 71 4a 10

    01e0  cc f9 76 c6 75 d0 f4 90  e9 3d 2f d6 49 d9 c2 81

    01f0  42 e2 1e 32 f5 de 97 11  45 42 a1 ef a0 86 aa 69

    0200  a2 8b 7a ea 28 fe 36 ae  61 02 03 01 00 01

Certificate Extensions: 1

    2.5.29.17: Flags = 0, Length = 1a

    Subject Alternative Name

        IP Address=127.0.0.1

        IP Address=0000:0000:0000:0000:0000:0000:0000:0001


Signature Algorithm:

    Algorithm ObjectId: 1.2.840.113549.1.1.11 sha256RSA

    Algorithm Parameters:

    05 00

Signature: UnusedBits=0

    0000  f8 3a 99 42 b4 05 c1 6c  e5 64 fa 07 b0 0f 6d a0

    0010  a4 b3 bf cd 9d cf b1 67  57 67 0c 62 b2 6c 6e 59

    0020  ab eb ca ae fc d3 ff 08  d4 5a 87 11 f2 24 36 8f

    0030  0b 28 50 9a ae 57 ea 6e  0c 75 70 d7 71 b0 b3 2c

    0040  d3 d7 2d cb d1 9d c0 f3  d6 bf 56 c1 6e 4e 20 78

    0050  2e 8c e1 82 4b 54 db c9  a9 c5 ac 6e 29 f7 ec 0f

    0060  df 57 a2 93 80 23 b1 45  ac fb a4 a2 ec a2 b0 eb

    0070  53 ef 81 71 5b 68 c3 dc  97 5f 58 4d d1 e5 1e e7

    0080  e4 5a 30 2a f5 23 8a 44  10 5d 66 62 47 d4 9c b0

    0090  20 98 2b 0d c0 1a 56 94  5c 57 97 53 a8 fb ed 10

    00a0  db d3 f9 76 ae ba 55 52  fc 4e d4 a9 1a 56 cf 0b

    00b0  59 45 cb 5f 32 72 00 e4  9c 47 45 fb 46 91 8f d2

    00c0  9e f4 6a b4 74 22 b1 59  e8 1e 90 46 1f 66 16 32

    00d0  7b b2 df f3 d5 14 77 f4  6b 0c d5 09 e8 d5 f0 07

    00e0  06 48 97 f5 d4 9a c1 db  d1 70 49 66 12 d8 b7 05

    00f0  18 d1 3d fa 03 37 85 89  23 6b 90 b1 ce c0 29 f7

    0100  dd bd 60 3c 9c e0 d8 4e  28 4f 1c 0a f2 a9 73 69

    0110  09 e9 61 87 e2 31 e0 3e  bd 36 af 51 4c 2a 01 d1

    0120  c1 62 67 0d 89 f2 2e b8  ac 67 eb 65 fb c4 1b 92

    0130  b3 e6 7c c6 9a 96 bd a0  e5 aa a3 4e 49 05 ac a9

    0140  7c 4b e8 55 98 d2 5b 27  21 45 36 e8 f7 59 31 ef

    0150  e8 fc 71 15 0d 1b a9 e7  6b c7 c4 98 39 4d 22 4a

    0160  19 72 67 92 7c bf 61 8d  aa 2c 41 1f ba ec dc b2

    0170  5d df 56 f1 2c 35 80 fa  c9 9d de 33 b0 26 2d 00

    0180  ba 5e 75 c4 ac 6d 08 d9  6c a0 72 74 37 7d dd 4e

    0190  31 83 4d 30 9d 07 79 68  40 38 ed e5 7d b0 2b 58

    01a0  c1 64 2d 69 5f 3d 46 ba  7a 75 9b 29 10 1b b3 11

    01b0  95 9b f3 2d a2 50 94 d8  36 92 79 57 16 53 8c 07

    01c0  e1 3b d5 1c a7 5d bc 91  2d ed 21 3e 1d 4f 2b a0

    01d0  b6 6c a0 de 78 e1 eb ee  45 b3 16 ea bc f9 4f 18

    01e0  37 c8 a8 62 8d 80 54 c3  99 1e a1 6d cb 5c 0e be

    01f0  96 ef ad 6b ee ad 4e b7  4e ae b1 9a 62 27 2e 43

Signature matches Public Key

Root Certificate: Subject matches Issuer

Key Id Hash(rfc-sha1): 109b354c4ebab3e38ea9badfbe1d82026dfa3596

Key Id Hash(sha1): 30becd4cbc82ee17ed3b3339b1e06e59426a47e1

Key Id Hash(bcrypt-sha1): 4f636b55894c3952f2c0b286e14b1c4097a33430

Key Id Hash(bcrypt-sha256): dd688647c0bfacf902ca2641503b47626cba4c068700ff9c0966755e07c34631

Key Id Hash(md5): 7463515ce976eff5b43e4a35dab5e4be

Key Id Hash(sha256): bdadaf178abb608a5be995790a1c13c233d0dd21a9de6b7a6f8c7446b6f68006

Key Id Hash(pin-sha256): v1omdJppKmUlS2HN29QXBMLLvAMjSSSAjl1HnkoaVD0=

Key Id Hash(pin-sha256-hex): bf5a26749a692a65254b61cddbd41704c2cbbc03234924808e5d479e4a1a543d

Cert Hash(md5): 8242f9a9036b0181d4ae3bef505f926f

Cert Hash(sha1): bb0df29ab8ac261dc07512f0c503ccac3b94b685

Cert Hash(sha256): 87274aaef464f71120f9b198ca9b19be4c112d3cc51ab7a148639d1dd9a96f93

Signature Hash: 67b6a0ab301683da7f113d13415acdb02cd3213118eaa995458c39e50b79c228


  CERT_MD5_HASH_PROP_ID(4):

    8242f9a9036b0181d4ae3bef505f926f


  CERT_KEY_IDENTIFIER_PROP_ID(20):

    30becd4cbc82ee17ed3b3339b1e06e59426a47e1


  CERT_KEY_PROV_INFO_PROP_ID(2):

    Key Container = 9de3ab72-be6a-4a5a-85b4-321110eadb5d

  Unique container name: 736f334a421c52ddfb83677bfcefa723_dbb26849-7c5e-48f1-871d-8a3e25ef9376

    Provider = Microsoft Enhanced RSA and AES Cryptographic Provider

    ProviderType = 18

  Flags = 20 (32)

    CRYPT_MACHINE_KEYSET -- 20 (32)

    KeySpec = 1 -- AT_KEYEXCHANGE


  CERT_SHA1_HASH_PROP_ID(3):



查看完整回答
反對 回復 2022-10-23
  • 2 回答
  • 0 關注
  • 195 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號