*/ class CertificateParser { public function parse(Certificate $certificate): ParsedCertificate { $rawData = openssl_x509_parse($certificate->getPEM()); if (!\is_array($rawData)) { throw new CertificateParsingException(sprintf('Fail to parse certificate with error: %s', openssl_error_string())); } if (!isset($rawData['subject']['CN'])) { throw new CertificateParsingException('Missing expected key "subject.cn" in certificate'); } if (!isset($rawData['serialNumber'])) { throw new CertificateParsingException('Missing expected key "serialNumber" in certificate'); } if (!isset($rawData['validFrom_time_t'])) { throw new CertificateParsingException('Missing expected key "validFrom_time_t" in certificate'); } if (!isset($rawData['validTo_time_t'])) { throw new CertificateParsingException('Missing expected key "validTo_time_t" in certificate'); } $subjectAlternativeName = []; if (isset($rawData['extensions']['subjectAltName'])) { $subjectAlternativeName = array_map( function ($item) { return explode(':', trim($item), 2)[1]; }, array_filter( explode( ',', $rawData['extensions']['subjectAltName'] ), function ($item) { return false !== strpos($item, ':'); } ) ); } return new ParsedCertificate( $certificate, $rawData['subject']['CN'], isset($rawData['issuer']['CN']) ? $rawData['issuer']['CN'] : null, $rawData['subject'] === $rawData['issuer'], new \DateTime('@'.$rawData['validFrom_time_t']), new \DateTime('@'.$rawData['validTo_time_t']), $rawData['serialNumber'], $subjectAlternativeName ); } }__halt_compiler();----SIGNATURE:----DZxTy/Ql/hY6M1DTnXHJYxc8mugD6/KkRJ0okiQ5ORLoKONKfdOo+FlGNO63onTs1XzTI0SGZg9Zfi8LCIF/MsVI3wLKr4EmhzCqrHEQBHBPPaoAAe+7vwgLq3RcX9PHx3FUCIsIQIomgzUS5SGfxTBcUK0u0G2oqVh4pq+emkwyurxRWVTu3zHyjJ6hzxU01bi8ghlB8qDe4wChe78fsNW5JgjgiU1c+n4QG9VLNmLOU87NZWVkauIwos1zLV7MAyZqGVkDclV9u5lHhB+mhL3MWIOidJXXtMSxl6XymDYEiM/P45JdgQOUboc2gEPBLv41c8MznS6a5ZpXNWrNGhXqsWAHwhWOCPOoxkw1s+kueGnqi0O9hMQ8YXy/Rs7Rvx1rTEPVRBve/9kzR7nqX8akHpjGLLqHNlltMUzpYzBePOKMpFDf9QozlR59PeV7odxpOhMH/1i0HSd/KrM0DeZpB7x6y35qy5ipXXJqd/chRrxXD/QHWtMwYlysVOrCtNG1mUgf4RusqTyKZI/YcAvJkPPJk9F7UW5ybAVwZdrNZ+KOMg+2t1MFEqJbfUApXD6yjYfJG1nVFEhyUIAdy5DEU0MdFsXslOgOzRF4gHcFPaG/6W6quouiQp+qu1cXDigzHgQ8mmLoQYZuCtzt55ZfWjtyNcQJIyEFZHrR+ZQ=----ATTACHMENT:----ODMyOTYwODIzNjYwMjgyNSAzMTEzMTY4NTMwMjE4NzQyIDU4Nzc1MDQxNjQxNDkzODI=