感谢@ycr(:-)),我向前迈出了一些步骤,但当我试图到达一个在客户端需要SSL的端点时,仍然会遇到SSL错误(即p12证书或.crt/.key等同物)。我按照ycr的建议遵循了this。现在,当我从Postman通过wso mi(Integration Studio中的嵌入示例)调用端点时,它会抛出:***“主机验证主机名失败”,异常指:org.apache.synapse.transport.http.conn.ClientSSLSetupHandler.verify(ClientSSLSetupHandler.java:182)***.
现在,正如我在上一篇文章中所说,我可以通过Python脚本成功连接端点(https://37.186.199.242:6443/web-app):
cert = path\cert.crt
key = path\cert.key
headers = {'Content-type': 'application/json', 'Accept': 'application/json, text/plain, */*'}
data = json.dumps(None)
response = requests.post("https://37.186.199.242:6443/web-app", data=data, headers=headers, cert=(cert,key), verify=False)
这给了我相同的响应查询的网址由chrome与安装cert.p12证书。
但是,当我使用 requests.postverify=True尝试www.example.com时,我得到了以下Python异常:requests.exceptions.SSLError: HTTPSConnectionPool(host='37.186.199.242', port=6443): Max retries exceeded with url: /web-app (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1129)')))
这听起来与ClientSSLSetupHandler抛出的SSLException非常相似。因此,我想,我是否应该通过禁用主机验证来在wso mi中复制相同的行为?查看java ClientSSLSetupHandler.java Class源代码,这是通过设置HostnameVerifier = AllowAll实现的。
对于inline code:/** * The ALLOW_ALL HostnameVerifier essentially turns hostname verification * off. This implementation is a no-op, and never throws the SSLException. */
有前途!但如何设置呢?
我发了几个帖子。我能找到的最佳猜测是here,建议在axis2.xml中包含以下内容。
<transportSender name="https" class="org.apache.synapse.transport.passthru.PassThroughHttpSSLSender">
<!--...-->
<!--supports Strict|AllowAll|DefaultAndLocalhost or the default if none specified -->
<parameter name="HostnameVerifier">AllowAll</parameter>
<!--supports Strict|AllowAll|DefaultAndLocalhost or the default if none specified -->
</transportSender>
1.不确定是否应该将transportSender类属性调整为target class=“org.apache.synapse.transport.http.conn.ClientSSLSetupHandler”,或者最终调整为其他超类或抽象类。
1.看起来axis2.xml在我启动它的任何时候都被MI引擎重写。所以,一定还有别的办法!有什么建议吗?先谢谢你了
**p.s.**因为我对wso越来越感兴趣,但它是一个相当复杂的世界,有没有一个文件可以让我学习解释(对于像我这样的傻瓜:-)每个部分是如何连接的?我的意思是:碳,突触,axis 2,世界标准化组织应用管理器,世界标准化组织微集成器及其 Jmeter 板,esb...
2条答案
按热度按时间yqlxgs2m1#
禁用主机名验证不是一个好做法。理想情况下,您应该使用适当的域名创建适当的证书,并使用域名而不是IP访问服务。如果要禁用主机名验证,请尝试将以下内容添加到
deployment.toml
更新
因为你有一个公共IP,我刚刚检查了你的证书,它看起来不正确。
您的CN应该类似于
*.dflight.com
,然后您应该使用此主机名访问服务(例如:https://staging.dflight.com)。如果您还没有购买此域名,您可以将其添加到您的主机文件并访问它。看看WSO2使用的以下证书。
This的回答也会对你有所帮助,我相信。
wljmcqd82#
再次感谢YCR。我们有外卡证书为我们的生产网站。客户端SSL证书用于限制对网站某些部分的访问,例如登台和预生产,后台管理或其他保留区域,这些区域不供公众访问,但在公共互联网上公开。这是我们的供应商管理的生成这样的证书和原因,我不知道它的使用自我CA证书。为了给予你一个想法,在这里找到一个快照的.p12客户端证书,这是发布给我。我目前唯一能做的就是尝试禁用主机名验证:-(,希望它能像在pyhton实现上一样工作。