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;
}