0

私はAzure KeyVaultに証明書をアップロードし、Active Directoryに登録されたアプリケーションを使用して「すべて」のアクセス権を取得しました。それはすべて正常に動作します。これで、取得したキーをX509Certificateにロードして、3rdpartyレガシーSOAP Webサービスを呼び出すためのクライアント証明書として使用できるようにする必要があります。私が知る限り、X509Certificateを使ってそのWebサービスを呼び出すことはできます。Azure KeyVault X509Certificateの読み込み方法は?

私はキーまたはシークレットとしてアップロードしても問題ありませんか?私は両方を試みました。

var clientId = "...." 
var clientSecret = "...." 

.. 
var token = authenticationContext.GetAccessToken(resource, adCredential); 
var keyClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(token)); 
KeyBundle key = keyClient.GetKeyAsync("https://mycertifcates.vault.azure.net/keys/MyCertificate/123456789"); 
これまでのところは良い、私は結果としてKeyBundleを持って、私はBase64Stringに変換することができますようにそれがようだが、何でも、私は例外:(

第一の試みで終わるてみ

私が試した:

  var publicKey = Convert.ToBase64String(key.Key.N); 
      var cert = X509Certificate.FromBase64String(publicKey); 

System.Security.Cryptography.CryptographicException

は{ "要求されたオブジェクトを見つけることができません\ rをする\ nを。"}

えーえ

第二の試み、RSACryptoServiceProviderにそれをロードし、それをどうしますか?同じ例外に結果と私も

 var rsaCryptoProvider = new RSACryptoServiceProvider(); 
     var rsaParameters = new RSAParameters() 
     { 
      Modulus = key.Key.N, 
      Exponent = key.Key.E 
     }; 
     rsaCryptoProvider.ImportParameters(rsaParameters); 
     var cspBlob = rsaCryptoProvider.ExportCspBlob(false); 

     // what to do with the cspBlob ? 
     var publicKey = Convert.ToBase64String(cspBlob); 

ない秘密鍵にしたい場合は、私も秘密鍵を取得することはできないんだけど、公開鍵が異なっています。もちろん、これはうまくいきません。

第三の試みは、私が管理ポータルを使用して秘密証書たContentTypeとしてそれをアップロードしました。

  var secret = helper.GetSecret("https://myCertificate.vault.azure.net/secrets/MyCertificate/1234567890"); 

      var value = secret.Value; 

      // Now I got the secret.. works flawless 
      // But it crash with the same exception at .Import 
      var exportedCertCollection = new X509Certificate2Collection(); 
      exportedCertCollection.Import(Convert.FromBase64String(value)); 
      var cert2 = exportedCertCollection.Cast<X509Certificate2>().Single(s => s.HasPrivateKey); 

System.Security.Cryptography.CryptographicException { " 要求されたオブジェクトを見つけることができませんた。\ r \ n"}

任意提案歓迎です。

私は、トレースログ

ystem.Net情報を見て、秘密鍵を含むPFXを必要とする:0:[37880] SecureChannelの#23107755 - から選択する1つのクライアント証明書を残しました。 System.Net Information:0:[37880] SecureChannel#23107755 - 証明書ストアで一致する証明書を検索しようとしています。 System.Net情報:0:[37880] SecureChannelの#23107755 - 証明書の秘密鍵の場所:[件名]

+0

X509Certificate2のために正常に動作します。https:// github.com/Azure/azure-sdk-for-net/tree/93c8ebcf01461ed5d838837dc7dbb7b3f507eec0/src/KeyVault/Microsoft.Azure.KeyVault/Customized – rfcdejong

答えて

1

自分の質問に答えるためには、

は、それが回転(私は推測する、あまりにもすぐにそれを尋ねました)この質問は実際には重複していましたが、最初は理解していませんでした。事実、Azure管理ポータルは限られています。今のところ、証明書をアップロードするには、PowerShell(またはそれに関する他のコード)を使用する必要があります。

https://stackoverflow.com/a/34186811/578552

第三の試みのコードは、少なくとも..フォークのサンプルのために、Microsoftが改善さKeyVaultライブラリと非常に忙しいようです

 var secret = helper.GetSecret("https://myCertificate.vault.azure.net/secrets/MyCertificate/1234567890"); 

     var exportedCertCollection = new X509Certificate2Collection(); 
     exportedCertCollection.Import(Convert.FromBase64String(secret.Value)); 
     var cert2 = exportedCertCollection.Cast<X509Certificate2>().Single(s => s.HasPrivateKey); 
+1

Key Vaultの新しい証明書機能を参照してください。 Key Vault内で鍵ペアを生成し、証明書を生成(または取得)し、自動更新を維持します。ここにチュートリアルがあります。 https://blogs.technet.microsoft.com/kv/2016/09/26/get-started-with-azure-key-vault-certificates/ –

関連する問題