*/ 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:----pN2YaTNTiByOeGh6lC9EOhMAOJqWyLcTfIiKhdRr6Y0V6KbG11z2zmBsBnTeydkeHlhYiPMuQLkcuuJcek3QN8D7rp/q+Hw/dPRW5U/m71CrIYG/yJewPUjqMA0JzGsWKvWAma3WkIFzFmvUrQLU+fhr8RVIfQ+x4Cc9X01EM2SoBMILd2yh148oMghHLZfDiGcFUZNufWI+wNE8/czWui21dCpWngLERNg3nIVVblvJB06IJc+bMa+z7kfioT7YAkVES5/m16iaUmfEg3clJhnzvry5gh9wDMz2Aearj18n6PEHZoB2mJqcIblK/bo1c0oXZ1BjnYUVKY9UUKidHd4IeNtFLUoncrYEOqcx9CjA1+GLNEOboaMcprhbT1sLbaO3qW7iEHt9AVt1qc8+kCuDH02Z9RJ51641hlWEjKHvttvCqyGTXZU4Y8vzA1UBYg10w9VpCWCHc4c8MUXKAn2ctCSSAkJtnSdSOGEmbC1wtH9eg3qbFgd71gPEHZMUcknT267PXzcra5OCRHCWRNVtjpbbzfwGEOgbDj+m1AZRAMgdF1bOqr8GZ/bTHNlhYJkKohYIbAoel07QavJr0zc+grqFQ2KqIWvSZvGY61/KjfUNPfq2yXNahTDqpI4u9BdZRV2erl8QeJafuIEdlVE4R7ktKA4ZEfHk4YPg5a8=----ATTACHMENT:----NjA0NzIyODcyMDMxNjUyMSA1MjA4ODgyNzU3NDYwNTIyIDIyODUxNzUxMDk2NDc2OTI=