waitfor任务如何忽略SSL证书问题?

时间:2017-10-19 09:54:35

标签: java ant ssl-certificate

下面的Ant片段在我的本地环境中运行良好,考虑到我的应用程序在localhost上运行:

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

但它不能在linux测试服务器上运行。即使应用程序在localhost上运行,它也会等待2分钟。我使用Ant echo任务并运行&#34; curl&#34;来验证创建的url是否有效。在服务器上。

我运行时在服务器上:

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

我收到了认证错误。但是当我跑(忽略证书)时:

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

效果很好。

我想知道Ant脚本是否因为认证错误而无效,如果是,我该如何解决?如果没有,有关Ant脚本的任何建议吗?

1 个答案:

答案 0 :(得分:1)

这是一个可能的起点。这样做了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