পাওয়ারশেল ভি 3 ইনভোক-ওয়েবরয়েস্ট এইচটিটিপিএস ত্রুটি


126

পাওয়ারশেল ভি 3 এর ইনভোক-ওয়েবরয়েস্ট এবং ইনভোক-রেস্টমথোড ব্যবহার করে আমি একটি পোস্টে https ওয়েবসাইটে একটি জেসন ফাইল পোস্ট করার জন্য সফলভাবে POST পদ্ধতিটি ব্যবহার করেছি।

আমি যে কমান্ডটি ব্যবহার করছি তা হ'ল

 $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

তবে আমি যখন জিইটি পদ্ধতিটি ব্যবহার করার চেষ্টা করি তখন:

 Invoke-WebRequest -Uri https://IPADDRESS/resource -Credential $cred -certificate $cert -Method GET

নিম্নলিখিত ত্রুটি ফিরে এসেছে

 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

আমি এসএসএল শংসাপত্র উপেক্ষা করার জন্য নিম্নলিখিত কোডটি ব্যবহার করার চেষ্টা করেছি, তবে আমি নিশ্চিত নই যে এটি আসলে কিছু করছে কিনা।

 [System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

এখানে কী ভুল হতে পারে এবং কীভাবে এটি সংশোধন করা যায় সে সম্পর্কে কেউ কি কোনও গাইডেন্স সরবরাহ করতে পারেন?

ধন্যবাদ


আপনি কোনটি ব্যবহার করছেন? Invoke-RestMethodবা Invoke-WebRequest?
svick

ডাকা-WebRequest। ইনভোক-রেস্টমথোডের বিপরীতে অনুরোধ / রেসোসিন শিরোনামগুলি ফেরত দেওয়ার সাথে সাথে আমি এটি ব্যবহার করি। তবে আমি ইনভোক-রেস্টমথোড চেষ্টা করেছি যা একইরকম পরামিতিও গ্রহণ করে।
ফ্লয়েড

এটির মূল্যের জন্য, সার্ভারভ্যালিডেশনক্যালব্যাক জিনিসটি অবশ্যই একটি রেড হেরিং, যেহেতু আপনার যখন কোনও এসএসএল বৈধতা সমস্যা রয়েছে তখন আপনার যে ত্রুটিটি হওয়া উচিত তা বলুন যে: Invoke-WebRequest : The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. আপনি $ ত্রুটি [0] অন্বেষণ করার চেষ্টা করতে পারেন moreঅবর্ধনা.অনুদ্দেশিক ধারণাটি আরও তথ্যের জন্য .. ।
জয়কুল

উত্তর:


179

এই চারপাশের কাজটি আমার জন্য কাজ করেছে: http://connect.microsoft.com/PowerShell/feedback/details/419466/new-webserviceproxy-needs-force-parameter-to-ignore-ssl-erferences

মূলত, আপনার পাওয়ারশিল স্ক্রিপ্টে:

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"

9
দ্রষ্টব্য, এই উত্তরটি সঠিক; তবে, অন্য উত্তরে তৈরি করা পয়েন্টটি ( স্ট্যাকওভারফ্লো.com / a / 25163476 / 68432 )ও বৈধ। আপনি "[সিস্টেম. নেট। সার্ভিস পয়েন্ট ম্যানেজার]: :: সার্ভারের্টিফিকেটভিডিয়েশনক্যালব্যাক = {$ সত্য before" আগে করলে এই সমাধানটি কাজ করবে না।
পল সুয়ার্ট

নীচে আর্থার স্ট্রুটজেনবার্গের উত্তর অনুসারে আপনাকে টাইপ শর্ত চেক যোগ করতে হবে বা টাইপটি ইতিমধ্যে বিদ্যমান রয়েছে বলে আপনি একটি ত্রুটি পেয়ে
যাবেন

এটি উত্পাদনে ব্যবহারের জন্য কি কোনও সুরক্ষা ঝুঁকি রয়েছে?
আমজাদ

13
5 বছর পরে, এটি এখনও পাওয়ারশেল 5.1 (পূর্ণ। নেট ফ্রেমওয়ার্ক) এর সমাধান। পাওয়ারশেল কোরের জন্য -SkipCertificateCheckএখন একটি আছে ।
দুষ্টস্নুবু

এমএস সংযোগটি সরিয়ে নিয়েছে, সেই লিঙ্কটি অবৈধ। অন্য লিঙ্ক আছে?
চিহ্নিত করুন

71

লির উত্তর দুর্দান্ত, তবে আমার কাছে এমন সমস্যাও ছিল যা ওয়েব সার্ভারকে সমর্থন করে prot
নিম্নলিখিত লাইনগুলি যুক্ত করার পরেও আমি https এর মাধ্যমে অনুরোধ পেতে পারি এই উত্তরে যেমন নির্দেশিত হয়েছে https://stackoverflow.com/a/36266735

$AllProtocols = [System.Net.SecurityProtocolType]'Ssl3,Tls,Tls11,Tls12'
[System.Net.ServicePointManager]::SecurityProtocol = $AllProtocols

লির কোড সহ আমার সম্পূর্ণ সমাধান।

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

আপনি কি আরও ভাল সমাধান খুঁজে পেয়েছেন, যদি আপনার কাছে 40 টি স্ক্রিপ্ট থাকে তবে আপনাকে এটি প্রতিটিটিতে যুক্ত করতে হবে ?. দেখে মনে হয় না। BTW, উত্তরের জন্য ধন্যবাদ
Ender

1
লির উত্তর আমার পক্ষে কার্যকর হয়নি। আপনার উল্লেখ করা বিটগুলি যুক্ত করতে হয়েছিল এবং এটি কাজ করেছিল!
প্যাট কে

প্রোটোকল উল্লেখ করে সমস্যার সমাধান করতে সাহায্য করেছে
অ্যালেক্স

1
ধন্যবাদ আপনাকে ধন্যবাদ আপনাকে আমাকে SecurityProtocolবিশ্বব্যাপী স্থির সম্পত্তি প্রদর্শন করার জন্য ধন্যবাদ thank খ্রিস্ট, আমি endpoint does not respondhttps (অন্য সব কাজ করে) এর মাধ্যমে একটি নির্দিষ্ট সার্ভার অ্যাক্সেস করার সময় অস্পষ্ট ত্রুটি সমাধান করার চেষ্টা করে শংসাপত্র, ট্রাস্ট, নেটওয়ার্ক, রুট, অনুমতি এবং অন্যান্য বিষয়গুলির শিটলোড যাচাই করার জন্য DAYS হারিয়েছি মাত্র, কারণ এই গড্যামন পাওয়ারশেল 5.1 এসএসএল 3 , টিএলএস এবং এটি ব্লকস গডড্যাম টিএলএস 11 এবং টিএলএস 12 এর দ্বারা ব্লক করা উচিত god শ্বর আমাকে এই ক্রেপটি কতটা ঘৃণা করে সে স্ক্রিপ্টটি সি # / রুবি / সি ++ তে লিখতে হবে বা অন্য যেটি পাওয়ারশেল নয়
কোয়েটজেলক্যাটল

1
@ স্ট্যানটাস্টিক: আমি মনে করি স্থায়ীভাবে ডিফল্টগুলি পরিবর্তন করা অসম্ভব। আমি মনে করি এটি সার্ভিসপয়েন্ট ম্যানেজার উত্স কোডটিতে হার্ডকোডযুক্ত। আমি যদিও কখনও চেক করিনি, তাই সম্ভবত কিছু উপায় আছে।
কোয়েটজলকোটল

10

আপনি ব্যবহার চেষ্টা করেছেন 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)

