2017-10-19 156 views
1

下面的蚂蚁片段效果很好,我当地的环境,考虑到我的应用程序是在本地主机上运行:waitfor任务如何忽略SSL证书问题?

<waitfor maxwait="120" maxwaitunit="second" checkevery="1"> 
    <and> 
     <http url="https://localhost:${env.https.port}/${env.context.path}/${url}"/> 
    </and> 
</waitfor> 

不过,这并不一个Linux测试服务器上的工作。即使应用程序在本地主机上运行,​​它也会等待2分钟。我使用Ant回声任务并在服务器上运行“curl”来验证创建的url是否有效。

,当我运行服务器:

curl https://localhost:8080/live/index.html 

我得到一个认证错误。但是当我跑(忽略证书):

curl -k https://localhost:8080/live/index.html 

它运作良好。

我想知道如果Ant脚本也不能工作,因为认证错误,如果是的话,我该如何解决它?如果没有,对Ant脚本有什么建议?

+0

我会尝试在步骤之前向您的脚本添加' https:// localhost:$ {env.https.port}/$ {env.context.path}/$ {url}''因此您可以验证所有这些属性是否正确解析。此外,您不需要''块,因为它只包含一个项目。 – CAustin

+0

您需要考虑_why_您获得证书验证错误。这可能是因为服务器SSL证书无效,过期或自签名。如果无效,请安装有效的证书(如果可以的话)。从内存中,您可以将证书添加到密钥存储区以解决自签名证书。 – mhawke

+0

此外,似乎存在独立于证书验证错误的连接问题。尝试使用'127.0.0.1'而不是'localhost'。尝试使用服务器的实际主机名,或者如果失败,请使用其IP地址。检查是否有代理服务器。 – mhawke

回答

0

这是一个可能的起点。这是一些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来测试以上。

顺便说一句,我认为check every的默认单位可能是亚秒,所以建议您添加checkeveryunit

以上是用于Nashorn。如果您有旧版本的Java,Rhino版本也应该可以。

以上来自this source