2016-09-02 4 views
0

Мы разрабатываем веб-сайт Azure, который должен связываться с несколькими серверами, каждый из которых требует отдельного SSL-соединения.X509CertificateCollection проблемы в Azure webjob

У нас есть наши сертификаты, хранящиеся на внешнем сервере, и загружать их во время выполнения вместе с соответствующими настройками SSL-соединения. Когда мы вызываем конструктор X509Certificate2, чтобы добавить его в X509CertificateCollection, webjob останавливается с кодом выхода -1073740940, и его статус становится «PendingRestart». Мы предполагаем, что класс X509Certificate2 несовместим с webjobs, но мы не можем найти никакого намека на то, как решить эту проблему.

Строка кода, который генерирует вопрос

IS-

новых X509Certificate2 (sslCertificateBytes, socketSettings_.CertificatePassword))

private X509CertificateCollection GetClientCertificates(byte[] sslCertificateBytes) 
     { 
      log_?.OnEvent($"{nameof(SSLStreamFactory)} function {nameof(GetClientCertificates)} started"); 
      X509CertificateCollection result = new X509Certificate2Collection(); 
      log_?.OnEvent($"{nameof(X509CertificateCollection)} {nameof(result)} construction successfull"); 
      try 
      { 
       if (sslCertificateBytes != null) 
       { 
        log_?.OnEvent($"{nameof(sslCertificateBytes)} enumerable != null"); 
        result.Add(new X509Certificate2(sslCertificateBytes, socketSettings_.CertificatePassword)); 
        log_?.OnEvent($"result.Add successful"); 
       } 
       else if (!string.IsNullOrEmpty(socketSettings_.CertificatePath)) 
       { 
        log_?.OnEvent($"{nameof(socketSettings_.CertificatePath)} != null"); 
        result = new X509Certificate2Collection(); 
        log_?.OnEvent($"{nameof(X509CertificateCollection)} {nameof(result)} construction successfull"); 
        var clientCert = StreamFactory.LoadCertificate(socketSettings_.CertificatePath, socketSettings_.CertificatePassword, log_); 
        log_?.OnEvent($"{nameof(StreamFactory.LoadCertificate)} function ended"); 
        if (clientCert != null) 
        { 
         result.Add(clientCert); 
         log_?.OnEvent($"result.Add successful"); 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       log_?.OnEvent($"{nameof(SSLStreamFactory)} function {nameof(GetClientCertificates)} raised exception: {ex.Message}"); 
       throw; 
      } 
      log_?.OnEvent($"{nameof(SSLStreamFactory)} function {nameof(GetClientCertificates)} ended"); 
      return result; 
     } 

Есть ли способ управления SSL сертификаты на Azure Webjobs ? Заранее благодарен

ответ

2

Azure webjobs работают в одной и той же среде своего родительского webapp. Вы можете следить за эту статью, чтобы импортировать сертификаты в веб-приложение:

В двух словах:

  • Загрузить сертификат Azure.
  • Добавить настройку приложения под названием WEBSITE_LOAD_CERTIFICATES с его значением, установленным в отпечатком сертификата (сделать его доступным для вашего веб-приложения)

Важно помнить: будет установлен

Сертификаты в хранилище личных сертификатов ApplicationPool Identity рабочего процесса.

Так, чтобы получить доступ сертификат от вашего веб-приложение или webjob:

var certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser); 
certStore.Open(OpenFlags.ReadOnly); 
certCollection = certStore.Certificates.Find(
    X509FindType.FindByThumbprint, 
    // Replace below with your cert's thumbprint 
    "E661583E8FABEF4C0BEF694CBC41C28FB81CD870", 
    false); 

// Get the first cert with the thumbprint 
if (certCollection.Count > 0) 
{ 
    X509Certificate2 cert = certCollection[0]; 
} 

certStore.Close(); 
Смежные вопросы