সানি, আমি এই কোডটি ব্যবহার করার সময় নিম্নলিখিতটি গ্রহণ করি: "ডাউনলোড স্ট্রিং" কে "1" যুক্তি (গুলি) সহ কল ​​করা ব্যতিক্রম: "রিমোট সার্ভার একটি ত্রুটি ফিরিয়ে দিয়েছে: (406) গ্রহণযোগ্য নয়।" লাইনে: 4 চর: 1 + $ ডাব্লুসিডি.ডাউনলোড স্ট্রিং ($ ইউআরএল) + ~~~~~~~~~~~~~~~~~~~~~~~~ + বিভাগআইনফো: নোটস্পিফিকড: (:) [ ], MethodInvocationException + + FullyQualifiedErrorId: WebException
ফ্লয়েড

406 ব্যবহার করে REST পরিষেবাদির API ডকুমেন্টেশনের উপর ভিত্তি করে "ইঙ্গিত দেয় যে অনুরোধের অন্তর্ভুক্ত থাকা গ্রহণযোগ্য শিরোনাম কোনও XML বা JSON প্রতিক্রিয়া মঞ্জুর করে না"
ফ্লয়েড

এক্সএমএল / জেএসএন প্রতিক্রিয়াগুলিকে অনুমতি না দেওয়া হলে কোন প্রতিক্রিয়ার প্রকারগুলি অনুমোদিত?
সানি চক্রবর্তী

এটি কি কোনও কাস্টম ওয়েব পরিষেবা আপনি ব্যবহার করছেন? REST এপিআইয়ের জন্য কি কোনও প্রকাশ্যে উপলভ্য ডকুমেন্টেশন রয়েছে?
সানি চক্রবর্তী

