[英]How can a waitfor task ignore SSL certificate issues?
考虑到我的应用程序在本地主机上运行,下面的 Ant 代码段在我的本地环境中运行良好:
<waitfor maxwait="120" maxwaitunit="second" checkevery="1">
<and>
<http url="https://localhost:${env.https.port}/${env.context.path}/${url}"/>
</and>
</waitfor>
但它不适用于 linux 测试服务器。 即使应用程序在本地主机上运行,它也会等待 2 分钟。 我使用 Ant echo 任务并通过在服务器上为它运行“curl”来验证创建的 url 是否有效。
当我运行时在服务器上:
curl https://localhost:8080/live/index.html
我收到认证错误。 但是当我运行时(忽略证书):
curl -k https://localhost:8080/live/index.html
它运作良好。
我想知道 Ant 脚本是否也因为认证错误而不起作用,如果是,我该如何解决? 如果没有,对 Ant 脚本有什么建议吗?
这是一个可能的起点。 这完成了curl -k
所做的一些工作,但来自 Ant 内部。 由于这会禁用证书检查,因此应在安全环境中谨慎使用! 您没有说明您遇到了哪个证书错误,但如果需要,您可以扩展以下内容。
<script language="javascript"><![CDATA[
// Create a trust manager that does not validate certificate chains
var TrustManagerInterface = Java.type( "javax.net.ssl.X509TrustManager" );
var X509TrustManager = new TrustManagerInterface() {
getAcceptedIssuers: function() { return null; },
checkClientTrusted: function() { },
checkServerTrusted: function() { },
};
var TrustManagerArrayType = Java.type( "javax.net.ssl.TrustManager[]" );
var trust_manager_array = new TrustManagerArrayType( 1 );
trust_manager_array[0] = X509TrustManager;
var SecureRandomType = Java.type( "java.security.SecureRandom" );
var secure_random = new SecureRandomType;
var SSLContextType = Java.type( "javax.net.ssl.SSLContext" );
var ssl_context = SSLContextType.getInstance( "SSL" );
ssl_context.init( null, trust_manager_array, secure_random );
var HttpsURLConnectionType = Java.type( "javax.net.ssl.HttpsURLConnection" );
HttpsURLConnectionType.setDefaultSSLSocketFactory( ssl_context.getSocketFactory( ) );
// Do not validate certificate hostnames
var HostnameVerifierType = Java.type( "javax.net.ssl.HostnameVerifier" );
var host_verifier = new HostnameVerifierType() {
verify: function() { return true; }
};
HttpsURLConnectionType.setDefaultHostnameVerifier( host_verifier );
]]>
</script>
<waitfor maxwait="120" maxwaitunit="second" checkevery="2" checkeveryunit="second">
<http url="https://wrong.host.badssl.com" />
</waitfor>
我使用https://badssl.com来测试上述内容。
checkeveryunit
,我认为check every
的默认单位可能是亚秒级,因此建议您添加checkeveryunit
。
以上是与 Nashorn 一起使用的。 如果您有旧版本的 Java,也应该可以使用 Rhino 版本。
以上来源于此源。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.