簡體   English   中英

等待任務如何忽略 SSL 證書問題?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM