2013-12-17 41 views
1

我試圖通過MonkehTweets component從網站上的帳戶顯示最新的推文。我幾乎遵循這裏接受的答案:Implement monkehTweets on Coldfusion Servermonkehtwweets和ColdFusion的問題

我創建了Twitter應用程序,生成了所有必需的令牌,並將CFC上傳到了我的網站。我然後試着這個(鍵明顯填寫在我的代碼中):

<cfset application.objMonkehTweet = new com.coldfumonkeh.monkehTweet(
    consumerKey = '', 
    consumerSecret = '', 
    oauthToken = '', 
    oauthTokenSecret = '', 
    userAccountName = 'evagorasc', 
    parseResults = true 
    ) /> 

<cfset mytweets = application.objMonkehTweet.getUserTimeline(
    count="1", 
    checkHeader=true 
    ) /> 

<cfdump var="#mytweets#" /> 

無論我做什麼,但我得到以下CFDUMP結果。調用安全應用程序時,此錯誤看起來更像CF中缺少的證書。有任何想法嗎?

struct 
Charset [empty string] 
ErrorDetail I/O Exception: peer not authenticated 
Filecontent Connection Failure 
Header [empty string] 
Mimetype  Unable to determine MIME type of file. 
Responseheader struct [empty] 
Statuscode Connection Failure. Status code unavailable. 
Text  YES 
struct [empty] 

回答

1

昨天我遇到了這個問題。我搜索了很多,並閱讀了很多博客找到這個問題的解決方案,但沒有找到確切的答案。米格爾-F解釋它,但它不能解決問題。以下是我要列出的步驟。它一定會解決這個問題。

我的開發環境規範: Windows 7 Ultimate,XAMPP 1.7。7,ColdFusion的9並使用最新的monkehTweet CFC

步驟1

打開該URL在Firefox(https://api.twitter.com

我不能插入圖片到期的聲譽,我得到了聲望,我一定會插入它。

步驟2

保存點擊更多信息,然後單擊查看證書 然後單擊詳細信息選項卡,單擊導出按鈕,將文件保存與twitter.cer

打開運行工具並運行「加利福尼亞」,打開命令提示符

現在我們需要安裝的Twitter認證ColdFusion的9

我在中科院

命令E要安裝認證,我用下面的命令

C:\ColdFusion9\runtime\jre\bin>keytool -import -v -keystore cacert -alias twitter_cert -storepass mypass -file c:/twitter.cer 

它會要求安裝然後是

確認鍵來確認認證,適用於Java密鑰庫上市。您需要使用以下命令。

C:\ColdFusion9\runtime\jre\bin>keytool -list -v -keystore cacert -alias twitter_cert -storepass mypass 

它肯定會列出認證。

現在您需要從服務管理器重新啓動Coldfusion 9應用程序。

第3步:

現在,你需要做的monkehtweet文件夾中打開base.cfc

查找功能httpOAuthCall,並與下面的代碼更改

<cffunction name="httpOAuthCall" description="Allows Scripting of CFHTTP" access="private" output="false" returntype="Struct"> 
     <cfargument name="url"   type="string" displayname="url"  hint="URL to request"  required="true" /> 
     <cfargument name="method"  type="string" displayname="method" hint="Method of HTTP Call" required="true" /> 
     <cfargument name="parameters" type="struct" displayname="method" hint="HTTP parameters"  required="false" default="#structNew()#" /> 
      <cfset var returnStruct = {} /> 

       <cfif structKeyExists(arguments.parameters,'params')> 
        <cfset structAppend(arguments.parameters,arguments.parameters['params']) /> 
        <cfset structDelete(arguments.parameters,'params') /> 
       </cfif> 
       <cfset objSecurity = createObject("java", "java.security.Security") /> 
       <cfset storeProvider = objSecurity.getProvider("JsafeJCE") /> 
       <cfset objSecurity.removeProvider("JsafeJCE") /> 


       <cfhttp url="#arguments.url#" method="#arguments.method#" result="returnStruct" multipart="true"> 
        <cfif structKeyExists (arguments.parameters,'media[]') and arguments.method is 'POST'> 
         <cfhttpparam type="file" file="#arguments.parameters['media[]']#" name="media[]" /> 
        </cfif> 

        <!--- Strip out the non-required parameters (the custom monkehTweet arguments) ---> 
        <cfset structDelete(arguments.parameters,'checkHeader', false) /> 
        <cfset structDelete(arguments.parameters,'format', false) /> 
        <cfset structDelete(arguments.parameters,'media[]', false) /> 

        <cfif arguments.method is 'POST'> 
         <cfloop collection="#arguments.parameters#" item="local.key"> 
          <cfhttpparam type="formfield" name="#key#" value="#arguments.parameters[key]#" /> 
         </cfloop> 
        </cfif> 
       </cfhttp> 

       <cfset objSecurity.insertProviderAt(storeProvider, 1) /> 
     <cfreturn returnStruct /> 
    </cffunction> 

現在,運行示例,提供所有的密鑰,它肯定會工作。

2

MonkehTweets(在base.cfc在httpOAuthCall)使用CFHTTP這樣,可以試試你的服務器上運行此:

<cfhttp url="https://twitter.com/"> 
</cfhttp> 

這會告訴你,如果這是你的CF一個簡單的證書有問題/ JVM設置。

如果上述呼叫失敗,您可以添加證書using these instructions。或者,您可以嘗試使用JSafe code listed here,但在生產中實施它之前,您一定要確定它的功能。

+0

你是對的 - 我得到同樣的錯誤,當我運行簡單的HTTPS請求。我嘗試了Raymond網站的JSafe代碼,但無法在我的網站上運行。我想我需要安裝證書。任何人都有關於Twitter的具體說明?注意:我正在使用CF v9。 –

3

以下是關於如何爲ColdFusion安裝證書以及如何使用Internet Explorer檢索證書的以前的答案。

以下是爲了將證書安裝到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://api.twitter.com/
  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

你的指示是現貨。我設法安裝證書並證明我可以做出簡單的HTTPS請求。調用這個組件仍然會產生相同的錯誤,但我期待着看到這一點。 –

+1

很高興我的回答有幫助,但我不知道爲什麼你仍然得到同樣的錯誤。你確定你傳遞的證書和授權信息是正確的嗎? –

+0

您可能希望重複@ Miguel-F給出的指示,但是針對api.twitter.com,因爲這是我懷疑MonkehTweets實際上正在提出請求的地方。我在上面的演示代碼中看過使用該URL的內容,但當您未通過身份驗證時,它傾向於返回錯誤代碼(400),因此我使用主要Twitter域。在演示代碼中嘗試https://api.twitter.com/1.1/search/tweets.json,你應該得到一個400錯誤代碼,它會告訴你事情確實沒問題,因爲你不會那麼遠證書正在工作 – barnyr

0

我在CF9盒子上有與monkehTweets和ColdFusion完全相同的問題。

我用最新的修補程序更新了服務器,然後更新了JVM。

一旦完成,一切工作正常。

對我來說,它歸結爲一個JVM問題。

0

確保導入您的證書在你的ColdFusion cacerts中:

密鑰工具-importcert -v -alias -file嘰嘰喳喳C:\ ColdFusion9 \運行\ JRE \ lib \ security中\ twitter.cer -keystore C: \ ColdFusion9 \運行\ JRE \ lib \ security中\ cacerts中 -storepass的changeit

它爲我:)