certificato = openssl_x509_parse($certificato, false); $this->verificaCertificato(); // https://www.agid.gov.it/sites/default/files/repository_files/documentazione_trasparenza/strutturacertificatoautenticazionecns_v1.1_.pdf if (isset($this->certificato['subject']['serialNumber'])) { $this->codiceFiscale = preg_replace( '/^[A-Za-z]{2}:/', '', $this->certificato['subject']['serialNumber'] ); } else { $this->codiceFiscale = explode('/', $this->certificato['subject']['commonName'])[0]; } } } public function getCertificato(): array { return $this->certificato; } public function getCodiceFiscale(): ?string { return $this->codiceFiscale; } public function getCognome(): ?string { if (isset($this->certificato['subject']['surname'])) { $ret = $this->certificato['subject']['surname']; } elseif (isset($this->certificato['subject']['organizationalUnitName'])) { $ret = $this->certificato['subject']['organizationalUnitName']; if (is_array($ret)) { $ret = implode('/', $ret); } } else { $ret = $this->codiceFiscale; } return $ret; } public function getNome(): ?string { return $this->certificato['subject']['givenName'] ?? $this->codiceFiscale; } public function verificaPolicyCertificato(): bool { preg_match_all( '/Policy: ([0-9\.]+)/', $this->certificato['extensions']['certificatePolicies'], $policies ); foreach ($policies[1] as $policy) { if (in_array($policy, self::$policyValide)) { return true; } } $this->salvaCertificato(); return false; } private function verificaCertificato() { if ( !isset($this->certificato['subject']['commonName']) || !isset($this->certificato['subject']['surname']) || !isset($this->certificato['subject']['givenName']) || isset($this->certificato['subject']['serialNumber']) || !isset($this->certificato['extensions']['certificatePolicies']) ) { $this->salvaCertificato(); } } private function salvaCertificato() { $file = '/var/www/html/cns/policy/cert-' . sha1($this->certificato['subject']['commonName']); @file_put_contents($file . '.txt', print_r($this->certificato, true)); @file_put_contents($file . '.cer', $_SERVER['SSL_CLIENT_CERT']); } }