2013-10-16 154 views
4

這是我第一次使用SOAP.I'm試圖調用使用CFINVOKE這是如下一個Web服務:獲取無法讀取WSDL錯誤

<cfinvoke 
    webservice="https://xyz/infoLookup.php?wsdl" 
    method="infoLookup" 
    returnVariable="info" 
    > 

    <cfinvokeargument name="phoneNumber" value="7182973186"/> 
    <cfinvokeargument name="userName" value="12345"/> 
    <cfinvokeargument name="password" value="password"/> 
</cfinvoke> 

<cfdump var="#info#"> 

這裏是消息名稱的一部分從WSDL:

<message name="infoLookupRequest"> 
    <part name="phoneNumber" type="xsd:string" /> 
    <part name="userName" type="xsd:string" /> 
    <part name="password" type="xsd:string" /> 
</message> 

這裏是操作名稱從WSDL部分:

<portType name="vtsInfoLookupPortType"> 
- <operation name="infoLookup"> 
    <documentation>Get phone number information.</documentation> 
    <input message="tns:infoLookupRequest" /> 
    <output message="tns:infoLookupResponse" /> 
    </operation> 
    </portType> 

我得到以下ERR或:

Unable to read WSDL from URL: https://xyz/infoLookup.php?wsdl. 
Error: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated. 

The error occurred in C:\XYZ\A\Soap\soapreq.cfm: line 37 

35 : <cfinvokeargument name="phoneNumber" value="7182973186"/> 
36 : <cfinvokeargument name="userName" value="12345"/> 
37 : <cfinvokeargument name="password" value="password"/> 
38 : </cfinvoke> 
39 : 

我試圖在網上搜索錯誤,但無法確定我的代碼中有什麼問題。請讓我知道如果我做錯了什麼

+0

我相信我需要將SSL證書導入到coldfusion信任庫中。但在此之前,我正確地在我的代碼中傳遞變量? – Jack

+0

如果它位於SSL後面,那麼ColdFusion將需要證書與它通信。你的代碼看起來好,那麼爲什麼不試試呢?另外,您應該能夠自己瀏覽WSDL以驗證在運行代碼之前可以獲取它。只需瀏覽到「https://xyz/infoLookup.php?wsdl」,看看會發生什麼。 –

+0

當我瀏覽WSDL時,它工作正常。 WSDL在Internet Explorer中打開。我相信我仍然需要將證書導入Coldfusion Trust Store。 – Jack

回答

1

以下是您需要執行的步驟,以便將證書安裝到ColdFusion的Java密鑰庫中。首先,確保您正在更新ColdFusion正在使用的正確cacerts文件。如果您在該服務器上安裝了多個JRE。您可以在「系統信息」下驗證管理員使用的JRE ColdFusion。尋找Java Home行。

The default truststore is the JRE's cacerts file. This file is typically located in the following places:

  • Server Configuration:

    cf_root/runtime/jre/lib/security/cacerts

  • Multiserver/J2EE on JRun 4 Configuration:

    jrun_root/jre/lib/security/cacerts

  • Sun JDK installation:

    jdk_root/jre/lib/security/cacerts

  • Consult documentation for other J2EE application servers and JVMs

爲了安裝證書,您需要先獲取證書的副本。這可以通過使用Internet Explorer來完成。 請注意,不同版本的Internet Explorer的行爲會略有不同,但應與這些步驟非常相似。例如,早期版本的IE可能會將證書保存在與我提到的不同的選項卡下。

  1. 瀏覽到Internet Explorer的SSL URL - https://xyz/infoLookup.php?wsdl
  2. 通過點擊鎖圖標,點擊查看證書
  3. 查看證書然後點擊安裝證書...按鈕(注意:如果您沒有看到這個按鈕,你必須關閉IE瀏覽器,並首次運行它以管理員身份)
  4. 點擊IE瀏覽器的Internet選項,單擊內容選項卡
  5. 點擊證書按鈕
  6. 查找中級證書頒發機構選項卡下的服務器證書,選擇證書,然後單擊導出...按鈕
  7. 使用DER格式

複製導出的證書文件到您的ColdFusion服務器(你可以刪除IE瀏覽器證書,如果你想)

  1. 運行cmd提示符ColdFusion服務器上管理員
  2. 出口
  3. 使原始cacerts中的備份文件的情況下,您遇到的問題

The keytool is part of the Java SDK and can be found in the following places:

  • Server Configuration:

    cf_root/runtime/bin/keytool

  • Multiserver/J2EE on JRun 4 Configuration:

    jrun_root/jre/bin/keytool

  • Sun JDK installation:

    jdk_root/bin/keytool

  • Consult documentation for other J2EE application servers and JVMs

要安裝證書:

  1. 改變目錄到您的信任的位置(其中cacerts文件所在)
  2. 鍵入以下命令(使用當前的JVM,並使用當前JVM的keytool)"c:\program files\java\jre7\bin\keytool" -import -v -alias your_cert_alias_name -file C:\wherever_you_saved_the_file\cert_file.cer -keystore cacerts -storepass changeit
  3. 類型是在提示「信任此證書?」

注:* your_cert_alias_name *我上面使用可以任何你想要的
注:* C:\ wherever_you_saved_the_file \ cert_file.cer *改變這些值,無論你使用的服務器文件夾和證書文件名

要驗證證書:

  1. 鍵入以下命令(使用當前的JVM,並使用當前JVM的keytool)"c:\program files\java\jre7\bin\keytool" -list -v -keystore cacerts -alias your_cert_alias_name -storepass changeit

注:* your_cert_alias_name *使用相同的名字在這裏,你上面使用安裝證書

重新啓動ColdFusion服務,直到你這樣做,不會讀取更新cacerts文件。

如果您願意,您可以從服務器刪除導入的證書文件。

+0

謝謝米格爾F非常好的描述。我成功安裝了它,並在驗證後看到它已列出。 – Jack

+0

好吧,現在我已經計算出並完成了Coldfusion Truststore的 SSL證書安裝過程,現在我收到屬性驗證錯誤,其中明確指出我需要有 cfhttp。我明白。所以,我將不得不使用cfhttp,如下所示: 'url =「https://xyz/infoLookup.php?wsdl」', 'method =「post」,clientCert = ??和clientCetPassword = ?? result =「xyz」'。 – Jack

+0

我碰到過一些帖子(http://forums.adobe.com/message/800318) ,他們提到clientcert應該包含格式爲 '.pkcs'的文件?如果是,那麼,我想知道我應該從哪裏下載這個文件,並且我正在按照正確的程序進行操作?它是否是我用DER格式下載 的文件?請在此點亮一下。 – Jack