Java -> Flask Https 请求:javax.net.ssl.SSLHandshakeException:PKIX 路径构建失败
Posted
技术标签:
【中文标题】Java -> Flask Https 请求:javax.net.ssl.SSLHandshakeException:PKIX 路径构建失败【英文标题】:Java -> Flask Https Request: javax.net.ssl.SSLHandshakeException: PKIX path building failed 【发布时间】:2021-05-08 12:57:24 【问题描述】:所以我正在尝试向我的 Flask 应用程序发送 HTTPS 请求。以前,它只使用 HTTP 就成功地工作了。现在,我想将其更改为 HTTPS。
但不幸的是它不起作用。在我的 Java IDE 和 Python IDE 中,出现以下错误:
javax.net.ssl.SSLException: 不受支持或无法识别的 SSL 消息(Java 客户端)
代码 400,消息错误请求版本 ("\x1bè\x13\x16)... 和 ", ~ˆòÎ×ý›tYê >ôeïõ?2ŸÏËðÚü$ü^d ‰ô$NªO5~EN4ë=Y8õûb~ïÁ¢˜è) bÀ,À+Ì©À0̨À/ ŸÌª £ ž ¢À $À(À#À' kjg @À.À2--À1À&ÀÀ%-)À" HTTPStatus.BAD_REQUEST*(Flask 服务器端)
我发送请求的代码是:
URL myURL = new URL(requestUrl);
HttpsURLConnection connection = (HttpsURLConnection) myURL.openConnection();
connection.setRequestMethod("GET");
System.out.println(connection.getResponseCode());
...
基本上,我只是将连接对象更改为 Https,并将 URL 字符串修改为使用“https”。它与 HTTP 完美搭配,而现在 HTTPS 则无法使用。
我必须做些什么才能让它与 HTTPS 一起使用?
编辑:在我的 Flask 应用程序中,我将 app.run
更改为还包含参数 ssl_context='adhoc'
。现在我得到一个不同的例外:
javax.net.ssl.SSLHandshakeException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到到所请求目标的有效证书路径
【问题讨论】:
也许您将方案更改为https
,但保留了http
端口?
【参考方案1】:
ssl_context='adhoc'
是正确的方式。
这会生成一个自定义 SSL 证书,您可以通过 https 访问您的 Flask 应用程序。
但是……
由于此证书是自签名的,因此您的客户端(浏览器、curl 或 Java 应用程序)不信任该证书。
这就是您收到错误消息的原因。
请查看以下博客文章以了解更多关于您可以采取的措施:
https://blog.miguelgrinberg.com/post/running-your-flask-application-over-https
【讨论】:
以上是关于Java -> Flask Https 请求:javax.net.ssl.SSLHandshakeException:PKIX 路径构建失败的主要内容,如果未能解决你的问题,请参考以下文章
如何使用客户端上的“requests”模块和服务器上的“flask-restful”验证 https 请求的自签名证书(TLS1.2)