wap cmdlets - ошибка добавления сертификата - PullRequest
1 голос
/ 02 августа 2011

Я делаю что-то не так при попытке загрузить сертификат в Azure с помощью команды WAPPA , add-certificate .

Это то, что я запускаю в 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 << ... (<em> удалено повторение команды ) ... + CategoryInfo: CloseError: (:) [Add-Certificate], CryptographicException + FullyQualifiedErrorId: Microsoft.Samples.AzureManagementTools.PowerShell.Certificates.AddCertificateCommand

Мы уверены, что serviceName и subscriptionId верны, и, глядя на все примеры, мы можем обнаружить, что другие параметры также выглядят корректными ... но, очевидно, один (или оба) из них не верны. Мы просто не можем понять, почему.

Любые предложения с благодарностью: -)

1 Ответ

1 голос
/ 02 августа 2011

Команда Add-Certificate предназначена для загрузки сертификата (обычно с закрытым ключом) в размещенную службу. IIRC попытается обернуть файл .cer оболочкой .pfx и загрузить его с простым паролем. Это происходит потому, что на портале требовались пароли с сертификатами (предполагалось, что люди загружают сертификаты только с закрытыми ключами). Что-то в этом пути кода может быть неправильным из-за криптографического исключения. Хотелось бы, чтобы было больше трассировки стека, чтобы увидеть.

Если вы загружаете pfx (с экспортируемым ключом), это работает? Это просто проблема из-за файла .cer и отсутствия пароля?

Другая мысль: параметр -ServiceName может быть чувствителен к регистру при преобразовании в DNS-имя (servicename.cloudapp.net). Можете ли вы убедиться, что вы используете все строчные буквы?

Редактировать: еще одна мысль - попробуйте импортировать .cer в вашу систему и использовать get-item cert: format, чтобы снова обратиться к нему. Глядя на код, я не совсем уверен, что он будет правильно работать с указанным путем к файлу, если это не 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;
    }
...