3

クライアント証明書を使用してHTTPS経由でWebコンテンツをチェックする簡単な方法を見つけようとしています。クライアント証明書が定義されているVBScriptがあり、サーバー証明書をスキップし、検索対象を定義しています(文字列「実行中」)。私のポイントは、スクリプトを PowerShell に書き直すことです。

VBSコードは次のとおりです。

device = "10.10.10.10"
link = "5001/test"
Set Http = CreateObject("WinHttp.WinHttpRequest.5.1")
Http.SetClientCertificate "LOCAL_MACHINE\MY\test"
Http.Option(4) = 256 + 512 + 4096 + 8192 
Http.Open "GET", "https://" & device & ":" & link, false
Http.Send
output = Http.ResponseText
If InStr(1,output,"running") Then
wscript.echo "OK"
Else
wscript.echo "Error"
End If
Set Http = Nothing

HTTP Web コンテンツを取得するための Powershell 構文は次のとおりです (https ではありません)。

$page = (New-Object System.Net.WebClient).DownloadString("http://10.10.10.10:5001/test")
"$page"

.CRT ファイルを使用して HTTPS コンテンツを取得するための Powershell 構文を次に示します (CERTSTORE からではありません)。

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate2]::CreateFromCertFile("C:\Cert\test.crt")
$url = "https://10.10.10.10:5001/test"
$web = [System.Net.WebRequest]::Create($url)
$web.ClientCertificates.Add($Cert)

これが私の最新のWebコンテンツを取得する試みです。失敗。

#ignore untrusted certificate
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
#load my client certificate defined by thumbprint
$cert = Get-Childitem cert:\LocalMachine\My\5AA55B7B8D99
#get web contetn
$web = [System.Net.WebRequest]::Create($url)
#use my client certificate
$web.ClientCertificates.Add($Cert)

何か案は ?よろしくお願いします

4

6 に答える 6

7

これは私のために働いた:

Invoke-RestMethod https://10.10.10.10:5001/test -CertificateThumbprint XXXXXXXXXXXXXXXX 
于 2016-02-03T08:39:32.633 に答える
1

PRTG用のクライアント証明書対応センサーを作成しようとしたときに、これがうまくいきました。タイムアウト値を変更したい場合があります。また、何らかの理由でサイトにアクセスできない場合に備えて、例外をトラップする必要があります。

$CertNumber = 証明書の拇印。

$CheckURL = ロードする URL。

証明書の読み込みおよび読み取りサイト

#*************************************
#********CERTIFICATE LOADING**********
#*************************************

# LOAD CERTIFICATE FROM STORE
$Certificate = Get-ChildItem -Path Cert:\LocalMachine\My\$CertNumber
# CREATE WEB REQUEST
$req = [system.Net.HttpWebRequest]::Create($checkURL)
# ADD CERTS TO WEB REQUEST
$req.ClientCertificates.AddRange($Certificate)

#*************************************
#***********READING SITE**************
#*************************************

#SET TIMEOUT 
$req.Timeout=10000
# GET WEB RESPONSE
$res = $req.GetResponse()
# GET DATA FROM RESPONSE
$ResponseStream = $res.GetResponseStream()
# Create a stream reader and read the stream returning the string value.
$StreamReader = New-Object System.IO.StreamReader -ArgumentList $ResponseStream
# BUILD STRING FROM RESPONSE
$strHtml = $StreamReader.ReadToEnd()
于 2016-07-21T02:49:59.740 に答える
-1

あなたはこれをテストすることはできません

$device = "10.10.10.10"
$link = "5001/test"
$Http = New-Object 'WinHttp.WinHttpRequest.5.1'
$Http.SetClientCertificate( "LOCAL_MACHINE\MY\test" )
$Http.Option(256 + 512 + 4096 + 8192) # or $Http.Option(4)
$Http.Open("GET", "https://" + $device + ":" + $link, $false)
Http.Send()
$output = Http.ResponseText
于 2012-10-08T13:47:50.313 に答える