Utilizando Invoke-WebRequest e Invoke-RestMethod de Powershell v3, he utilizado con éxito el método POST para publicar un archivo json en un sitio web https.
El comando que estoy usando es
$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
Sin embargo, cuando intento usar el método GET como:
Invoke-WebRequest -Uri https://IPADDRESS/resource -Credential $cred -certificate $cert -Method GET
Se devuelve el siguiente error
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
Intenté usar el siguiente código para ignorar el certificado SSL, pero no estoy seguro de si realmente está haciendo algo.
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
¿Alguien puede proporcionar alguna guía sobre lo que podría estar mal aquí y cómo solucionarlo?
Gracias
.net
rest
powershell
https
Floyd
fuente
fuente
Invoke-RestMethod
oInvoke-WebRequest
?Invoke-WebRequest : The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.
intentar explorar $ Error [0] .Exception.InnerException para obtener más información. .Respuestas:
Esta solución me funcionó: http://connect.microsoft.com/PowerShell/feedback/details/419466/new-webserviceproxy-needs-force-parameter-to-ignore-ssl-errors
Básicamente, en su script de PowerShell:
fuente
-SkipCertificateCheck
ahora.La respuesta de Lee es excelente, pero también tuve problemas con los protocolos que admitía el servidor web.
Después de agregar también las siguientes líneas, pude obtener la solicitud https. Como se señaló en esta respuesta https://stackoverflow.com/a/36266735
Mi solución completa con el código de Lee.
fuente
SecurityProtocol
propiedad estática global. Cristo, acabo de perder DÍAS al verificar certificados, fideicomisos, redes, rutas, permisos y un montón de otras cosas que intentan resolverendpoint does not respond
errores vagos al acceder a un servidor específico a través de https (todos los demás funcionan), solo porque ese maldito PowerShell 5.1 por defecto es SSL3, TLS y SOLO BLOQUEA DIOSA TLS11 y TLS12 POR DEFECTO Dios, cuánto odio esta basura, debería haber escrito esa secuencia de comandos en C # / Ruby / C ++, o cualquier otra cosa que no sea powershell¿Intentaste usar
System.Net.WebClient
?fuente
Una implementación alternativa en puro potencia Shell(sin
Add-Type
deC# fuente):fuente
Lo siguiente funcionó para mí (y utiliza los últimos medios no obsoletos para interactuar con la funcionalidad SSL Certs / callback), y no intenta cargar el mismo código varias veces dentro de la misma sesión de PowerShell:
Esto fue adaptado del siguiente artículo https://d-fens.ch/2013/12/20/nobrainer-ssl-connection-error-when-using-powershell/
fuente
Descubrí que cuando utilicé esta función de devolución de llamada para ignorar los certificados SSL
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
Siempre recibí el mensaje de error
Invoke-WebRequest : The underlying connection was closed: An unexpected error occurred on a send.
que suena como los resultados que está teniendo.Encontré esta publicación en el foro que me lleva a la función a continuación. Ejecuté esto una vez dentro del alcance de mi otro código y funciona para mí.
fuente
Intenté buscar documentación en la API REST OpenSource de EM7. Sin suerte hasta ahora.
http://blog.sciencelogic.com/sciencelogic-em7-the-next-generation/05/2011
Se habla mucho sobre OpenSource REST API, pero no hay enlace a la API real ni a ninguna documentación. Quizás estaba impaciente.
Aquí hay algunas cosas que puedes probar
Pruebe esto para ver si puede filtrar las columnas que obtiene de la API
o puedes intentar usar esto también
Encabezados de estilo rizo
Probé el IRM / IWR con la API JSON de Twitter.
Espero que esto ayude.
fuente
Puede usar el parámetro -SkipCertificateCheck para lograr esto como un comando de una línea (ESTE PARÁMETRO SOLO SE APOYA EN LA PSEDICIÓN CORE)
fuente
New-SelfSignedCertificate -certstorelocation cert: \ localmachine \ my -dnsname {your-site-hostname}
en powershell con derechos de administrador , esto generará todos los certificados en el directorio personal
Asegúrese de que el nombre de host del sitio web y el nombre DNS del certificado deben coincidir exactamente
fuente
Estas configuraciones de registro afectan a .NET Framework 4+ y, por lo tanto, a PowerShell. Configúrelos y reinicie las sesiones de PowerShell para usar el último TLS, no es necesario reiniciar.
Ver https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls#schusestrongcrypto
fuente
Si ejecuta esto como administrador, ese error debería desaparecer
fuente