如何在PowerShell的FtpWebRequest中永久接受证书
解决PowerShell中FTP over SSL证书接受提示问题
我来帮你搞定这个证书弹窗的问题!在PowerShell里,你可以直接复用C#中[System.Net.ServicePointManager]::ServerCertificateValidationCallback的解决方案,只需要用PowerShell脚本块来实现回调逻辑就好。
修改后的完整代码
function Create-FtpDirectory { param( [Parameter(Mandatory=$true)] [string] $sourceuri, [Parameter(Mandatory=$true)] [string] $username, [Parameter(Mandatory=$true)] [string] $password ) # 设置证书验证回调,自动接受所有证书(仅建议测试环境使用) [System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true } if ($sourceUri -match '\\$|\\\w+$') { throw 'sourceuri should end with a file name' } $ftprequest = [System.Net.FtpWebRequest]::Create($sourceuri); Write-Information -MessageData "Create folder to store backup (Get-FolderName -Path $global:backupFolder)" $ftprequest.Method = [System.Net.WebRequestMethods+Ftp]::MakeDirectory $ftprequest.UseBinary = $true $ftprequest.Credentials = New-Object System.Net.NetworkCredential($username,$password) $ftprequest.EnableSsl = $true $response = $ftprequest.GetResponse(); Write-Host "Folder created successfully, status $response.StatusDescription" $response.Close(); # 可选:重置回调为默认值,避免影响其他网络请求的安全性 [System.Net.ServicePointManager]::ServerCertificateValidationCallback = $null }
关键说明
自动接受证书的逻辑:
脚本块{ $true }会让PowerShell自动接受所有服务器返回的证书,直接跳过证书验证弹窗。但要注意:这种方式会完全绕过证书安全性检查,只适合你完全信任的测试环境。生产环境的安全验证方式:
如果是生产环境,你应该在回调中添加具体的证书验证逻辑,比如检查证书的哈希值、颁发机构等,确保连接的服务器是合法的。示例如下:[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { param($sender, $certificate, $chain, $sslPolicyErrors) # 替换为你的目标服务器证书的哈希值(可通过证书查看器获取) $trustedCertHash = "A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D6E7F8A9B0" # 验证证书哈希是否匹配,同时忽略可接受的错误(比如自签名证书的链错误) return ($certificate.GetCertHashString() -eq $trustedCertHash) -or ($sslPolicyErrors -eq [System.Net.Security.SslPolicyErrors]::RemoteCertificateChainErrors) }这里的回调参数分别是:
$sender:发起请求的对象(这里是FtpWebRequest)$certificate:服务器返回的SSL证书$chain:证书链信息$sslPolicyErrors:验证过程中遇到的错误
回调的作用范围:
如果你把回调设置放在函数内部,只会影响当前函数的请求;如果放在函数外部,会对后续所有HTTPS/FTP over SSL请求生效。使用完毕后建议重置为$null,避免影响其他请求的安全验证。
内容的提问来源于stack exchange,提问作者Toan Lu
相关产品推荐
相关产品推荐

