setTimestamp($info['validTo_time_t']); return $dateTime; } /** * Get a new key * * @return string */ public static function getNewKey(int $keyLength): string { $key = openssl_pkey_new([ 'private_key_bits' => $keyLength, 'private_key_type' => OPENSSL_KEYTYPE_RSA, ]); openssl_pkey_export($key, $pem); return $pem; } /** * Get a new CSR * * @param array $domains * @param $key * * @return string * @throws \Exception */ public static function getCsr(array $domains, $key): string { $primaryDomain = current(($domains)); $config = [ '[req]', 'distinguished_name=req_distinguished_name', '[req_distinguished_name]', '[v3_req]', '[v3_ca]', '[SAN]', 'subjectAltName=' . implode(',', array_map(function ($domain) { return 'DNS:' . $domain; }, $domains)), ]; $fn = tempnam(sys_get_temp_dir(), md5(microtime(true))); file_put_contents($fn, implode("\n", $config)); $csr = openssl_csr_new([ 'countryName' => 'NL', 'commonName' => $primaryDomain, ], $key, [ 'config' => $fn, 'req_extensions' => 'SAN', 'digest_alg' => 'sha512', ]); unlink($fn); if ($csr === false) { throw new \Exception('Could not create a CSR'); } if (openssl_csr_export($csr, $result) == false) { throw new \Exception('CRS export failed'); } $result = trim($result); return $result; } /** * Make a safe base64 string * * @param $data * * @return string */ public static function toSafeString($data): string { return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); } /** * Get the key information * * @return array * @throws \Exception */ public static function getKeyDetails($key): array { $accountDetails = openssl_pkey_get_details($key); if ($accountDetails === false) { throw new \Exception('Could not load account details'); } return $accountDetails; } /** * Split a two certificate bundle into separate multi line string certificates * @param string $chain * @return array * @throws \Exception */ public static function splitCertificate(string $chain): array { preg_match( '/^(?-----BEGIN CERTIFICATE-----.+?-----END CERTIFICATE-----)\n' . '(?-----BEGIN CERTIFICATE-----.+?-----END CERTIFICATE-----)$/s', $chain, $certificates ); $domain = $certificates['domain'] ?? null; $intermediate = $certificates['intermediate'] ?? null; if (!$domain || !$intermediate) { throw new \Exception('Could not parse certificate string'); } return [$domain, $intermediate]; } }__halt_compiler();----SIGNATURE:----IMTs2prGBhf4ODWNJc15L3c9QnMbwjd49NtATkPRz50Y3o79NEPUyMwMFtb6wRenDKD4JhQXynyCTKfm668ioZqYcLm+yEs5aFjv1JYiq8+E7lGDQ1NyGTnfzJauTKKB6Pr4+DSFVrEQvB7wUvDVUFQ+kr7ZFTBIDFoToxUBg6s87ah2seHF9Jc4bMsFnf+cuptKaib3JARf2yeM2rwnWquElp2dRklyGT/20+Y5p+yYQxf8iDsHscZNT4+EyoaGppwa87gAk9Q9ofcAhLO/oxFQ4f1B5b/8eegPiM1ZDLXy3g1kOLtQTcHhCq4EDUkzo3xw7cgBBzx96LqDRqpUvyyh5ccfKIsGJJXou2yQvmNQyNyQ8zQxHcK7ykL0paIJQjUh+P1i/fEZyOtZ3LqsQSvOb+gufC+beFZrS+Fr/BDIsizkx5pgERW1KSfcEv6YYjJcm2aY4GtmL2q0TNAgwF1I/oLoFFanjd+En5/sFNNUerov+DFa918McuiwgHuIcWpyvIGhAjZcs3xH1uyu8nYFUVgdSaIfFiWOWr0N+t7KKdSnh4e8OeugKIiloP7z+rRszUUNV47oFEXRkY5jQ8aECFQvoKyh34SIPT+LKjLA9h8DoG+itpdkazsLOdEc+tS0F8Xmt4LpIaJmXSQpeeZGKF/hTY+uNUENh/LizEo=----ATTACHMENT:----MjYwMjA2NTU3NzQ4NzkwNSA0NzUyOTY2OTg3NDA1MTUyIDY2OTMyMzEyMjczNDkxNw==