При выполнении задачи сценария служб SSIS при доступе к очереди служебной шины Azure возникает ошибка сертификата X.509 - PullRequest
0 голосов
/ 01 июня 2018

У меня есть пакет служб SSIS с задачей сценария, которая помещает сообщение в служебную шину Azure.Пакет служб SSIS работает на MS SQL Server 2014, на виртуальной машине Azure с Windows Server 2012. Это прекрасно работает на моей машине для разработки и на тестируемой виртуальной машине Azure, которой я управляю.Мой клиент установил его в свою производственную виртуальную машину Azure (к которой у меня нет доступа), и теперь он постоянно выдает ошибку:

Сертификат X.509 CN = servicebus.windows.net не являетсяв доверенных людях> магазин.… At Microsoft.ServiceBus.Messaging.MessageSender.OnSend (…

Неисправный код задачи скрипта:

MessagingFactory factory = MessagingFactory.CreateFromConnectionString(connStr);
MessageSender msgSender = factory.CreateMessageSender(SBQueueName);
msgSender.Send(JsonMsg); // throws the error

После прочтения других постов, которые я видел в StackOverflow иФорумы Microsoft, насколько я понимаю, при первом запуске этого кода он должен автоматически загрузить и установить необходимый сертификат. Очевидно, этого не происходит, и я подозреваю, что проблема с конфигурацией в производственной среде моего клиента. Вероятно, либо недостаточные привилегии для NTService \ MsDtsServer120 'Виртуальная учетная запись для службы SSIS, или брандмауэр блокирует загрузку сертификата из центра сертификации Microsoft. Поскольку виртуальная учетная запись была настроена с правами доступа по умолчанию, я предполагаю, что проблема заключается в брандмауэре.вероятные изменения правила брандмауэра, необходимые для загрузки сертификата? Или я ошибаюсь, подозревая, что это проблема с брандмауэром?

Я видел обходные пути, предложенные в других сообщениях StackOverflow, включая 1) changвызывая вызывающий ConnectionMode для HTTP или HTTPS, или 2) вручную устанавливая сертификат на ВМ, но я хотел бы более полно понять проблему и решить ее, не прибегая к этим обходным путям, если это возможно.

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

К сожалению, я не упомянул, что пакет выполнялся скриптом Powershell.Оказывается, пакет служб SSIS наследовал права учетной записи, выполняющей сценарий Powershell, которые были недостаточны для установки сертификата;Выполнение сценария Powershell от имени администратора решило проблему, и необходимый сертификат ( Промежуточные центры сертификации> Microsoft IT LTS CA 5 (выпущенный Baltimore CyberTrust Root) ) правильно установился.Прежде чем я понял это, я также попробовал обходное решение Tom Sun для ручной установки сертификата, и это действительно сработало.

0 голосов
/ 05 июня 2018

Я видел обходные пути, предложенные в других публикациях StackOverflow, включая 1) изменение вызывающего ConnectionMode на HTTP или HTTPS, или 2) ручная установка сертификата на ВМ, но я хотел бы более полно понять проблему и решить ееэто не прибегая к этим временным решениям, если это возможно.

Причина:

Если мы не установим ConnectivityMode заранее, служебная шинаклиент подключится в режиме AutoDetect.Но режим AutoDetect будет использовать режим соединения Tcp.

Поскольку соединение Tcp зашифровано.Таким образом, клиент должен проверить сертификат сервера служебной шины CN=servicebus.windows.net, и информация о цепочке сертификатов возвращается в сообщении приветствия сервера протокола SSL.

Если некоторые из промежуточных сертификатов в цепочке сертификатов не установлены, экземпляру необходимо инициировать дополнительные запросы к серверу CA, чтобы загрузить промежуточный сертификат и установить его.

Когда какой-либо изПри возникновении следующих условий экземпляр не может установить цепочку доверенных сертификатов для сертификата сервера служебной шины, а затем сообщает об ошибке сертификата выше.

  • Между экземпляром и центром сертификации существует network problemсервер, который делает невозможным загрузку сертификата.

  • Экземпляры не могут успешно установить сертификаты, такие как permissions issues.

Решение: Как вы упомянули:

  • мы могли бы изменить вызывающий ConnectionMode на HTTPS

    ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.Https

  • Вручную установка сертификата на ВМ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...