home *** CD-ROM | disk | FTP | other *** search
/ Freelog 112 / FreelogNo112-NovembreDecembre2012.iso / Multimedia / Songbird / Songbird_2.0.0-2311_windows-i686-msvc8.exe / xulrunner / modules / CertUtils.jsm next >
Text File  |  2010-12-02  |  2KB  |  78 lines

  1. EXPORTED_SYMBOLS = [ "BadCertHandler", "checkCert" ];
  2.  
  3. /**
  4.  * Only allow built-in certs for HTTPS connections.  See bug 340198.
  5.  */
  6. function checkCert(channel) {
  7.   if (!channel.originalURI.schemeIs("https"))  // bypass
  8.     return;
  9.  
  10.   const Ci = Components.interfaces;  
  11.   var cert =
  12.       channel.securityInfo.QueryInterface(Ci.nsISSLStatusProvider).
  13.       SSLStatus.QueryInterface(Ci.nsISSLStatus).serverCert;
  14.  
  15.   var issuer = cert.issuer;
  16.   while (issuer && !cert.equals(issuer)) {
  17.     cert = issuer;
  18.     issuer = cert.issuer;
  19.   }
  20.  
  21.   var errorstring = "cert issuer is not built-in";
  22.   if (!issuer)
  23.     throw errorstring;
  24.  
  25.   issuer = issuer.QueryInterface(Ci.nsIX509Cert3);
  26.   var tokenNames = issuer.getAllTokenNames({});
  27.  
  28.   if (!tokenNames.some(isBuiltinToken))
  29.     throw errorstring;
  30. }
  31.  
  32. function isBuiltinToken(tokenName) {
  33.   return tokenName == "Builtin Object Token";
  34. }
  35.  
  36. /**
  37.  * This class implements nsIBadCertListener.  Its job is to prevent "bad cert"
  38.  * security dialogs from being shown to the user.  It is better to simply fail
  39.  * if the certificate is bad. See bug 304286.
  40.  */
  41. function BadCertHandler() {
  42. }
  43. BadCertHandler.prototype = {
  44.  
  45.   // nsIChannelEventSink
  46.   onChannelRedirect: function(oldChannel, newChannel, flags) {
  47.     // make sure the certificate of the old channel checks out before we follow
  48.     // a redirect from it.  See bug 340198.
  49.     checkCert(oldChannel);
  50.   },
  51.  
  52.   // Suppress any certificate errors
  53.   notifyCertProblem: function(socketInfo, status, targetSite) {
  54.     return true;
  55.   },
  56.  
  57.   // Suppress any ssl errors
  58.   notifySSLError: function(socketInfo, error, targetSite) {
  59.     return true;
  60.   },
  61.  
  62.   // nsIInterfaceRequestor
  63.   getInterface: function(iid) {
  64.     return this.QueryInterface(iid);
  65.   },
  66.  
  67.   // nsISupports
  68.   QueryInterface: function(iid) {
  69.     if (!iid.equals(Components.interfaces.nsIChannelEventSink) &&
  70.         !iid.equals(Components.interfaces.nsIBadCertListener2) &&
  71.         !iid.equals(Components.interfaces.nsISSLErrorListener) &&
  72.         !iid.equals(Components.interfaces.nsIInterfaceRequestor) &&
  73.         !iid.equals(Components.interfaces.nsISupports))
  74.       throw Components.results.NS_ERROR_NO_INTERFACE;
  75.     return this;
  76.   }
  77. };
  78.