2016-04-06 172 views
4

この質問は尋ねられ、回答されたようですが、これまで私が見つけたすべての解決策は役に立ちません。使用情報を取得するためにREST APIを実行するPowerShellスクリプトを作成しています。私のスクリプトはただちにサーバーと通信しようとしています。テストのために、私は非常に単純なコマンドをやってる:Invoke-RestMethod - 自己署名付き証明書を無視する

Invoke-RestMethod 'https://server:4443/login' 

それは、このエラーを返します。

Invoke-RestMethod : The underlying connection was closed: An unexpected error occurred on a send. 

私は同じコマンドを実行しますが、URLのgoogle.comで、私は有効なを得ることができます私はコマンドが一般的に話していることを知っています。

サーバー上でcurl同等の機能を実行すると、正常に動作します。ここでcurlコマンドの詳細出力の抜粋です:

* SSLv3, TLS handshake, Client hello (1): 
* SSLv3, TLS handshake, Server hello (2): 
* SSLv3, TLS handshake, CERT (11): 
* SSLv3, TLS handshake, Server key exchange (12): 
* SSLv3, TLS handshake, Server finished (14): 
* SSLv3, TLS handshake, Client key exchange (16): 
* SSLv3, TLS change cipher, Client hello (1): 
* SSLv3, TLS handshake, Finished (20): 
* SSLv3, TLS change cipher, Client hello (1): 
* SSLv3, TLS handshake, Finished (20): 
* SSL connection using TLSv1.0/DHE-RSA-AES256-SHA 
* Server certificate: 
*  subject: CN=localhost 
*  start date: 2016-03-22 21:48:57 GMT 
*  expire date: 2026-03-20 21:48:57 GMT 
*  issuer: CN=localhost 
*  SSL certificate verify result: self signed certificate (18), continuing anyway. 

私はこれだけはかなり一般的なエラーPowerShellのリターンを検索するに基づいて、自己署名証明書の問題であると仮定しています。

私が試してみた:

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

および他の同様の方法(複雑な機能を)運と証明書の問題を無視支援します。

私はPowerShell 5を使用しています。

私はPowerShellコードでまともですが、これは初めてInvoke-RestMethodを試しているので、何か不足している可能性があります。どんな洞察にも感謝します。私は同じ問題に見てきた

+0

ウェブサーバがauth( '-Credential')を必要とする場合は、あなたの認証情報が失われるかもしれません。あるいは、 '-Method'パラメータ' post'または 'get'を指定する必要があります。あなたのサーバーが期待しているものがわからないのかどうかは分かりません。 –

+0

完全な情報を前もって提供していないことをお詫び申し上げます。ヘッダーを介して資格情報を渡します。私は明示的にメソッドを呼び出そうとしました。 – firestarter247

答えて

2

、私が見つけた最高のリソースは、このブログの記事だった:

http://huddledmasses.org/blog/validating-self-signed-certificates-properly-from-powershell/

+0

それはうまくいった。ありがとうございました! – firestarter247

+0

あなたが提供したリンクの説明は非常に役に立ちました。私は手動で '[System.Net.ServicePointManager :: ServerCertificateValidationCallback'を修正する方法を使用しようとすると"予期しないエラーが発生しました "というエラーが表示されていました。そのコールバックを通じて真実を返すように働いていたはずだったので、イライラしました。 – petrsnd

0

An application can set the ServerCertificateValidationCallback property to a method to use for custom validation by the client of the server certificate.

出典:https://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.servercertificatevalidationcallback(v=vs.110).aspx

はちょうどこれを追加bevorあなたInvoke-RestMethodInvoke-WebMethod

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

これは実際には機能しません。あなたは単に "送信時に予期しないエラーが発生しました。"Invoke-RestMethodまたはInvoke-WebRequestを呼び出すと、@Tav。 – petrsnd

+0

のリンクが表示されます。次に、別の問題があります。ソフトウェアのフィドラーを起動し、この要求を監視します。 –

1

これは、invoke-restmethod/webrequestを使用して、それ以降のバージョンのpowershellでも動作します。ハンドラをネイティブとして実装することによって、ランスペースの必要性を回避します。net:

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

関連する問題