【发布时间】:2014-12-12 18:38:17
【问题描述】:
有没有人找到一种方法来强制 Powershell TLS 客户端不使用 SNI,或者通过服务器的 SNI 错误继续连接?
我正在尝试制作一个 powershell 脚本,从我们的 DHCP 服务器下载一大串网络,并将其格式化以导入另一个系统。
我可以使用浏览器下载数据 - 观察与 Wireshark 的连接,我看到浏览器启动 TLS 握手,发送 SNI 指示,服务器响应“TLS 警报(级别:警告,描述:无法识别名称) ", 浏览器继续 TLS 连接不受影响,下载成功。
为了调试请求,我通过本地代理(burp 套件,它是一个 Java 应用程序)运行连接,因此我可以看到加密隧道和 HTTP 请求的内容。这导致连接失败并且代理立即返回错误。显然,Java TLS 代码不愿意继续连接浏览器从容应对的 TLS 错误。如果我强制代理不在请求中包含服务器名称标识 (SNI),它会起作用(请参阅下面注释掉的调试代码)。
最后,从混合中删除代理,Powershell 使用的网络代码似乎也不愿意继续过去的错误 - 它发送相同的 SNI 指示符,接收相同的 TLS 错误,然后只是挂起 - 不再有数据包交换到 100 秒过去,然后用 FIN 包关闭连接,Powershells 返回超时错误:
Exception calling "DownloadFile" with "2" argument(s): "The operation has timed out"
我使用的代码是这样的:
$webclient = new-object System.Net.WebClient
#DEBUG for now - send requests through proxy
#$proxy = new-object System.Net.WebProxy
#$proxy.Address = "http://localhost:8080"
#$webclient.proxy = $proxy
# have to do this to ignore invalid certs from proxy
#[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
#Also have to force the JRE running the proxy to not send SNI in the request - invoke as
#java -Djsse.enableSNIExtension=false -jar c:\Users\MarkS\Burp\burpsuite_pro_v1.6.09.jar
#end DEBUG
$server = $(
$input = Read-Host "server to connect to [our-DHCP-server-name]"
if($input) {$input} else {"our-DHCP-server-name"}
)
$current_id = [Environment]::Username
$user_id = $(
$input = Read-Host "user ID to connect as [$current_id]"
if($input) {$input} else {$current_id}
)
$password = Read-Host -AsSecureString 'password to connect with'
$pscreds = new-object System.Management.Automation.PSCredential($user_id,$password)
$webclient.Credentials = new-object System.Net.NetworkCredential($user_id, $pscreds.GetNetworkCredential().Password)
#connect...
$tempfile = [System.IO.Path]::GetTempFileName()
$tempfile
#...and download
#NOTE - don't use XML - server returns badly malformed XML
$url = "https://$server/wapi/v1.2.1/network?_max_results=10000000&_return_type=json-pretty&_return_fields%2B=extattrs"
$webclient.DownloadFile($url, $tempfile)
非常感谢!
【问题讨论】:
标签: powershell ssl sni