我正试图通过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]
答案 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可能会将证书保存在与我提及的不同的选项卡下。
https://api.twitter.com/
。将导出的证书文件复制到ColdFusion服务器(如果需要,可以从IE中删除证书)
cmd
提示keytool是Java SDK的一部分,可以在以下位置找到:
服务器配置:
cf_root /运行/ bin中/密钥工具
JRun 4配置上的Multiserver / J2EE:
jrun_root / JRE / bin中/密钥工具
Sun JDK安装:
jdk_root / bin中/密钥工具
请参阅其他J2EE应用程序服务器和JVM的文档
安装证书:
"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
注意:* your_cert_alias_name *我上面使用的可以是你想要的任何东西 注意:* C:\ wherever_you_saved_the_file \ cert_file.cer *将这些值更改为用于服务器文件夹和证书文件名的任何值
验证证书:
"c:\program files\java\jre7\bin\keytool" -list -v -keystore cacerts -alias your_cert_alias_name -storepass changeit
注意:* 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
它对我有用:)