我们最近反复出现了一个错误,这个错误似乎是由于Google在Google Apps for Gov服务上处理Google Apps脚本中的SSL信任方式所做的更改。我们有一些Apps Script系统 - 其中两个特别是服务器监控系统和基于Web服务的日历同步工具 - 它们通过SSL连接与我们的服务器进行通信。这已经好几个月了,直到2012年9月20日晚上9点到15点,几乎所有这些(和类似的)连接因为无法信任我们最终强制要求的国防部签署的证书而开始失败事情。
陌生人仍然认为这有点不一致 - 也就是说,我可以成功地要求Google连接到https://usuportal.usuhs.mil并且它加载得很好。但是,如果我尝试以下任何一个:
https://www.us.army.mil
https://www.nps.edu
https://www.disa.mil
https://learning.usuhs.edu
......他们都失败了。我怀疑这与某些服务器重新绑定的root证书有关,足以让所有绑定到“DOD Root CA-2”证书作为终结者失败 - 这对我们来说是一个真正的问题。
对于我们的服务器监控,我们已经能够通过在Apps脚本中禁用SSL验证来暂时解决此问题,但该选项不可用于访问webservices [编辑:我们使用SoapService来处理WS请求和返回],只要这个问题到位,我们就无法继续使用这些工具。考虑到我们可以确定何时发生相关变更的准确性,我希望Google能够(至少)相对快速地确定发生的事情。
如果它有用,下面是一个快速的Google Apps脚本功能,它会根据是否能够信任端点上的SSL证书来注销成功/失败。
function checkSSL()
{
// The server to go look at to see if we can trust it.
// Again, usuportal.usuhs.mil has been observed to work; all others tested have failed
//
var serverToTest = "https://www.disa.mil";
// options defines the options which will be used by the UrlFetchApp to define its behavior.
// In this case, we may be interested in disabling SSL validation.
//
var options =
{
"validateHttpsCertificates" : false
};
// First, try without disabling validation
//
try {
response = UrlFetchApp.fetch(serverToTest);
Logger.log("I was able to reach " + serverToTest +" without disabling certificate validation.");
}
catch (e)
{
// Logger.log(e.toString());
Logger.log("I was not able to reach " + serverToTest +" without disabling certificate validation.");
}
// Now let's try it with validation disabled
//
try {
response = UrlFetchApp.fetch(serverToTest, options);
Logger.log("I was able to reach " + serverToTest +" with certificate validation disabled.");
}
catch (e)
{
// Logger.log(e.toString());
Logger.log("I was not able to reach " + serverToTest +" with certificate validation disabled. Maybe it's really just down?");
}
}
答案 0 :(得分:1)
请在Issue Tracker中记录此信息。我已经能够在内部深入研究这一点,这实际上是我们相信的问题。在问题跟踪器中记录后,您将能够跟踪此问题的进展。
我们可能会通过在类似的“validateHttpsCertificates”标志中为SoapSerivce添加类似于UrlFetchApp来解决这个问题