Usando Invoke-WebRequest e Invoke-RestMethod do Powershell v3, usei com êxito o método POST para postar um arquivo json em um site https.
O comando que estou usando é
$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
No entanto, quando tento usar o método GET, como:
Invoke-WebRequest -Uri https://IPADDRESS/resource -Credential $cred -certificate $cert -Method GET
O seguinte erro é retornado
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
Tentei usar o código a seguir para ignorar o certificado SSL, mas não tenho certeza se ele está realmente fazendo alguma coisa.
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
Alguém pode fornecer alguma orientação sobre o que pode estar errado aqui e como corrigi-lo?
obrigado
.net
rest
powershell
https
floyd
fonte
fonte
Invoke-RestMethod
ouInvoke-WebRequest
?Invoke-WebRequest : The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.
Você pode tentar explorar $ Error [0] .Exception.InnerException para obter mais informações .. .Respostas:
Esta solução alternativa funcionou para mim: http://connect.microsoft.com/PowerShell/feedback/details/419466/new-webserviceproxy-needs-force-parameter-to-ignore-ssl-errors
Basicamente, no seu script do PowerShell:
fonte
-SkipCertificateCheck
agora.A resposta de Lee é ótima, mas também tive problemas com os protocolos suportados pelo servidor da web.
Depois de adicionar também as seguintes linhas, eu poderia obter a solicitação https. Conforme indicado nesta resposta https://stackoverflow.com/a/36266735
Minha solução completa com o código de Lee.
fonte
SecurityProtocol
propriedade estática global. Cristo, acabei de perder DAYS ao verificar certificados, relações de confiança, rede, rotas, permissões e muitas outras coisas, tentando resolver umendpoint does not respond
erro vago ao acessar um servidor específico via https (todos os outros funcionam), só porque esse maldito PowerShell 5.1 padrões para SSL3, TLS e isso só BLOCOS MALDITO TLS11 e TLS12 incumprimento por deus o quanto eu odeio essa porcaria que eu deveria ter escrito esse script em C # / ruby / C ++ ou qualquer outra coisa que não seja powershellVocê tentou usar
System.Net.WebClient
?fonte
Uma implementação alternativa em puro PowerShell (sem
Add-Type
dec # fonte):fonte
O seguinte funcionou para mim (e usa os meios não obsoletos mais recentes para interagir com a funcionalidade SSL Certs / retorno de chamada) e não tenta carregar o mesmo código várias vezes na mesma sessão do PowerShell:
Isso foi adaptado do seguinte artigo https://d-fens.ch/2013/12/20/nobrainer-ssl-connection-error-when-using-powershell/
fonte
Descobri que quando usei a função this callback para ignorar certificados SSL
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
Eu sempre recebi a mensagem de erro
Invoke-WebRequest : The underlying connection was closed: An unexpected error occurred on a send.
que soa como os resultados que você está tendo.Encontrei este post no fórum que me levou à função abaixo. Eu corro isso uma vez dentro do escopo do meu outro código e funciona para mim.
fonte
Tentei procurar documentação na API REST EM7 OpenSource. Sem sorte até agora.
http://blog.sciencelogic.com/sciencelogic-em7-the-next-generation/05/2011
Fala-se muito sobre a API REST OpenSource, mas nenhum link para a API real ou para qualquer documentação. Talvez eu estivesse impaciente.
Aqui estão algumas coisas que você pode experimentar
Tente isso para ver se é possível filtrar as colunas que você está recebendo da API
ou você pode tentar usar isso também
Cabeçalhos de estilo de ondulação
Testei o IRM / IWR com a API JSON do twitter.
Espero que isto ajude.
fonte
Você pode usar o parâmetro -SkipCertificateCheck para obter isso como um comando de uma linha (ESTE PARÂMETRO É SOMENTE SUPORTADO NA PSEDIÇÃO PRINCIPAL)
fonte
New-SelfSignedCertificate -certstorelocation cert: \ localmachine \ my -dnsname {your-site-hostname}
no powershell usando direitos de administrador , isso gerará todos os certificados no diretório pessoal
Verifique se o nome do host do site e o certificado dns-name devem corresponder exatamente
fonte
Essas configurações do registro afetam o .NET Framework 4+ e, portanto, o PowerShell. Defina-os e reinicie as sessões do PowerShell para usar o TLS mais recente, sem necessidade de reinicialização.
Consulte https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls#schusestrongcrypto
fonte
Se você executar isso como administrador, esse erro deverá desaparecer
fonte