загрузка веб-страницы с powershell с использованием сертификата x.509 - PullRequest
0 голосов
/ 24 января 2020

У меня проблема с PowerShell при Windows 10 при попытке загрузить файл с сайта, который использует сертификат X.509 для аутентификации клиента. У меня установлен этот сертификат в моем хранилище сертификатов в IE, и я также экспортировал файл PFX. Вот что я попробовал:

  • [Net .ServicePointManager] :: SecurityProtocol = [Net .SecurityProtocolType] :: ssl3, а также tls12
  • при попытке получить сертификат с помощью системы .Security.Cryptography.X509Certificates.X509Certificates2
  • пытается установить учетные данные через Get-Credential и затем передает его

Я использовал команду Invoke-WebRequest так же, как и System. Net .WebClient пытается заставить это работать. Я получаю следующее сообщение об ошибке:

PS P:\PSScripts> P:\PSScripts\DownloadSslHtml.ps1
VERBOSE: GET https://somewebsite.com/GetReports.do?reportTypeId=1234
with 0-byte payload
Invoke-WebRequest : The request was aborted: Could not create SSL/TLS secure channel.
At P:\PSScripts\DownloadSslHtml.ps1:20 char:1
+ Invoke-WebRequest -Uri $url -UserAgent ([Microsoft.PowerShell.Command ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke- 
WebRequest], WebException + FullyQualifiedErrorId : 
WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

Сейчас я видел много людей с этой ошибкой «SSL / TLS безопасный канал», и они исправили ее, указав метод шифрования как TLS12 или SSL3, ни один из которых не работает для меня. Я запутался, как поступить. Какие-нибудь мысли? Сайт использует TLS1.2 AES с 256-битным шифрованием ECDH 256-битный обмен.

РЕДАКТИРОВАТЬ: Вот мой код PowerShell:

$url = "https://somewebsite.com/GetReports.do?reportTypeId=1234"
$outputFile = "P:/DownloadedData/file.html"
$PFXPath = "P:/Properties/Config/mycert.pfx"
$PFXPassword = "cert_password"

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::tls12
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cert.Import($PFXPath,$PFXPassword,'DefaultKeySet')
Invoke-WebRequest -Uri $url -UserAgent ([Microsoft.PowerShell.Commands.PSUserAgent]::InternetExplorer) -Certificate $cert -OutFile $outputFile -Verbose

1 Ответ

0 голосов
/ 24 января 2020

Я изменил эту строку:

$cert.Import($PFXPath,$PFXPassword,'DefaultKeySet')

на эту:

$cert.Import($PFXPath,$PFXPassword,'UserKeySet')

И теперь это работает!

...