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:----LHvlznzbZeY+iUXpazj9spGTrJEikJFVOwr5quydaDbTFIOrbUCcXDmKB3DlpUiyfWw0Gt+2BGKHQz5X7KccKHUFqNmPC7yFKYdzwZZu6r30vyhcbjmR0gKmF/NAQWIPCwTEs8qL0Ff45H/a9ck49lbCzgJfZNhpMG3OJt/twQsijld0bVV0tv7EgV8unzbuwN0zzjJSKGKGQHVDyNjKKIuCimBBh+HuXHE8OHP0NM305crzEXTJFgotS66hKJFQd9dvChkY7E1tgy9birqtI117pP5G0UkeIqlDRu3PX0dszKfcS8tr8sUjYxOx/AZqmaG4B9sc2t0Rn8yOVNRL6ukqI3qZpwuhWz0HOfMUa0eGRnO2hdQtJC7bJElnJd3iWC/E8sACU05Itsfwn6+3NtVhxo0ZdCzAjBFbIFOXqvAzWs124k8GaQYmA4O538MAum/AqxfO1ybnXUo3Q4Kb2smQQJLmmfufSfemwfOaDMszYJYVD2LByoeKi6SAT3djcraH1juxsfwiDCHVuack1n4elhWqJ9RQqqcuQFx6IVgeXytrB0QYVtf4/kvzfvLjlSrt+QzVetjEH6HpZ1ROUkDtcITvFk0z/bE0B/JLRWVNLifyobhmpAN3TeaCWUcldRv6VsfDHf7HWgzeK4L8BMZEzLb5LIe+qwWBHIamod0=----ATTACHMENT:----NTM1ODUzMjcwMzIyMTQ1MyA2NjIzNjA0MDM2MTA5NDA1IDI1MDU0MDQwMDEyNjIyMTg=