2016-09-02 19 views
0

複数のサーバーと通信する必要があるAzure Webジョブを開発しています。それぞれに個別のSSL接続を要求しています。Azure WebjobのX509CertificateCollectionの問題

証明書は外部サーバーに保存され、対応するSSL接続設定とともに実行時にロードされます。 X509CertificateCollectionにX509CertificateCollectionを追加するためにX509Certificate2コンストラクタを呼び出すと、終了コード-1073740940でWebjobが停止し、そのステータスが "PendingRestart"になります。私たちの推測では、X509Certificate2クラスはwebjobsと互換性がありませんが、この問題にどのように対処するかについてのヒントは見つかりません。

新しいX509Certificate2(sslCertificateBytes、 socketSettings_.CertificatePassword)IS-問題を生成するコード行)

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

は、AzureのWebjobs上のSSL証明書を管理する方法はあります? ありがとうございます

答えて

2

Azure webjobsは、親Webappと同じ環境で実行されます。あなたは、Webアプリケーションに証明書をインポートするには、この記事に従うことができます。一言で言えば

  • は、Azureのに証明書をアップロードします。

    証明書がインストールされます:

  • は、証明書の拇印を設定し、その値を持つWEBSITE_LOAD_CERTIFICATESと呼ばれるアプリの設定を追加します。覚えて

重要なもの(それはあなたのWebアプリケーションにアクセスできるようにします)ワーカープロセスのApplicationPool IDの個人証明書ストアに送信します。だからあなたのWebアプリケーションや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(); 
関連する問題