Tôi đang cố gắng liên lạc với một dịch vụ trên powerhell nhưng tôi thất bại thảm hại. Tôi nghi ngờ đó là giấy chứng nhận và tôi đã googled cho câu trả lời và tìm thấy hai lựa chọn, không ai trong số đó làm việc cho tôi. Tôi cũng đã cố gắng kết hợp cả hai không thành công.Powershell Invoke-RestMethod qua HTTPS
Lựa chọn 1:
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
$urlJSON = "https://internal.ad.local/path/api_jsonrpc.php"
#Create authentication JSON object using ConvertTo-JSON
$objAuth = (New-Object PSObject | Add-Member -PassThru NoteProperty jsonrpc '2.0' |
Add-Member -PassThru NoteProperty method 'user.authenticate' |
Add-Member -PassThru NoteProperty params @{user="user";password="password"} |
Add-Member -PassThru NoteProperty id '2') | ConvertTo-Json
Invoke-RestMethod -Uri $urlJSON -body $objAuth -method "Post"
Phương án 2:
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
$urlJSON = "https://internal.ad.local/path/api_jsonrpc.php"
#Create authentication JSON object using ConvertTo-JSON
$objAuth = (New-Object PSObject | Add-Member -PassThru NoteProperty jsonrpc '2.0' |
Add-Member -PassThru NoteProperty method 'user.authenticate' |
Add-Member -PassThru NoteProperty params @{user="user";password="password"} |
Add-Member -PassThru NoteProperty id '2') | ConvertTo-Json
Invoke-RestMethod -Uri $urlJSON -body $objAuth -method "Post"
Dưới đây là thông báo lỗi:
Invoke-RestMethod : The underlying connection was closed: An unexpected error occurred on a send.
At C:\Users\user\AppData\Local\Temp\46eaa6f7-62a0-4c10-88d1-79212d652bc9.ps1:24 char:1
+ Invoke-RestMethod -Uri $urlJSON -body $objAuth -method "Post"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
tôi có thể thêm vào:
- lướt trực tiếp đến dịch vụ làm việc với một trình duyệt web
- Tôi đã cố gắng mở lòng với HTTP là tốt, và điều đó đã làm việc
- Giấy chứng nhận sử dụng bởi các dịch vụ là tự ký nhưng đáng tin cậy bởi máy của tôi qua một root certficate (không có cảnh báo nào là vấn đề trong IE hoặc Chrome)
- Tôi đã thực hiện chụp mạng và đảm bảo rằng một gói thực sự đến máy chủ.
Bất kỳ đề xuất nào được đánh giá cao!
Kind regards, Patrik
bài cập nhật như đề xuất của ông Tree dưới đây:
Name : lambda_method
DeclaringType :
ReflectedType :
Module : RefEmit_InMemoryManifestModule
MethodHandle :
Attributes : PrivateScope, Public, Static
CallingConvention : Standard
IsSecurityCritical : False
IsSecuritySafeCritical : False
IsSecurityTransparent : True
ReturnType : System.Boolean
ReturnParameter :
ReturnTypeCustomAttributes : System.Reflection.Emit.DynamicMethod+RTDynamicMethod+EmptyCAHolder
MemberType : Method
MethodImplementationFlags : NoInlining
IsGenericMethodDefinition : False
ContainsGenericParameters : False
IsGenericMethod : False
IsPublic : True
IsPrivate : False
IsFamily : False
IsAssembly : False
IsFamilyAndAssembly : False
IsFamilyOrAssembly : False
IsStatic : True
IsFinal : False
IsVirtual : False
IsHideBySig : False
IsAbstract : False
IsSpecialName : False
IsConstructor : False
CustomAttributes :
MetadataToken :
Cập nhật 2 dựa trên một lời nhận xét của ông Tree:
Invoke-RestMethod : The underlying connection was closed: An unexpected error occurred on a send.
At C:\Users\user\AppData\Local\Temp\ff47910e-fd8e-4be8-9241-99322144976a.ps1:13 char:1
+ Invoke-RestMethod -Uri $urlJSON -body $objAuth -method "Post"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
Hãy thử '{$ true} -as [Net.Security.RemoteCertificateValidationCallback]' trong ví dụ thứ hai ... Bạn có cài đặt CA trong cửa hàng LocalMachine hoặc CurrentUser không? –
Cảm ơn sự giúp đỡ của bạn. CA được cài đặt trong cả tài khoản CurrentUser và Computer của tôi trong Trusted Root Certification. Sẽ thêm kết quả của lệnh bạn đã đăng trong bài đăng của tôi ở trên. – PatrikJ
(không chắc chắn những gì để tìm kiếm ở đó) – PatrikJ