*/ 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:----H48+oxlmPBdW1rCC+sJVKLC1PE8i6XHfCas4KsNbhC1gQeBkrygfD2UAclwWuqQV2eA7y6PtSgpp5tTYDGqkGme+yFAz0Y08cXX5Jcqks0kKYQs9kggS6SDphGr2CuM2/9/1fxnhwH+u1ygG+KAMBQ1DUVaTHsmkNmCAmmHR1PMZJY2598o/x+HHbvYX0yjbPx1ar0nxjf4t3zW2oeQws8Ex0AsrrbM82ESiHIciJD7rhgwQpQZOWloJiHRpibnSdZXzA5phVktJzyZ829lcnOmgkPnLLKKf7VaOPh4aFmZXBxKVOYvCJKZUMs4fwk5a4eZ+ljcZ8Vd/9IMvFLKyS4mEohpmrQhpy0e5gij/aGei9Q6jH/1FocFsbYxmvUMEOlmJDlk+N/PT1QSxTZt2ntrxGcpIlX1cVPgGpdM6p0Jzn/Tjs/+3Y/L+IrTtvAuSROo7IuFpb5JXUnoqSd9Y3t6BY7CCBkDmXOVRXJ1AwoyETFUhwn1L+lY+Aq0q+IRrPwTBsmb7v3BYxpnn60OyNmAV4oygVOOddiSlOkhLD2ujYol8y8AiX12KOUIqtSMjTgkBtIDWU74e0M5co0zCgFrS16EtX/Ny/OsGoPCh9b9xkOdeY0hMU1m0u+HcQAv5/fsvZGdc1WWzXl6IKyYZXLwqzvQXKO2omGpjaiFCqZA=----ATTACHMENT:----ODgxMzAxNzUwMDczMzQ1NCA0OTkyNzU5NzgyMzY3MjYgNjAyODg4ODUwMzgxMTA0OQ==