0

AzureにApp-serviceがあり、AzureServiceManagementAPIで作業していたときに、各サブスクリプションのmanagememnt証明書を含むファイルをダウンロードしていました。Azure、App-service、文字列からX509Certificate2オブジェクトを作成

どのように私はX509Certificate2オブジェクトを作成しようとしているファイルから証明書文字列を使用します。

string cerStr = subscription.Attribute("ManagementCertificate").Value; 
X509Certificate2 x509 = new X509Certificate2(Convert.FromBase64String(cerStr), string.Empty, X509KeyStorageFlags.MachineKeySet) 

X509Certificate2のコンストラクタは、アクセスが拒否された例外

を投げます。 System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlobで

System.Security.Cryptography.CryptographicException.ThrowCryptographicException(のInt32 HR)(バイト[] RAWDATA、のIntPtrパスワード、UInt32型dwFlagsパラメータ、ブールpersistKeySet、 SafeCertContextHandle & System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(バイト[] RAWDATA、オブジェクトのパスワード、X509KeyStorageFlags keyStorageFlags)

+1

からの抜粋コードは、あなたがX509KeyStorageFlags.UserKeySetを試みたことがありますか? –

答えて

0

誰もがこの質問に答えていないので、私はウィスコンシン州でpCertCtx)それを試してみてください。私が間違っているなら、私を修正しますが、私が考える問題は、次のコード行でください:

new X509Certificate2(Convert.FromBase64String(cerStr), string.Empty, X509KeyStorageFlags.MachineKeySet) 

このコード行は、仮想マシンの証明書ストアに新しい証明書を追加しようとします。ランタイムで使用されるすべての証明書は、どこかの店舗でホストする必要があります。これは良いアイデアではありません。なぜなら、アプリケーションサービスをホストしている仮想マシンの証明書ストアは何も格納する必要がないからです。これは、アプリケーションサービスを扱っているときに気にならないインフラストラクチャの一部です。

あなたがする必要があるのは、紺碧のポータルを介して証明書をアップロードすることです(まだ存在していない場合)。私は、この目的のために既に設置されているSSL証明書を再利用することになりました。これが完了すると、その証明書をコードで取得できます。 WEBSITE_LOAD_CERTIFICATESという名前のアプリサービスのAzureポータルで、「アプリケーション設定」キーの下に新しいApp Settingを追加する必要があります。値は証明書の拇印でなければなりません。

証明書を取得するには、このような何かを行う必要があります。

public async Task<X509Certificate2> GetCertificate(string certificateThumbprint) 
{ 
    var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine); 
    store.Open(OpenFlags.ReadOnly); 
    var cert = store.Certificates.OfType<X509Certificate2>() 
     .FirstOrDefault(x => x.Thumbprint == certificateThumbprint); 
    store.Close(); 
    return cert; 
} 

あなたはフレドリックは、前述のように紺碧のリソースエクスプローラhttps://resources.azure.com/

+0

私の経験から、証明書はCurrentUserにインストールされます。 –

+0

これの周りには何もありませんか?私たちの中には、外部サービスから証明書を読み込む人もいます。 – wasabi

0

を使用してサブスクリプションをナビゲートすることによって証明書の拇印を取得することができるかもしれません問題はコードによるものです

X509Certificate2 x509 = new X509Certificate2(Convert.FromBase64String(cerStr), string.Empty, X509KeyStorageFlags.MachineKeySet) 

証明書を使用しようとすると、私たちはuploa d Azureポータルからの証明書。 Azure WebAppアプリケーションで、拇印の値を持つWEBSITE_LOAD_CERTIFICATESを追加します。詳細情報はblogを参照してください。証明書にアクセスするための

Webアプリケーション、ブログ

static void Main(string[] args) 
    { 
     X509Store certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser); 
     certStore.Open(OpenFlags.ReadOnly); 
     X509Certificate2Collection certCollection = certStore.Certificates.Find(
           X509FindType.FindByThumbprint, 
           // Replace below with your cert's thumbprint 
           “E661583E8FABEF4C0BEF694CBC41C28FB81CD870”, 
           false); 
     // Get the first cert with the thumbprint 
     if (certCollection.Count > 0) 
     { 
     X509Certificate2 cert = certCollection[0]; 
     // Use certificate 
     Console.WriteLine(cert.FriendlyName); 
     } 
     certStore.Close(); 
    } 
+0

これには何もありませんか?私たちの中には、外部サービスから証明書を読み込む人もいます。 – wasabi

関連する問題