Beispiel #1
0
 /**
  * This method was adapted from Sslurp.
  * https://github.com/EvanDotPro/Sslurp
  *
  * (c) Evan Coury <*****@*****.**>
  *
  * For the full copyright and license information, please see below:
  *
  * Copyright (c) 2013, Evan Coury
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without modification,
  * are permitted provided that the following conditions are met:
  *
  *     * Redistributions of source code must retain the above copyright notice,
  *       this list of conditions and the following disclaimer.
  *
  *     * Redistributions in binary form must reproduce the above copyright notice,
  *       this list of conditions and the following disclaimer in the documentation
  *       and/or other materials provided with the distribution.
  *
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 public static function getSystemCaRootBundlePath()
 {
     static $found = NULL;
     if ($found !== NULL) {
         return $found;
     }
     // If SSL_CERT_FILE env variable points to a valid certificate/bundle, use that.
     // This mimics how OpenSSL uses the SSL_CERT_FILE env variable.
     $envCertFile = getenv('SSL_CERT_FILE');
     if ($envCertFile && is_readable($envCertFile) && validateCaFile(file_get_contents($envCertFile))) {
         // Possibly throw exception instead of ignoring SSL_CERT_FILE if it's invalid?
         return $envCertFile;
     }
     $caBundlePaths = ['/etc/pki/tls/certs/ca-bundle.crt', '/etc/ssl/certs/ca-certificates.crt', '/etc/ssl/ca-bundle.pem', '/usr/local/share/certs/ca-root-nss.crt', '/usr/ssl/certs/ca-bundle.crt', '/opt/local/share/curl/curl-ca-bundle.crt', '/usr/local/share/curl/curl-ca-bundle.crt', '/usr/share/ssl/certs/ca-bundle.crt', '/etc/ssl/cert.pem'];
     $found = NULL;
     $configured = ini_get('openssl.cafile');
     if ($configured && strlen($configured) > 0 && is_readable($caBundle) && validateCaFile(file_get_contents($caBundle))) {
         $found = TRUE;
         $caBundle = $configured;
     } else {
         foreach ($caBundlePaths as $caBundle) {
             if (@is_readable($caBundle) && validateCaFile(file_get_contents($caBundle))) {
                 $found = TRUE;
                 break;
             }
         }
         if (!$found) {
             foreach ($caBundlePaths as $caBundle) {
                 $caBundle = dirname($caBundle);
                 if (is_dir($caBundle) && glob($caBundle . '/*')) {
                     $found = TRUE;
                     break;
                 }
             }
         }
     }
     if ($found) {
         $found = $caBundle;
     }
     return $found;
 }
Beispiel #2
0
 /**
  * This method was adapted from Sslurp.
  * https://github.com/EvanDotPro/Sslurp
  *
  * (c) Evan Coury <*****@*****.**>
  *
  * For the full copyright and license information, please see below:
  *
  * Copyright (c) 2013, Evan Coury
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without modification,
  * are permitted provided that the following conditions are met:
  *
  *     * Redistributions of source code must retain the above copyright notice,
  *       this list of conditions and the following disclaimer.
  *
  *     * Redistributions in binary form must reproduce the above copyright notice,
  *       this list of conditions and the following disclaimer in the documentation
  *       and/or other materials provided with the distribution.
  *
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 public static function getSystemCaRootBundlePath()
 {
     static $caPath = null;
     if ($caPath !== null) {
         return $caPath;
     }
     // If SSL_CERT_FILE env variable points to a valid certificate/bundle, use that.
     // This mimics how OpenSSL uses the SSL_CERT_FILE env variable.
     $envCertFile = getenv('SSL_CERT_FILE');
     if ($envCertFile && is_readable($envCertFile) && validateCaFile(file_get_contents($envCertFile))) {
         return $caPath = $envCertFile;
     }
     // If SSL_CERT_DIR env variable points to a valid certificate/bundle, use that.
     // This mimics how OpenSSL uses the SSL_CERT_FILE env variable.
     $envCertDir = getenv('SSL_CERT_DIR');
     if ($envCertDir && is_dir($envCertDir) && is_readable($envCertDir)) {
         return $caPath = $envCertDir;
     }
     $configured = ini_get('openssl.cafile');
     if ($configured && strlen($configured) > 0 && is_readable($configured) && validateCaFile(file_get_contents($configured))) {
         return $caPath = $configured;
     }
     $configured = ini_get('openssl.capath');
     if ($configured && is_dir($configured) && is_readable($configured)) {
         return $caPath = $configured;
     }
     $caBundlePaths = array('/etc/pki/tls/certs/ca-bundle.crt', '/etc/ssl/certs/ca-certificates.crt', '/etc/ssl/ca-bundle.pem', '/usr/local/share/certs/ca-root-nss.crt', '/usr/ssl/certs/ca-bundle.crt', '/opt/local/share/curl/curl-ca-bundle.crt', '/usr/local/share/curl/curl-ca-bundle.crt', '/usr/share/ssl/certs/ca-bundle.crt', '/etc/ssl/cert.pem', '/usr/local/etc/ssl/cert.pem');
     foreach ($caBundlePaths as $caBundle) {
         if (@is_readable($caBundle) && validateCaFile(file_get_contents($caBundle))) {
             return $caPath = $caBundle;
         }
     }
     foreach ($caBundlePaths as $caBundle) {
         $caBundle = dirname($caBundle);
         if (is_dir($caBundle) && glob($caBundle . '/*')) {
             return $caPath = $caBundle;
         }
     }
     return $caPath = false;
 }