Skip to content
Snippets Groups Projects
Commit d751fedf authored by Roeland Jago Douma's avatar Roeland Jago Douma
Browse files

phpsec lib can't parse multiple certs in one go


So we have to split it manually and do it ourselves

Signed-off-by: default avatarRoeland Jago Douma <roeland@famdouma.nl>
parent 4373afea
No related branches found
No related tags found
No related merge requests found
...@@ -215,6 +215,18 @@ class Installer { ...@@ -215,6 +215,18 @@ class Installer {
return false; return false;
} }
/**
* Split the certificate file in individual certs
*
* @param string $cert
* @return string[]
*/
private function splitCerts(string $cert): array {
preg_match_all('([\-]{3,}[\S\ ]+?[\-]{3,}[\S\s]+?[\-]{3,}[\S\ ]+?[\-]{3,})', $cert, $matches);
return $matches[0];
}
/** /**
* Downloads an app and puts it into the app directory * Downloads an app and puts it into the app directory
* *
...@@ -231,12 +243,18 @@ class Installer { ...@@ -231,12 +243,18 @@ class Installer {
if ($app['id'] === $appId) { if ($app['id'] === $appId) {
// Load the certificate // Load the certificate
$certificate = new X509(); $certificate = new X509();
$certificate->loadCA(file_get_contents(__DIR__ . '/../../resources/codesigning/root.crt')); $rootCrt = file_get_contents(__DIR__ . '/../../resources/codesigning/root.crt');
$rootCrts = $this->splitCerts($rootCrt);
foreach ($rootCrts as $rootCrt) {
$certificate->loadCA($rootCrt);
}
$loadedCertificate = $certificate->loadX509($app['certificate']); $loadedCertificate = $certificate->loadX509($app['certificate']);
// Verify if the certificate has been revoked // Verify if the certificate has been revoked
$crl = new X509(); $crl = new X509();
$crl->loadCA(file_get_contents(__DIR__ . '/../../resources/codesigning/root.crt')); foreach ($rootCrts as $rootCrt) {
$crl->loadCA($rootCrt);
}
$crl->loadCRL(file_get_contents(__DIR__ . '/../../resources/codesigning/root.crl')); $crl->loadCRL(file_get_contents(__DIR__ . '/../../resources/codesigning/root.crl'));
if ($crl->validateSignature() !== true) { if ($crl->validateSignature() !== true) {
throw new \Exception('Could not validate CRL signature'); throw new \Exception('Could not validate CRL signature');
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment