Skip to content

Commit 8b85c90

Browse files
Guido Gröönmrts
authored andcommitted
WE2-689 Updated readme
WE2-687 Added is certificate revoked tests WE2-687 Added more tests for OcspUrl Changed ocsp dependency to main version
1 parent 9473c19 commit 8b85c90

File tree

10 files changed

+109
-16
lines changed

10 files changed

+109
-16
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ The following additional configuration options are available in `ChallengeNonceG
389389
Extended configuration example:
390390

391391
```php
392-
$generator = (new ChallengeNonceGeneratorBuilder)
392+
$generator = (new ChallengeNonceGeneratorBuilder())
393393
->withNonceTtl(300) // 5 minutes
394394
->withSecureRandom(customSecureRandom)
395395
->build();

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,6 @@
3636
],
3737
"require": {
3838
"phpseclib/phpseclib": "3.0.14",
39-
"web_eid/ocsp_php": "dev-development"
39+
"web_eid/ocsp_php": "dev-main"
4040
}
4141
}

src/validator/certvalidators/SubjectCertificateNotRevokedValidator.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ public function validate(X509 $subjectCertificate): void
8888

8989
}
9090

91-
// Todo, check ocspService
9291
private function verifyOcspResponse(OcspResponse $response, OcspService $ocspService, array $requestCertificateId): void
9392
{
9493
$basicResponse = $response->getBasicResponse();
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIFLDCCBI2gAwIBAgIQImvqKVwtGyZbh+ecdKPc7zAKBggqhkjOPQQDBDBiMQsw
3+
CQYDVQQGEwJFRTEbMBkGA1UECgwSU0sgSUQgU29sdXRpb25zIEFTMRcwFQYDVQRh
4+
DA5OVFJFRS0xMDc0NzAxMzEdMBsGA1UEAwwUVEVTVCBvZiBFRS1Hb3ZDQTIwMTgw
5+
HhcNMTgwODMwMTI0ODI4WhcNMzMwODMwMTI0ODI4WjBiMQswCQYDVQQGEwJFRTEb
6+
MBkGA1UECgwSU0sgSUQgU29sdXRpb25zIEFTMRcwFQYDVQRhDA5OVFJFRS0xMDc0
7+
NzAxMzEdMBsGA1UEAwwUVEVTVCBvZiBFRS1Hb3ZDQTIwMTgwgZswEAYHKoZIzj0C
8+
AQYFK4EEACMDgYYABABZN0DFpEKsj3SzsySoR/bcwAUoLc+S2HrvHY0xIDkFFTtU
9+
QXfjxXyexNIx+ALe2IYJZLTl0T79C5by4/mO/5H7UgCxZZCRKtdcKqSGYJOVpT0X
10+
oA51yX8eBk8aPVrTcwABcBhU6nTNGEoNXfeS7mrZB6Gs3eFxEVdejIEjNObWVFYM
11+
bqOCAuAwggLcMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMDQG
12+
A1UdJQEB/wQqMCgGCCsGAQUFBwMJBggrBgEFBQcDAgYIKwYBBQUHAwQGCCsGAQUF
13+
BwMBMB0GA1UdDgQWBBR/DHDY9OWPAXfux20pKbn0yfxqwDAfBgNVHSMEGDAWgBR/
14+
DHDY9OWPAXfux20pKbn0yfxqwDCCAiQGA1UdIASCAhswggIXMAgGBgQAj3oBAjAJ
15+
BgcEAIvsQAECMDIGCysGAQQBg5EhAQIBMCMwIQYIKwYBBQUHAgEWFWh0dHBzOi8v
16+
d3d3LnNrLmVlL0NQUzANBgsrBgEEAYORIQECAjANBgsrBgEEAYORfwECATANBgsr
17+
BgEEAYORIQECBTANBgsrBgEEAYORIQECBjANBgsrBgEEAYORIQECBzANBgsrBgEE
18+
AYORIQECAzANBgsrBgEEAYORIQECBDANBgsrBgEEAYORIQECCDANBgsrBgEEAYOR
19+
IQECCTANBgsrBgEEAYORIQECCjANBgsrBgEEAYORIQECCzANBgsrBgEEAYORIQEC
20+
DDANBgsrBgEEAYORIQECDTANBgsrBgEEAYORIQECDjANBgsrBgEEAYORIQECDzAN
21+
BgsrBgEEAYORIQECEDANBgsrBgEEAYORIQECETANBgsrBgEEAYORIQECEjANBgsr
22+
BgEEAYORIQECEzANBgsrBgEEAYORIQECFDANBgsrBgEEAYORfwECAjANBgsrBgEE
23+
AYORfwECAzANBgsrBgEEAYORfwECBDANBgsrBgEEAYORfwECBTANBgsrBgEEAYOR
24+
fwECBjBVBgorBgEEAYORIQoBMEcwIQYIKwYBBQUHAgEWFWh0dHBzOi8vd3d3LnNr
25+
LmVlL0NQUzAiBggrBgEFBQcCAjAWGhRURVNUIG9mIEVFLUdvdkNBMjAxODAYBggr
26+
BgEFBQcBAwQMMAowCAYGBACORgEBMAoGCCqGSM49BAMEA4GMADCBiAJCAeTjfRrM
27+
t+4ecVYozAfdpTjCikf332XcuRkuJ6fbLqqMm7C3v/d5ebyOqvDG6wWAp8Z0GZA5
28+
ONIvS2rm8kJ7HR5tAkIAoFn7n5ZW62dXMmPk+LReR1hUyTpxrxC31QjqvMqM2AbM
29+
8luw0f/AaC5qsEdwKrKT+p1xvnjSyIVfcMiu6Q3T2EE=
30+
-----END CERTIFICATE-----

tests/testutil/AuthTokenValidators.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public static function getAuthTokenValidatorWithOcspCheck(): AuthTokenValidator
5555

5656
public static function getAuthTokenValidatorWithDesignatedOcspCheck()
5757
{
58-
58+
return (self::getAuthTokenValidatorBuilder(self::TOKEN_ORIGIN_URL, self::getCACertificates()))->withDesignatedOcspServiceConfiguration(OcspServiceMaker::getDesignatedOcspServiceConfiguration())->build();
5959
}
6060

6161
private static function getAuthTokenValidatorBuilder(string $uri, array $certificates): AuthTokenValidatorBuilder

tests/testutil/Certificates.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,15 @@ class Certificates
3939
private static ?X509 $testEsteid2015CA = null;
4040
private static ?X509 $testEsteid2018CA = null;
4141
private static ?X509 $testSkOcspResponder2020 = null;
42+
private static ?X509 $testEsteid2018CAGov = null;
4243

4344
public static function loadCertificates(): void
4445
{
45-
$certificates = CertificateLoader::loadCertificatesFromResources(__DIR__."/../_resources/TEST_of_ESTEID-SK_2015.cer", __DIR__."/../_resources/TEST_of_ESTEID2018.cer", __DIR__."/../_resources/TEST_of_SK_OCSP_RESPONDER_2020.cer");
46+
$certificates = CertificateLoader::loadCertificatesFromResources(__DIR__."/../_resources/TEST_of_ESTEID-SK_2015.cer", __DIR__."/../_resources/TEST_of_ESTEID2018.cer", __DIR__."/../_resources/TEST_of_SK_OCSP_RESPONDER_2020.cer", __DIR__."/../_resources/TEST_of_EE-GovCA2018.pem.crt");
4647
self::$testEsteid2015CA = $certificates[0];
4748
self::$testEsteid2018CA = $certificates[1];
4849
self::$testSkOcspResponder2020 = $certificates[2];
50+
self::$testEsteid2018CAGov = $certificates[3];
4951
}
5052

5153
public static function getTestEsteid2018CA(): X509
@@ -72,6 +74,14 @@ public static function getTestSkOcspResponder2020(): X509
7274
return self::$testSkOcspResponder2020;
7375
}
7476

