2017-05-16 6 views
0

実行時にWebアプリケーションからX509Certificate2証明書を生成し、データベースにバイト形式で格納する必要があります。私はhereのソリューションを使用しています。このソリューションを使用すると、証明書を生成することができますが、証明書ストアでも証明書が作成されます。 X509Certificate2オブジェクトを取得した後、証明書ストアから証明書ストアを削除するために、証明書がマシン証明書ストアに存在する必要はありません。私のWebアプリケーションがIIS_IUSRSで実行されているようC#を使用してX509Certificate2オブジェクトを生成する

また、私はUserContextの下でそれをしなければならなかった、それは私が最初にMachineContextを使用してcertficatesを作成することはできませんでしたアカウント。 UserContextの下でもcertficatesを作成するには、 'Load User Profile'というapp-poolプロパティがあります。これはtrueに設定する必要があります。今、私は望みの結果を得ることができましたが、アプローチに問題がないか、IISで「ユーザープロファイルをロードする」をtrueに設定するかどうかを確認したいと思います。

+0

証明書を生成する目的は何ですか? – Crypt32

+0

これらの証明書を暗号化に使用します。これらの証明書は暗号化された形式でデータベースに格納されます。これらの証明書を暗号化する鍵は、HSMで維持されます。 – Aashish

+0

暗号化には対称キーを使用し、HSMのマスターキーでこれらのキーを保護する必要があります。 – Crypt32

答えて

0

あなたは.NETのコアに切り替えることができるしている場合は、2.0 previewが出ていると証明書作成へのインボックスソリューションを持っています。 RSAキーポストpreview1用の証明書への互換性に影響する変更があります

using System.Security.Cryptography.X509Certificates; 

... 

private static X509Certificate2 MakeLocalhostCert() 
{ 
    using (ECDsa key = ECDsa.Create(ECCurve.NamedCurves.nistP384)) 
    { 
     var request = new CertificateRequest(
      "CN=localhost", 
      key, 
      HashAlgorithmName.SHA384); 

     request.CertificateExtensions.Add(
      new X509BasicConstraintsExtension(false, false, 0, true)); 

     const X509KeyUsageFlags endEntityTypicalUsages = 
      X509KeyUsageFlags.DataEncipherment | 
      X509KeyUsageFlags.KeyEncipherment | 
      X509KeyUsageFlags.DigitalSignature | 
      X509KeyUsageFlags.NonRepudiation; 

     request.CertificateExtensions.Add(
      new X509KeyUsageExtension(endEntityTypicalUsages, true)); 

     var sanBuilder = new SubjectAlternativeNameBuilder(); 
     sanBuilder.AddDnsName("localhost"); 
     sanBuilder.AddIpAddress(IPAddress.Loopback); 
     sanBuilder.AddIpAddress(IPAddress.IPv6Loopback); 

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

     request.CertificateExtensions.Add(
      new X509EnhancedKeyUsageExtension(
       new OidCollection 
       { 
        // server authentication 
        new Oid("1.3.6.1.5.5.7.3.1"), 
       }, 
       false)); 

     DateTimeOffset now = DateTimeOffset.UtcNow; 

     return request.CreateSelfSigned(now, now.AddDays(90)); 
    } 
} 

、RSASignaturePadding必要なパラメータは、RSAのためのCertificateRequestのCTORに追加されました。

関連する問題