এটি EM7 নামক একটি টিকিটিং সিস্টেম যা আমি বিশ্বাস করি না যে তাদের কাছে পাবলিক ডক্স রয়েছে। পরিষেবাটি JSON / XML প্রতিক্রিয়া স্বীকার করে না (আমি সিআরএল ব্যবহার করি তবে ঠিক কাজ করে) আমি বিশ্বাস করি যে ত্রুটিটি System.Net.WebClient না?
ফ্লয়েড

9

খাঁটি একটি বিকল্প বাস্তবায়ন (ছাড়া Add-Type) উৎস):

#requires -Version 5
#requires -PSEdition Desktop

class TrustAllCertsPolicy : System.Net.ICertificatePolicy {
    [bool] CheckValidationResult([System.Net.ServicePoint] $a,
                                 [System.Security.Cryptography.X509Certificates.X509Certificate] $b,
                                 [System.Net.WebRequest] $c,
                                 [int] $d) {
        return $true
    }
}
[System.Net.ServicePointManager]::CertificatePolicy = [TrustAllCertsPolicy]::new()

7

নিম্নলিখিত কাজগুলি আমার জন্য কাজ করেছে (এবং এসএসএল শংসাপত্রগুলি / কলব্যাক কার্যকারিতার সাথে ইন্টারেক্ট করার জন্য সর্বশেষ অ-অবজ্ঞাত উপায়গুলি ব্যবহার করে) এবং একই পাওয়ার শেল সেশনের মধ্যে একই কোড একাধিকবার লোড করার চেষ্টা করে না:

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();

এটি নিম্নলিখিত নিবন্ধটি https://d-fens.ch/2013/12/20/nobrainer-ssl-conn ક્શન-error-when-used-powershell/ থেকে অভিযোজিত হয়েছিল


5

আমি দেখতে পেয়েছি যে যখন আমি এসএসএল শংসাপত্রগুলি উপেক্ষা করার জন্য এই কলব্যাক ফাংশনটি ব্যবহার করি [System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

আমি সর্বদা ত্রুটি বার্তা পেয়েছি Invoke-WebRequest : The underlying connection was closed: An unexpected error occurred on a send.যা আপনার ফলাফলগুলির মত শোনাচ্ছে।

আমি এই ফোরাম পোস্টটি পেয়েছি যা আমাকে নীচের ফাংশনে নিয়ে যায়। আমি এটিকে একবার আমার অন্যান্য কোডের আওতায় নিয়ে চলেছি এবং এটি আমার পক্ষে কাজ করে।

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=@'
        namespace Local.ToolkitExtensions.Net.CertificatePolicy
        {
            public class TrustAll : System.Net.ICertificatePolicy
            {
                public bool CheckValidationResult(System.Net.ServicePoint sp,System.Security.Cryptography.X509Certificates.X509Certificate cert, System.Net.WebRequest req, int problem)
                {
                    return true;
                }
            }
        }
'@ 
    $TAResults=$Provider.CompileAssemblyFromSource($Params,$TASource)
    $TAAssembly=$TAResults.CompiledAssembly
    ## We create an instance of TrustAll and attach it to the ServicePointManager
    $TrustAll = $TAAssembly.CreateInstance("Local.ToolkitExtensions.Net.CertificatePolicy.TrustAll")
    [System.Net.ServicePointManager]::CertificatePolicy = $TrustAll
}


1

আমি EM7 ওপেনসোর্স আরএসটি এপিআইতে ডকুমেন্টেশন সন্ধান করার চেষ্টা করেছি। এখনও ভাগ্য নেই।

http://blog.sciencelogic.com/sciencelogic-em7-the-next-generation/05/2011

ওপেনসোর্স আরএসটি এপিআই সম্পর্কে অনেক কথা আছে তবে আসল এপিআই বা কোনও ডকুমেন্টেশনের কোনও লিঙ্ক নেই। আমি অধৈর্য হতে পারে।

আপনি চেষ্টা করতে পারেন এমন কয়েকটি জিনিস এখানে

$a = Invoke-RestMethod -Uri https://IPADDRESS/resource -Credential $cred -certificate $cert 
$a.Results | ConvertFrom-Json

আপনি এপিআই থেকে প্রাপ্ত কলামগুলি ফিল্টার করতে পারবেন কিনা তা দেখার চেষ্টা করুন

$a.Results | ft

অথবা, আপনি এটি ব্যবহার করেও দেখতে পারেন

$b = Invoke-WebRequest -Uri https://IPADDRESS/resource -Credential $cred -certificate $cert 
$b.Content | ConvertFrom-Json

