Câu hỏi Lỗi Powershell v3 Invoke-WebRequest HTTPS
Sử dụng Invoke-WebRequest của Powershell v3 và Invoke-RestMethod Tôi đã sử dụng thành công phương thức POST để đăng một tệp json lên một trang web https.
Lệnh tôi đang sử dụng là
$cert=New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("cert.crt")
Invoke-WebRequest -Uri https://IPADDRESS/resource -Credential $cred -certificate $cert -Body $json -ContentType application/json -Method POST
Tuy nhiên, khi tôi cố gắng sử dụng phương thức GET như:
Invoke-WebRequest -Uri https://IPADDRESS/resource -Credential $cred -certificate $cert -Method GET
Lỗi sau được trả về
Invoke-RestMethod : The underlying connection was closed: An unexpected error occurred on a send.
At line:8 char:11
+ $output = Invoke-RestMethod -Uri https://IPADDRESS/resource -Credential $cred
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
Tôi đã cố gắng sử dụng mã sau đây để bỏ qua SSL cert, nhưng tôi không chắc chắn nếu nó thực sự làm bất cứ điều gì.
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
Ai đó có thể cung cấp một số hướng dẫn về những gì có thể đi sai ở đây và làm thế nào để sửa chữa nó?
Cảm ơn
76
2017-07-27 23:39
gốc
Các câu trả lời:
Điều này làm việc xung quanh làm việc cho tôi:
http://connect.microsoft.com/PowerShell/feedback/details/419466/new-webserviceproxy-needs-force-parameter-to-ignore-ssl-errors
Về cơ bản, trong kịch bản PowerShell của bạn:
add-type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
$result = Invoke-WebRequest -Uri "https://IpAddress/resource"
120
2018-04-05 19:20
Câu trả lời của Lee rất tuyệt, nhưng tôi cũng gặp vấn đề với giao thức mà máy chủ web hỗ trợ.
Sau khi thêm các dòng sau, tôi có thể nhận được yêu cầu https thông qua. Như đã chỉ ra trong câu trả lời này https://stackoverflow.com/a/36266735
$AllProtocols = [System.Net.SecurityProtocolType]'Ssl3,Tls,Tls11,Tls12'
[System.Net.ServicePointManager]::SecurityProtocol = $AllProtocols
Giải pháp đầy đủ của tôi với mã của Lee.
add-type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
"@
$AllProtocols = [System.Net.SecurityProtocolType]'Ssl3,Tls,Tls11,Tls12'
[System.Net.ServicePointManager]::SecurityProtocol = $AllProtocols
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
32
2017-09-16 13:43
Bạn đã thử sử dụng chưa System.Net.WebClient
?
$url = 'https://IPADDRESS/resource'
$wc = New-Object System.Net.WebClient
$wc.Credentials = New-Object System.Net.NetworkCredential("username","password")
$wc.DownloadString($url)
8
2017-07-31 12:51
Tôi thấy rằng khi tôi sử dụng chức năng gọi lại này để bỏ qua chứng chỉ SSL [System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
Tôi luôn nhận được thông báo lỗi Invoke-WebRequest : The underlying connection was closed: An unexpected error occurred on a send.
có vẻ như kết quả bạn đang có.
tôi đã tìm thấy cái này bài đăng trên diễn đàn dẫn tôi đến hàm dưới đây. Tôi chạy điều này một lần bên trong phạm vi của mã khác của tôi và nó hoạt động cho tôi.
function Ignore-SSLCertificates
{
$ Provider = New-Object Microsoft.CSharp.CSharpCodeProvider
$ Compiler = $ Provider.CreateCompiler ()
$ Params = New-Object System.CodeDom.Compiler.CompilerParameters
$ Params.GenerateExecutable = $ false
$ Params.GenerateInMemory = $ true
$ Params.IncludeDebugInformation = $ false
$ Params.ReferencedAssemblies.Add ("System.DLL")> $ null
$ TASource = @ '
không gian tên Local.ToolkitExtensions.Net.CertificatePolicy
{
lớp công khai TrustAll: System.Net.ICertificatePolicy
{
public bool CheckValidationResult (System.Net.ServicePoint sp, System.Security.Cryptography.X509Certificates.X509Certificate cert, System.Net.WebRequest req, int problem)
{
trả lại đúng;
}
}
}
'@
$ TAResults = $ Provider.CompileAssemblyFromSource ($ Params, $ TASource)
$ TAAssembly = $ TAResults.CompiledAssembly
## Chúng ta tạo một thể hiện của TrustAll và đính kèm nó vào ServicePointManager
$ TrustAll = $ TAAssembly.CreateInstance ("Local.ToolkitExtensions.Net.CertificatePolicy.TrustAll")
[System.Net.ServicePointManager] :: CertificatePolicy = $ TrustAll
}
4
2018-03-26 00:50
Sau đây đã làm việc cho tôi (và sử dụng các phương tiện không được sử dụng mới nhất để tương tác với chức năng SSL Certs / callback) và không cố tải cùng một mã nhiều lần trong cùng một phiên powerhell:
if (-not ([System.Management.Automation.PSTypeName]'ServerCertificateValidationCallback').Type)
{
$certCallback=@"
using System;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
public class ServerCertificateValidationCallback
{
public static void Ignore()
{
if(ServicePointManager.ServerCertificateValidationCallback ==null)
{
ServicePointManager.ServerCertificateValidationCallback +=
delegate
(
Object obj,
X509Certificate certificate,
X509Chain chain,
SslPolicyErrors errors
)
{
return true;
};
}
}
}
"@
Add-Type $certCallback
}
[ServerCertificateValidationCallback]::Ignore();
Điều này đã được điều chỉnh từ bài viết sau
https://d-fens.ch/2013/12/20/nobrainer-ssl-connection-error-when-using-powershell/
4
2017-08-02 19:33
Tôi đã thử tìm kiếm tài liệu trên API REST của EM7 OpenSource. Không may mắn cho đến nay.
http://blog.sciencelogic.com/sciencelogic-em7-the-next-generation/05/2011
Có rất nhiều cuộc nói chuyện về API REST nguồn mở, nhưng không có liên kết đến API thực tế hoặc bất kỳ tài liệu nào.
Có lẽ tôi đã thiếu kiên nhẫn.
Dưới đây là một vài điều bạn có thể thử
$a = Invoke-RestMethod -Uri https://IPADDRESS/resource -Credential $cred -certificate $cert
$a.Results | ConvertFrom-Json
Hãy thử điều này để xem liệu bạn có thể lọc ra các cột mà bạn đang nhận được từ API hay không
$a.Results | ft
hoặc, bạn có thể thử sử dụng nó
$b = Invoke-WebRequest -Uri https://IPADDRESS/resource -Credential $cred -certificate $cert
$b.Content | ConvertFrom-Json
Đầu đề kiểu Curl
$b.Headers
Tôi đã thử nghiệm IRM / IWR với api JSON twitter.
$a = Invoke-RestMethod http://search.twitter.com/search.json?q=PowerShell
Hi vọng điêu nay co ich.
1
2017-08-01 03:21
- Chạy lệnh này
New-SelfSignedCertificate -certstorelocation cert: \ localmachine \ my -dnsname {your-site-hostname} của bạn
trong PowerShell sử dụng quyền quản trị, Điều này sẽ tạo tất cả các chứng chỉ trong thư mục Cá nhân
- Để loại bỏ Lỗi bảo mật, hãy chọn các chứng chỉ này, nhấp chuột phải → Sao chép. Và dán vào Trusted Root Certification Authority / Certificates.
- Bước cuối cùng là chọn đúng các ràng buộc trong IIS. Truy cập trang web IIS, chọn Bindings, chọn SNI checkbox và thiết lập các chứng chỉ riêng cho từng trang web.
Đảm bảo tên máy chủ lưu trữ trang web và chứng chỉ dns-name phải khớp chính xác
0
2018-05-26 14:37
Nếu bạn chạy quản trị viên này, lỗi đó sẽ biến mất
0
2018-06-21 17:08