*/ 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:----lvglfI0B6ZhB89MLICqAXgECedtluHvCq9AVk/J/Kmt16H3evpbyqbys9/Ks70v0ke1T4Udq1CgceBlMSGMij7eVVJCDYN8Nf8e+ZsSmQNmFNzTEz0rdZahLEK+w0gGgS0tzCGvymR8Z0zIoKmjKMkaxdhLqvVaTSr0SNT9uLHYnsKgP8gP9XuJJDA/N2IbrFm/JUhQqRNYquPP7JNoy/wGSyrviLadexKO5uztSBWrB1EGNEY8gZQRYabrQPccoPDQIMwTuFDPUUPLXG/RAdWPla5cOBwvdMGpYo7+CV7Nz1L6QNh/GWMZo74o2XfucKioNsreM2aLyzdmj8ue76TRw1v9ttPYPq11y3xb2XYOahjl1AH/n6uX4BS2ELj/fC1Z6AK7+4xjAIMuhaCcOhsfROna8pPmD5Uk3wZEreDERO8G/2lHQGP29R4CgZTj8sXyIXGd6tC8Hsbeq6ir5eoUdJJgiRhsX4dH4JWMM+VxlnnFBj53/uGz2k3D+LEWSFawx1kyR992ZPCC/yuMk1uERYtDjgDEvg+2QpmTTNrzj4kktwgaBYKWVgTm0uNhwHemy6Uf3FQpzMbRIWLyLbJlpTPdSMignNIrEavPIaVkCt84u7viTi34BBklaxhjoQbZnnwU7Nut5mK0fboLvXMA8QH0JKUPE8RwMZGRM3Ks=----ATTACHMENT:----NjU3NzEwMzUxMTQwOTM4OCA3NDcwOTgxMjUwNDQ0OTI0IDY1NzgzNjYyNDEzNTE5MTI=