Member 11240136 Ответов: 1

Как управлять SSL-сертификатами в azure webjobs (x509certificate2)


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

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


Что я уже пробовал:

Мы ищем ответ в интернете без какого-либо результата.

1 Ответов

Рейтинг:
1

Allan Xu

В этой статье объясняется, как это сделать:


[^]