monkehTweets和ColdFusion的问题

时间:2013-12-17 01:24:22

标签: twitter coldfusion

我正试图通过MonkehTweets component在网站上的帐户中显示最新推文。我几乎遵循这里接受的答案:Implement monkehTweets on Coldfusion Server

我创建了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]

5 个答案:

答案 0 :(得分:3)

以下是我之前就如何为ColdFusion安装证书以及如何使用Internet Explorer检索证书的答案。

以下是为了将证书安装到ColdFusion的Java密钥库而需要执行的步骤。首先,确保您正在更新ColdFusion正在使用的正确cacerts文件。如果您在该服务器上安装了多个JRE。您可以在“系统信息”下验证管理员使用的JRE ColdFusion。查找Java Home行。

  

默认信任库是JRE的cacerts文件。此文件通常位于以下位置:

     
      
  • 服务器配置:

         

    cf_root /运行/ JRE / LIB /安全/ cacerts中

  •   
  • JRun 4配置上的Multiserver / J2EE:

         

    jrun_root / JRE / LIB /安全/ cacerts中

  •   
  • Sun JDK安装:

         

    jdk_root / JRE / LIB /安全/ cacerts中

  •   
  • 请参阅其他J2EE应用程序服务器和JVM的文档

  •   

要安装证书,您需要先获取证书的副本。这可以通过使用Internet Explorer完成。 请注意,不同版本的Internet Explorer的行为略有不同,但应与这些步骤非常相似。例如,早期版本的IE可能会将证书保存在与我提及的不同的选项卡下。

  1. 浏览到Internet Explorer中的SSL URL - https://api.twitter.com/
  2. 点击锁定图标并点击查看证书
  3. 查看证书
  4. 然后单击“安装证书...”按钮(注意:如果您没有看到此按钮,则必须先关闭IE并以管理员身份运行它)
  5. 单击IE的Internet选项,然后单击“内容”选项卡
  6. 单击“证书”按钮
  7. 在“中级证书颁发机构”选项卡下找到服务器证书,选择证书并单击“导出...”按钮
  8. 使用DER格式导出
  9. 将导出的证书文件复制到ColdFusion服务器(如果需要,可以从IE中删除证书)

    1. 在ColdFusion服务器上以管理员身份运行cmd提示
    2. 备份原始cacerts文件,以防您遇到问题
    3.   

      keytool是Java SDK的一部分,可以在以下位置找到:

           
          
      • 服务器配置:

             

        cf_root /运行/ bin中/密钥工具

      •   
      • JRun 4配置上的Multiserver / J2EE:

             

        jrun_root / JRE / bin中/密钥工具

      •   
      • Sun JDK安装:

             

        jdk_root / bin中/密钥工具

      •   
      • 请参阅其他J2EE应用程序服务器和JVM的文档

      •   

      安装证书:

      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. 在“信任此证书?”
      4. 的提示符下键入yes

        注意:* 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
        2. 注意:* your_cert_alias_name *在此处使用与上面用于安装证书相同的名称

          重新启动ColdFusion服务在执行此操作之前,它不会读取更新的cacerts文件。

          如果愿意,您可以从服务器中删除导入的证书文件。

答案 1 :(得分:2)

MonkehTweets使用CFHTTP(在base.cfc中的httpOAuthCall中),所以你可以尝试在服务器上运行它:

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

这将告诉您CF / JVM设置是否是一个直接的证书问题。

如果上述呼叫失败,您可以添加证书using these instructions。或者,您可以尝试JSafe code listed here,但在生产中实施之前,您需要确定它正在做什么。

答案 2 :(得分:1)

昨天,我遇到了这个问题。我google了很多,并阅读了许多博客,找到解决这个问题的解决方案,但没有找到确切的答案。 Miguel-F解释了它,但它没有解决问题。以下是我要列出的步骤。它肯定会解决这个问题。

我的开发环境规范: Windows 7 Ultimate,XAMPP 1.7.7,Coldfusion 9和使用最新的monkehTweet CFC

第1步

在Firefox中打开网址(https://api.twitter.com

由于声誉,我无法插入图片,因为我获得了声誉,我一定会插入它。

第2步

保存单击“更多信息”,然后单击“查看证书” 然后单击Detail选项卡,单击Export按钮并使用twitter.cer

保存文件

打开运行工具并运行命令'cmd'以打开命令提示符

现在我们需要在Coldfusion 9中安装twitter认证。

在我的情况下安装认证,我使用以下命令

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

它会要求安装然后输入yes

确认在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>

现在,运行您的示例,提供所有密钥,它肯定会有效。

答案 3 :(得分:0)

我在CF9盒子上遇到了与monkehTweets和ColdFusion完全相同的问题。

我使用最新的修补程序更新了服务器,然后更新了JVM。

一旦完成,一切正常。

对我而言,它归结为JVM问题。

答案 4 :(得分:0)

确保您在coldfusion cacerts中导入证书:

keytool -importcert -v -alias twitter -file C:\ ColdFusion9 \ runtime \ jre \ lib \ security \ twitter.cer -keystore C:\ ColdFusion9 \ runtime \ jre \ lib \ security \ cacerts -storepass changeit

它对我有用:)