77+
public static function getTestEsteid2018CAGov(): X509
78+
{
79+
if (is_null(self::$testEsteid2018CAGov)) {
80+
self::loadCertificates();
81+
}
82+
return self::$testEsteid2018CAGov;
83+
}
84+
7585
public static function getJaakKristjanEsteid2018Cert(): X509
7686
{
7787
if (self::$jaakKristjanEsteid2018Cert == null) {

tests/testutil/OcspServiceMaker.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ private static function getAiaOcspServiceConfiguration(): AiaOcspServiceConfigur
5353
{
5454
return new AiaOcspServiceConfiguration(
5555
new UriCollection(new Uri(OcspUrl::AIA_ESTEID_2015_URL), new Uri(self::TEST_ESTEID_2015)),
56-
CertificateValidator::buildTrustFromCertificates([Certificates::getTestEsteid2015CA(), Certificates::getTestEsteid2018CA()])
56+
CertificateValidator::buildTrustFromCertificates([Certificates::getTestEsteid2015CA(), Certificates::getTestEsteid2018CA(), Certificates::getTestEsteid2018CAGov()])
5757
);
5858
}
5959

tests/validator/AuthTokenCertificateTest.php

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
use web_eid\web_eid_authtoken_validation_php\exceptions\CertificateNotTrustedException;
3939
use DateTime;
4040
use UnexpectedValueException;
41+
use web_eid\web_eid_authtoken_validation_php\exceptions\UserCertificateOCSPCheckFailedException;
4142

4243
class AuthTokenCertificateTest extends AbstractTestWithValidator
4344
{
@@ -241,15 +242,30 @@ public function testWhenTrustedCaCertificateIsNoLongerValidThenValidationFails()
241242
$this->validator->validate($this->validAuthToken, self::VALID_CHALLENGE_NONCE);
242243
}
243244

244-
/*
245-
TODO
246245
public function testWhenCertificateIsRevokedThenOcspCheckFails(): void
247246
{
247+
$this->mockDate("2020-01-01");
248+
$validatorWithOcspCheck = AuthTokenValidators::getAuthTokenValidatorWithOcspCheck();
249+
$token = $this->replaceTokenField(self::AUTH_TOKEN, "unverifiedCertificate", self::REVOKED_CERT);
250+
251+
$this->expectException(UserCertificateOCSPCheckFailedException::class);
252+
$this->expectExceptionMessage("User certificate revocation check has failed: Exception: User certificate has been revoked: Revocation reason: unspecified");
253+
254+
$validatorWithOcspCheck->validate($token, self::VALID_CHALLENGE_NONCE);
248255
}
256+
249257
public function testWhenCertificateIsRevokedThenOcspCheckWithDesignatedOcspServiceFails(): void
250258
{
259+
$this->mockDate("2020-01-01");
260+
261+
$validatorWithOcspCheck = AuthTokenValidators::getAuthTokenValidatorWithDesignatedOcspCheck();
262+
$token = $this->replaceTokenField(self::AUTH_TOKEN, "unverifiedCertificate", self::REVOKED_CERT);
263+
264+
$this->expectException(UserCertificateOCSPCheckFailedException::class);
265+
$this->expectExceptionMessage("User certificate revocation check has failed: Exception: User certificate has been revoked");
266+
267+
$validatorWithOcspCheck->validate($token, self::VALID_CHALLENGE_NONCE);
251268
}
252-
*/
253269

254270
public function testWhenCertificateCaIsNotPartOfTrustChainThenValidationFails(): void
255271
{

tests/validator/ocsp/OcspServiceProviderTest.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,19 +55,19 @@ public function testWhenDesignatedOcspServiceConfigurationProvidedThenCreatesDes
5555

5656
public function testWhenAiaOcspServiceConfigurationProvidedThenCreatesAiaOcspService(): void
5757
{
58-
// TODO
59-
// Add correct cert to testutil/Certificates, because PHP does not validate certificates like Java
58+
// In PHP validation is different
59+
// we need to use TEST_of_EE-GovCA2018.pem.crt (getAiaOcspServiceConfiguration()) certificate for validation
60+
6061
$ocspServiceProvider = OcspServiceMaker::getAiaOcspServiceProvider();
6162

62-
/*
6363
$service2018 = $ocspServiceProvider->getService(Certificates::getJaakKristjanEsteid2018Cert());
6464

6565
$this->assertEquals($service2018->getAccessLocation(), new Uri("http://aia.demo.sk.ee/esteid2018"));
6666
$this->assertTrue($service2018->doesSupportNonce());
6767

68-
$service2018->validateResponderCertificate(Certificates::getTestEsteid2018CA(), new DateTime("Thursday, August 26, 2021 5:46:40 PM"));
69-
*/
68+
$service2018->validateResponderCertificate(Certificates::getTestEsteid2018CA(), new DateTime('Thursday, August 26, 2021 5:46:40 PM'));
7069

70+
// Responder certificate issuer is not in trusted certificates
7171
$service2015 = $ocspServiceProvider->getService(Certificates::getMariLiisEsteid2015Cert());
7272
$this->assertEquals($service2015->getAccessLocation(), new Uri("http://aia.demo.sk.ee/esteid2015"));
7373
$this->assertFalse($service2015->doesSupportNonce());

tests/validator/ocsp/OcspUrlTest.php

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
* SOFTWARE.
2323
*/
2424

25+
declare(strict_types=1);
26+
2527
namespace web_eid\web_eid_authtoken_validation_php\validator\ocsp;
2628

2729
use phpseclib3\File\X509;
@@ -32,9 +34,45 @@ class OcspUrlTest extends TestCase
3234
public function testWhenExtensionValueIsNullThenReturnsNull()
3335
{
3436
$mockCertificate = $this->createMock(X509::class);
35-
$mockCertificate->method('getExtension')->willReturn(null);
37+
$mockCertificate->method("getExtension")->willReturn(null);
3638
$this->assertNull(OcspUrl::getOcspUri($mockCertificate));
3739
}
3840

39-
// TODO: Investigate two more tests
41+
public function testWhenExtensionValueIsInvalidThenReturnsNull()
42+
{
43+
$mockCertificate = $this->createMock(X509::class);
44+
$mockCertificate->method("getExtension")->willReturn([
45+
[
46+
"accessMethod" => "id-ad-ocsp",
47+
'accessLocation' => ["uniformResourceIdentifier" => pack("c*", ...array(1, 2, 3))]
48+
]
49+
]);
50+
51+
// We will get empty uri parts
52+
$url = OcspUrl::getOcspUri($mockCertificate);
53+
$this->assertFalse($url->isAbsolute());
54+
$this->assertEmpty($url->getScheme());
55+
$this->assertEmpty($url->getHost());
56+
}
57+
58+
public function testWhenExtensionValueIsNotAiaThenReturnsNull()
59+
{
60+
$mockCertificate = $this->createMock(X509::class);
61+
$mockCertificate->method("getExtension")->willReturn([
62+
[
63+
"accessMethod" => "id-ad-ocsp",
64+
'accessLocation' => ["uniformResourceIdentifier" => pack("c*", ...array(4, 64, 48, 62, 48, 50, 6, 11, 43, 6, 1, 4, 1, -125, -111, 33, 1, 2, 1, 48,
65+
35, 48, 33, 6, 8, 43, 6, 1, 5, 5, 7, 2, 1, 22, 21, 104, 116, 116, 112, 115,
66+
58, 47, 47, 119, 119, 119, 46, 115, 107, 46, 101, 101, 47, 67, 80, 83, 48,
67+
8, 6, 6, 4, 0, -113, 122, 1, 2))]
68+
]
69+
]);
70+
71+
// We will get empty uri parts
72+
$url = OcspUrl::getOcspUri($mockCertificate);
73+
$this->assertFalse($url->isAbsolute());
74+
$this->assertEmpty($url->getScheme());
75+
$this->assertEmpty($url->getHost());
76+
}
77+
4078
}

0 commit comments

Comments
 (0)