【问题标题】:wap cmdlets - add-certificate errorwap cmdlet - 添加证书错误
【发布时间】:2011-10-17 23:54:42
【问题描述】:

我在尝试使用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 + 添加证书 删除重复命令)... + CategoryInfo : CloseError: (:) [Add-Certificate], CryptographicException + FullyQualifiedErrorId : Microsoft.Samples.AzureManagementTools.PowerShell.Certificates.AddCertificateCommand

我们确定 serviceName 和 subscriptionId 是正确的,并且查看所有示例,我们会发现其他参数看起来也是正确的......但显然其中一个(或两个)不正确。我们只是不明白为什么。

任何建议都非常感谢:-)

【问题讨论】:

    标签: powershell upload azure certificate cmdlets


    【解决方案1】:

    Add-Certificate 命令用于将证书(通常带有私钥)上传到托管服务。 IIRC,它将尝试使用 .pfx 包装器包装 .cer 文件,并使用简单的密码上传该文件。这样做是因为门户网站过去需要带有证书的密码(它假设人们只上传带有私钥的证书)。基于加密异常,该代码路径中的某些内容可能是错误的。我希望有更多的堆栈跟踪可供查看。

    如果您上传一个 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;
        }
    

    【讨论】:

    • 感谢您的回答,仍在调查中,但我认为问题可能是我们的 .cer 文件无法导出。尝试从 MMC 插件手动执行此操作时,“pfx”导出选项显示为灰色。因此,我们现在正在与 .cer 提供商确认他们是否将私钥标记为“可导出”。 serverfault.com/questions/83143/convert-p7b-key-to-a-pfx
    • .cer 文件只是公钥。有时您需要导入这些,但更多时候您需要 pfx,它是私钥方面。如果你真的需要 .cer,有一个过程可以通过包装在 pfx 容器中来上传它。
    猜你喜欢
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 2012-09-09
    • 2016-08-03
    • 1970-01-01
    • 2018-05-11
    • 2021-01-17
    • 1970-01-01
    相关资源
    最近更新 更多