API запросов REST с неподписанным сертификатом с использованием PowerShell - PullRequest
0 голосов
/ 05 июля 2018

Я недавно перешел от использования PowerShell ISE к использованию кода Visual Studio

Когда я запускаю свои сценарии PowerShell из VSC на моем офисном ПК (Win 10 64Bit), ни одно из подключений REST, использующих Invoke-RestMethod через HTTPS, не будет проходить проверку подлинности на серверах, которые используют неподписанный сертификат SSL. При запуске из VSC на моем домашнем ПК (также Win 10 64bit) все работает нормально.

У меня есть функция в PowerShell, которая использует System.Net.Security для работы с неподписанными сертификатами SSL, которая отлично работает, когда я запускаю код как собственный PowerShell или из ISE

Вот как я компенсирую подключение Invoke-RestMethod через сеансы SSL с самозаверяющими сертификатами:

if (-not("dummy" -as [type])) {
  add-type -TypeDefinition @"
  using System;
  using System.Net;
  using System.Net.Security;
  using System.Security.Cryptography.X509Certificates;

  public static class Dummy {
    public static bool ReturnTrue(object sender,
    X509Certificate certificate,
    X509Chain chain,
    SslPolicyErrors sslPolicyErrors) {
        return true;
    }

    public static RemoteCertificateValidationCallback GetDelegate() {
        return new RemoteCertificateValidationCallback(Dummy.ReturnTrue);
    }
  }
"@
}

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = [dummy]::GetDelegate()
[System.Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Я также кодирую имя пользователя + пароль в закодированный в Base64 хеш, который является заголовком для вызова Invoke-RestMethod:

$pair = "${username}:${password}"
$bytes = [System.Text.Encoding]::ASCII.GetBytes($pair)
$base64 = [System.Convert]::ToBase64String($bytes)
$basicAuthValue = "Basic $base64"
$headers = @{ Authorization = $basicAuthValue }

Итак, полная последовательность вызовов:

Invoke-RestMethod -Uri "https://theserver.com/rest/api/whatever" -Method Get -Headers $headers

Сервер, на котором размещается API REST, Confluence с использованием Apache Tomcat, принимает аутентификацию, когда PowerShell запускается из ISE или выполняется напрямую, но возвращает ответ, что соединение не аутентифицировано, если я пытаюсь запустить его из внутри VSC, но только на ПК в офисе, а не дома. Я подозреваю, что проблема с сертификатом безопасности или взаимодействие с политикой.

1 Ответ

0 голосов
/ 09 июля 2018

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

В конце концов, это был не VSC; только я не прилежна.

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