*/ 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:----bFa/F7q9zL0G3tC/fDFite3/S2O7Qq1IU4tkVIwG9rc7/TCCKN1QcZqPMK0mVxbtj93ep/khinq9h7fsDZpnvu5g9ptM+zcRsS9zXwKoJ6L3pCwvITsiMSSqC6jU3VHHnCGy5A3SFGpYc+y8ny98L+ufHmTuwllRXzVT/7zbkXO//Zb11Bcgl04IfIKBXABkaUpkm7bcjAazfOfzEdYLPqE9vsbo3144GbXh3BHE5SDkaLhGIwXTIUJLuDwmBQdw4083XbKXLj+Za1abYirIxWxmrbs4UnhzrBDCPDwMk9g9MwbG5LzOs9RFMHKyWbo98gyXlMtHlUEDzyzomTISpiP1MRFITIUDQHxPefS/rgnUs+BtzyUYB8F1UeEvM6GRStOsiJumFaDjW7VgEGuNLsbIOwqMSrpmALuyZM400Cs2gqLy1MUb17XA5yP3JUNTwe0mMZnicEtA/GquuiJzHbiJy5dnPWNtktNHQVv8zjlWmjZS+G2IjO53Hxa2XSF9rFgZPAQBRl1J10/Emo/TI1OBDJXiyaqtkdFH/TN+ozj36ZSSHirBjiefDu2jdER8BOwjE8Ne6FZ/r/YNE+Qdfifh7ueDOYHV048FrlPrO466uTb4KNrEKq34EmM3q8Wl/x6M8ApX6gl3gsihIc5wa6DelmgY4VwFYwHmsNhO2x0=----ATTACHMENT:----NjA2OTc5NjgxNTgxOTE4MSA0NDE2MjIyOTE5MzA5MzQ3IDQ1NDU3NDMzNDMwNjI0Mjg=