2017-10-19 163 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