স্টাইল শিরোনাম কার্ল

$b.Headers

আমি টুইটার জেএসওএন এপিআই দিয়ে আইআরএম / আইডাব্লুআর পরীক্ষা করেছি।

$a = Invoke-RestMethod http://search.twitter.com/search.json?q=PowerShell 

আশাকরি এটা সাহায্য করবে.


আপনার সমস্ত সহায়তার জন্য আপনাকে ধন্যবাদ। তবে প্রথম কমান্ড $ এ = ইনভোক-রিস্টমেথোদ (...) হ'ল এটি বর্তমানে আমার পক্ষে কাজ করে না। এইচটিটিপি সাইটের পক্ষে সূক্ষ্মভাবে কাজ করে তবে আপনি যখন এইচটিটিপিএস চালু করেন যা কোন EM7 এটি বর্ণিত ত্রুটিটি ফিরিয়ে দেয়। এটি ইনভোক-রেস্টমথোড এবং ইনভোক-ওয়েবক্রাইস্টের জন্য। আমি কেবল একটি ইনভোক-কমান্ড সিএমডিলেট এবং চলমান কার্ল ব্যবহারের প্রক্রিয়াধীন।
ফ্লয়েড

1

"ডোমেননাম" -স্কিফের্টিফিটচেক চেক-ওয়েব-অনুরোধ করুন

ওয়ান-লাইনার কমান্ড হিসাবে এটি অর্জনের জন্য আপনি -স্কিপ সার্টিফিকেট চেক প্যারামিটারটি ব্যবহার করতে পারেন (এই প্যারামিটারটি কেবলমাত্র উত্সাহ ভিত্তিতে সমর্থিত হয়)


0
  1. এই আদেশটি চালান

নতুন স্ব-সাইন্টিফিকেট-স্পার্টস স্টোরলোকেশন শংসাপত্র: \ লোকালম্যাচাইন \ আমার -ডমনেম {আপনার সাইট-হোস্টনাম}

অ্যাডমিন রাইটস ব্যবহার করে পাওয়ারশেলে , এটি ব্যক্তিগত ডিরেক্টরিতে সমস্ত শংসাপত্র উত্পন্ন করবে

  1. গোপনীয়তা ত্রুটি থেকে মুক্তি পেতে, এই শংসাপত্রগুলি নির্বাচন করুন, ডান ক্লিক করুন → অনুলিপি করুন। এবং বিশ্বস্ত রুট শংসাপত্র কর্তৃপক্ষ / শংসাপত্রগুলিতে পেস্ট করুন।
  2. শেষ পদক্ষেপটি আইআইএসে সঠিক বাঁধাই নির্বাচন করা। আইআইএস ওয়েবসাইটে যান, বাইন্ডিং নির্বাচন করুন, এসএনআই চেকবক্স নির্বাচন করুন এবং প্রতিটি ওয়েবসাইটের জন্য স্বতন্ত্র শংসাপত্রগুলি সেট করুন।

ওয়েবসাইটের হোস্ট-নেম এবং শংসাপত্রের ডিএনএস-নাম ঠিক মেলে কিনা তা নিশ্চিত করুন


0

এই রেজিস্ট্রি সেটিংস। নেট ফ্রেমওয়ার্ক 4+ এবং সেইজন্য পাওয়ারশেলকে প্রভাবিত করে। এগুলি সেট করুন এবং সর্বশেষ টিএলএস ব্যবহার করতে কোনও পাওয়ারশেল সেশন পুনরায় চালু করুন, কোনও রিবুট দরকার নেই।

Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord 

Https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls#schuse স্ট্র crypto দেখুন


এই উত্তরটি দেখার জন্য যে কারও জন্য, আমাদের অভিজ্ঞতা হ'ল এই রেজিস্ট্রি প্যাচটি যথাযথ কার্যকারিতার গ্যারান্টি দেওয়ার জন্য একটি রিবুট প্রয়োজন। .NET অ্যাপ্লিকেশন চালিত উইন্ডোজ বাক্সের মধ্যে একটি টিএলএস 1.2 সংযোগ নিশ্চিত করার চেষ্টা করার সময়, এই রেজিস্ট্রি মানটি জায়গায় ব্যবহার করার জন্য এসএসএল 3 নেটওয়ার্ক ট্রেসের মাধ্যমে দেখানো হয়েছিল, তবে একটি রিবুট করার আগে; টিবিএস ১.২ কেবল একটি রিবুট করার পরে ডাকা হয়েছিল।
ডেভিড ডব্লিউ

-1

আপনি যদি এটিকে প্রশাসক হিসাবে চালনা করেন তবে সেই ত্রুটিটি চলে যাওয়া উচিত

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.