在Google App Engine上将JSON发送到HTTPS无法正常工作

时间:2014-07-14 02:42:34

标签: json google-app-engine ssl https

我在Google App Engine上的自定义域上有一个应用程序,我需要捕获JSON包。

我正在使用http://www.hurl.it/进行测试,其网址如下:https://subdomain.website.net.au/folder/

这会产生服务器错误,但是如果我删除S并且只使用HTTP,则请求正常。为了实现这一目标,Google需要什么?

更新

使用Curl并运行以下命令:

curl --verbose --data "@json.txt" --header "Content-Type:application/json" "https://subdomain.website.net.au/folder/"

我收到错误:“无法获得本地颁发者证书”

当我从http://curl.haxx.se/ca/cacert.pem下载证书文件并运行:

curl --verbose --cacert "cacert.pem" --data "@json.txt" --header "Content-Type:application/json" "https://subdomain.website.net.au/folder/"

它正常工作并且符合预期。这是否意味着问题与hurl.it?如果是这样,究竟是什么问题,我有一个客户试图向我发送数据,但它也无法正常工作。

UPDATE2:

问题最终是客户端不支持SNI所以我不得不使用VIP。这需要花钱,是一种较旧的方法,但更兼容。

1 个答案:

答案 0 :(得分:0)

有一篇文章介绍了如何在developers.google.com上为自定义域设置SSL。

基本上你需要两件事:

  • SNI或虚拟IP证书
  • 您的域必须是付费的Google Apps域才能安装证书

您的证书,您的Google Apps域以及使用App Engine的证书将花费您的费用。如果您可以使用YOURAPPID.appspot.com域,则可以免费获得SSL。如果您需要自定义域名,我推荐以上网站。


更新问题后: 看起来证书颁发机构(CA)对客户端是未知的或不可信的。这可以通过使用来自thawte或verisign的商业证书来解决。或者,您可以将CA证书添加到操作系统或客户端应用程序的证书存储中。 换句话说:在您的操作系统或应用程序中将CA证书安装为受信任的根证书。应该这样做。

哦,你的假设是正确的。 hurl.it不知道CA,因此拒绝您的证书作为无效或未知的发行人。


更新2: Craig,你的GeoTrust证书应该没问题。请尝试以下方法:

  1. 请验证您是否可以使用普通网络浏览器访问此应用或您应用托管的任何其他网页。它不应该抱怨证书。如果确实如此,并且您需要为证书添加例外规则,那么配置仍然是错误的。

    我有一段时间没有这样做,但上次我使用SSL证书时,我以某种方式连接了实际证书和CA,我确信有这方面的教程。因为找不到CA.cert,所以以这种方式提供它是有意义的。

    来自developers.google.com: '证书文件最多可包含五个证书;这个号码包括链式和中级证书。'

    另见wikipedia

  2. 因为当您手动提供CA时,它会与curl一起使用,这是客户上传数据的临时解决方案。

  3. 请注意,并非所有应用程序都使用系统存储区来存储证书。例如,Firefox有自己的证书存储区,它完全忽略了你在操作系统的根证书存储区中所做的所有更改(至少在windows下就是这种情况)
  4. 一旦您确认网站使用HTTPS(参见1),您就可以在该应用程序中创建一个包含textarea的简单表单,您可以在其中粘贴JSON数据并使用jquery等将其发送到您的应用程序。虽然这并不理想,但这是一个很好的测试,可以验证您的应用和SSL设置是否有效以及问题出在其他地方。
  5. 如果您目前只需要上传,则可以随时将curl和CA.cert打包在一起,并添加一个小型批处理文件以进行相应的调用。
  6. 这是我可以给你的所有信息,而无需查看你的实际设置。我的建议是摆弄客户和证书,因为这肯定是这个问题的所在。它与JSON数据无关。