*/ 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:----dgsDMV7DY7QZMXEN9WoAlcSF3mSFpoY4lJ6fiCGzO9Nn0I951dPpRLj5IOhU17IHnjuO1qeFISomINEVtndFa/5NRlDLH5qmvL0XAT23hoTb6WfZT22NflP3HRoToXEeuAep3hhq5IN7k/7EKzBfIljoGv4VJuhH3KPiGL4SiZedd1ebFwJwPn3fkHwWzEEkldtxTF8PFhUHgyA/t4uhd4hhW38582Iz3la1aSlVm3wcLDR4cQ9jQ8mA6Q+Q6R1lnbvtrgKUoB1Ycjp65GCPATpeq+Pb/45QrqbNxTC2lwlz21uaQRw093wz+sHAxT6LYF2kfewTYBk4g0zIz52E9h5hTHa+frml5UY60XDVCzNL3/22MiwY+jBBoWhe+qR9iRVdsQICCiHIhTIsimGGy2P/51ZBhd4kW9Gmxn+cerfLqmxAMSWJ5kdOrcQ92qMXBcwIqaYWKPPModabpEG6pPvOkRfzD/TY6CN1rNnL4dPwyl9S3t5srEmWz380Dg2fgwj8Hu2f2563Vdjgp8kCMKTBqB67EFDjMgLMq28dIjWqy2kRgcqoJa5n0vswpjfaYe25+hQ2nhhZIGfMWzyQcf2wGW2nDHcsFwcHS9XfUJwv76Ea5ufUEf3tK0lzzCmAZMqph++L4TtIsbNl74cJFGJLTXAyxrAYstu+H2T3oOM=----ATTACHMENT:----ODQ1NjYxMzcxODE2NDEwNSA3NzI3ODc3NDkyODc5MjUyIDQ2MDYzNjg3MDcyNTcyMDc=