web-dev-qa-db-ja.com

Azure Webサイトでアップロードされた証明書にアクセスする

Webロールを使用していたときに、Azureポータルに証明書をアップロードするだけでそれを表示できました。これで、AzureのWebサイトに切り替えて、Azure管理ポータルに証明書をアップロードしましたが、コードに表示されません。まったく。

Azure Webサイトにアップロードされた証明書にアクセスするために必要な構成や他の方法はありますか?.

これは私がアップロードされた証明書にアクセスしようとしている方法です。

private List<string> GetAvailableCertificatesFromStore()
{
    var list = new List<string>();
    var store = new X509Store(StoreName.My,StoreLocation.LocalMachine);
    store.Open(OpenFlags.ReadOnly);

    try
    {
        foreach (var cert in store.Certificates)
        {
            // todo: add friendly name
            list.Add(string.Format("{0}", cert.Subject));
        }
    }
    finally
    {
        store.Close();
    }

    return list;
}
26
sp9

UPDATE-2015年7月23日:この回答は廃止されました(提供された時点では正解でした)。以下のSアームストロングの回答を参照してください。

Azure Cloud Services (Web/Worker Roles)Azure Websitesの動作は異なります。 Azure Cloud Servicesでは、管理ポータルを介して証明書をアップロードし、その証明書の拇印とインストールの場所をロールのプロパティで指定すると、ロールがVMにデプロイされている場合、それを担当するファブリックコントローラーもインストールされます上記のコードがWebロールで機能するのはこのためです。

ウェブサイトでは、自分でこれを行う必要があります。残念ながら、Azure Webサイトのセキュリティ制限のため、証明書ストアに証明書をインストールすることはできません。証明書を操作するには、コードと共に証明書のPFXファイルを含め、その証明書ファイルを操作する必要があります。証明書ストアに証明書をインストールすることはできません。

AzureのWebサイトと証明書を使用して行った小さな作業では、PFXファイルがAppDataフォルダーに含まれている場合にのみ証明書が機能することがわかりました。また、CryptographicException: The system cannot find the file specifiedのようなエラーが発生する場合もあります。このエラーが発生した場合は、次のブログ投稿が役立つことがあります。 http://blog.tylerdoerksen.com/2013/08/23/pfx-certificate-files-and-windows-Azure-websites/

11
Gaurav Mantri

Azure WebSiteでの証明書の使用は、IISのローカルコピーでの場合とは異なります。また、Visual StudioからデバッグモードでWebサイトを実行している場合でも機能します。つまり、Webサイトにはアクセスできません。用語の伝統的な意味での証明書ストアに...それはすべてメモリ内で行われます。

まず、Azureポータル経由で証明書をアップロードしたら、WEBSITE_LOAD_CERTIFICATESと呼ばれるappsettingを(ポータルからも)追加し、この値をアップロードした証明書の拇印に設定する必要があります。これは、必要に応じて複数の拇印のコンマ区切りのリストにすることも、アップロードされたすべての証明書をロードする*こともできます。これにより、証明書が強制的にメモリに読み込まれると思います。

その後、証明書をロードするには、次のようにします。

var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);

var certs = store.Certificates.Find(X509FindType.FindByThumbprint, YOUR_THUMBPRINT, false);

証明書が有効であることを確認するには、「false」を「true」に変更します。

私はここにこの情報を見つけました、それは私が持っているよりもはるかによく説明しています: http://Azure.Microsoft.com/blog/2014/10/27/using-certificates-in-Azure-websites-applications/

76
S.Armstrong