2016-05-04 32 views
0

Azure Key Vaultでの認証に証明書を使用する必要がありますが、アップロードした鍵にアクセスできません。私はこれらのステップを踏んだ:Azureクラウドサービスでx509証明書を取得

ポータルを介してクラウドサービスにアップロードされたキー(.pfx)。キー取得するには、このコードを使用ServiceConfiguration

を追加しました。この

<Certificates> 
    <Certificate name="keyvault" thumbprint="<my_thumbprint>" thumbprintAlgorithm="sha1" /> 
</Certificates> 

サービス定義

<Certificates> 
    <Certificate name="keyvault" storeLocation="LocalMachine" storeName="CA" /> 
</Certificates>  

に追加され、これを:

var store = new X509Store(StoreName.My, StoreLocation.CurrentUser); 
StoreLocation.LocalMachine); 
try 
{ 
    store.Open(OpenFlags.ReadOnly); 
    var col = store.Certificates.Find(X509FindType.FindByThumbprint, 
       <thumbprint_value>, false); // Don't validate certs, since the test root isn't installed. 
    if (col == null || col.Count == 0) 
       return null; 
      return col[0]; 
} 
finally 
{ 
    store.Close(); 
} 

しかし、私はこれを参照してくださいサービスを開始例外:

Value cannot be null. 
Parameter name: certificate 

必要な設定はありますか?

答えて

2

あなたのコードは、他の場所から証明書を読んでいる間に1箇所

<Certificate name="keyvault" storeLocation="LocalMachine" storeName="CA" /> 

に証明書をインストールするには、ファブリックコントローラを求めているので、あなたはこのエラーを取得している理由があります。

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

両方の場所で同じ場所を使用するようにしてください。

私はcsdefファイルに次の変更を行います:

<Certificate name="keyvault" storeLocation="LocalMachine" storeName="My" /> 

そして、コードに次の

var store = new X509Store(StoreName.CertificateAuthority, StoreLocation.LocalMachine); 
+0

感謝。この設定を使用すると、certmgrを使用して証明書をインストールした状態でローカルで動作しますが、クラウドサービスにデプロイした場合は動作しません。 –

+0

これは、ローカルマシンで読んでいる場所のストアに既に証明書がインストールされている可能性があるためです。 「CurrentUser」の「個人」証明書ストアから証明書を削除して、コードを実行してみてください。 –

+0

証明書をAzureにアップロードした後に保存された証明書とは別のストアにローカルに保存していたという問題。これをAzureで動作させるには、次のようにx509ストアを作成する必要があります。var store = new X509Store(StoreName.CertificateAuthority、StoreLocation.LocalMachine)コードの最後の2行を更新すると答えが正しいとマークできます –

関連する問題