Azure Cloud Service (Classi c) - отсутствует один экземпляр root сертификат CA / SSL не может быть проверен - PullRequest
0 голосов
/ 07 мая 2020

У меня есть облачная служба (Classi c), работающая в Azure, в которой размещается служба WCF. В облачной службе настраивается несколько экземпляров с помощью функции масштабирования облачной службы. SSL-сертификат подстановочного знака был предоставлен через портал Azure и настроен в csdef / cscfg в соответствующем проекте Visual Studio Cloud. До недавнего времени все работало отлично, никаких проблем с сертификатами и т.д. c. произошло.

.csdef

<Sites>
  <Site name="Web">
    <Bindings>
      <Binding name="Endpoint2" endpointName="EndpointSSL" />
    </Bindings>
  </Site>
</Sites>
<Endpoints>
  <InputEndpoint name="EndpointSSL" protocol="https" port="443" certificate="SSL" />
</Endpoints>
<Certificates>
  <Certificate name="SSL" storeLocation="LocalMachine" storeName="My" />
</Certificates>

.cscfg

<Role name="FR">
  <Instances count="3" />
  <ConfigurationSettings>
    <!-- Settings are set here -->
  </ConfigurationSettings>
  <Certificates>
    <Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption" thumbprint="THUMBPRINT_A" thumbprintAlgorithm="sha1" />
    <Certificate name="SSL" thumbprint="THUMBPRINT_B" thumbprintAlgorithm="sha1" />      
  </Certificates>
</Role>

Сертификат устанавливается правильно, как вы можете видеть в окне управления сертификатами в windows. К сожалению, начиная с прошлой недели, при проверке сайта через SSL Labs (https://www.ssllabs.com/ssltest/) в итоговом отчете стали появляться два сертификата, один из которых недействителен, так как цепочка сертификатов, похоже, нарушена. Другие службы, использующие тот же сертификат Wildcard, не имеют этой проблемы.

Что мне известно об этой проблеме:

  • Сертификат в хранилище сертификатов на одном из трех запущенных экземпляры не могут быть проверены самим windows.
  • В двух других экземплярах сертификат правильный и может быть проверен с помощью windows
  • Экземпляр с недействительным сертификатом не имеет соответствующий root CA в хранилище «Доверенные Root CA» в windows.
  • Повторное развертывание, повторное создание образа, перезапуск и т. д. c. не помогает. Это может просто перенести проблему из одного экземпляра в другой. До сих пор затрагивался только один экземпляр.
  • Никаких изменений вручную не производилось, и в последнее время не применялось новое развертывание. Это просто начало происходить неожиданно

Certificates on the invalid and a correct instance

Есть ли у кого-нибудь идеи, в чем может быть проблема? Я также начал тикет в службу поддержки Microsoft, но пока они тоже ничего не понимают. Существуют ли какие-либо настройки, которые я мог бы попробовать при развертывании, которые заставляют сертификаты проверяться при развертывании? Или есть ли возможность получить недостающий Root CA из кода при запуске (поскольку я подозреваю, что это может быть проблемой, почему он не может быть проверен на одном экземпляре)?

1 Ответ

0 голосов
/ 03 июня 2020

Служба поддержки Microsoft Azure также не знает root причину такого поведения, однако на данный момент они придумали подходящий обходной путь.

В облачной службе добавлена ​​задача запуска, которая проверяет, существует ли потенциально отсутствующий Root CA в списке всех Root CA. Если нет, то недостающий будет установлен (через Powershell). После этого недостающий Root CA должен быть добавлен в список Root CA, и фактический сертификат SSL Wildcard (который не прошел проверку) может быть успешно проверен - проверки через SSLLabs снова будут работать.

По крайней мере, для моей проблемы это помогло. Я не полностью удовлетворен этим, так как хотел бы знать причину root, но Microsoft, похоже, знает об этой проблеме и (насколько я понимаю) продолжает расследование. Если появится какое-либо правильное решение (вместо обходного пути), я постараюсь добавить его и здесь.

Файл CMD для задачи запуска:

SET LOG_FILE="%TEMP%\StartupLog.txt"
SET EXECUTE_PS1=0

IF "%ComputeEmulatorRunning%" == "" (
    SET EXECUTE_PS1=1
)

IF "%ComputeEmulatorRunning%" == "false" (
    SET EXECUTE_PS1=1
) 

IF %EXECUTE_PS1% EQU 1 (
    echo "Invoking InstallCertificateSSLConfigure.ps1 on Azure service at %TIME% on %DATE%" >> %LOG_FILE% 2>&1  
    PowerShell -ExecutionPolicy Unrestricted .\Startup\InstallCertificate.ps1 >> %LOG_FILE% 2>&1
    IF %ERRORLEVEL% NEQ 0 (EXIT /B %ERRORLEVEL%)
) ELSE (
    echo "Skipping InstallCertificate.ps1 invocation on emulated environment" >> %LOG_FILE% 2>&1    
)    

EXIT /B 0 

Скрипт Powershell для установки сертификата (выполняется из CMD)

$thumbprint = "THUMBPRINT"
$path = ".\Startup\MISSING ROOT CA.crt"

$cert = Get-ChildItem -Path Cert:\LocalMachine\Root | Where-Object {$_.Thumbprint -eq $thumbprint}

if ( $cert )
{
    Write-Host "The Certificate $($cert.Thumbprint) is installed already"
}
else
{
    Write-Host "The Certificate $thumbprint is not installed"
    Import-Certificate -FilePath $path -CertStoreLocation Cert:\LocalMachine\Root
    Write-Host "installed the Certificate $thumbprint"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...