1

WAPPAコマンドadd-certificateを使用して証明書を Azure にアップロードしようとすると、何か問題が発生します。

これは私がpowershellで実行しているものです:

add-certificate -ServiceName myService -CertificateToDeploy ".\mycert.cer" -SubscriptionId 1234c88c-xxxx-xxxx-ad88-888c6ec5fc4a -Certificate (get-item cert:\CurrentUser\My\0E5A777B38724D85F415E011192D2EF888888884)

そして、これは出続けるエラーです。

Add-Certificate : インデックス値が無効です。行:1 文字:16 + add-certificate <<...(コマンドの繰り返しを削除)... + CategoryInfo : CloseError: (:) [Add-Certificate], CryptographicException + FullyQualifiedErrorId : Microsoft.Samples.AzureManagementTools.PowerShell .Certificates.AddCertificateCommand

serviceName と subscriptionId は正しいと確信しており、見つけることができるすべての例を見ると、他のパラメーターも正しいように見えますが、明らかに一方 (または両方) が正しくありません。理由がわかりません。

どんな提案でも大歓迎です:-)

4

1 に答える 1

1

Add-Certificate コマンドは、ホストされたサービスに証明書 (通常は秘密キーを使用) をアップロードするためのものです。IIRC では、.cer ファイルを .pfx ラッパーでラップし、単純なパスワードでアップロードしようとします。これは、ポータルが証明書付きのパスワードを要求していたためです (ユーザーは秘密鍵付きの証明書のみをアップロードすると想定していました)。暗号化例外に基づいて、そのコード パスの何かが間違っている可能性があります。見るべきスタックトレースがもっとあればいいのにと思います。

(エクスポート可能なキーを使用して) pfx をアップロードした場合、それは機能しますか? .cer ファイルとパスワードの欠如が原因で問題になるだけですか?

別の考え: -ServiceName パラメーターは、DNS 名 (servicename.cloudapp.net) に解決されるため、大文字と小文字が区別される可能性があります。すべて小文字を使用していることを確認できますか?

編集: 別の考え - .cer をシステムにインポートし、get-item cert: 形式を使用して再度参照してみてください。コードを見ると、pfx でない場合に指定されたファイル パスで正しく動作するかどうかは完全にはわかりません。パスワードが空白の .cer ファイルをインポートすると失敗する可能性があると推測しています。それは、内部 (マインド) デバッガーで確認したコードを実行することだけです。

    private byte[] GetCertificateData()
    {
        var cert = new X509Certificate2();
        byte[] certData = null;

        if (((this.CertificateToDeploy is PSObject) && ((PSObject)this.CertificateToDeploy).ImmediateBaseObject is X509Certificate) ||
            (this.CertificateToDeploy is X509Certificate))
        {
            cert = ((PSObject)this.CertificateToDeploy).ImmediateBaseObject as X509Certificate2;

            try
            {
                certData = cert.HasPrivateKey ? cert.Export(X509ContentType.Pfx) : cert.Export(X509ContentType.Pkcs12);
            }
            catch (CryptographicException)
            {
                certData = cert.HasPrivateKey ? cert.RawData : cert.Export(X509ContentType.Pkcs12);
            }
        }
        else
        {
            cert.Import(this.ResolvePath(this.CertificateToDeploy.ToString()), this.Password, X509KeyStorageFlags.Exportable);
            certData = cert.HasPrivateKey ? cert.Export(X509ContentType.Pfx, this.Password) : cert.Export(X509ContentType.Pkcs12);
        }

        return certData;
    }
于 2011-08-02T16:02:34.933 に答える