[auth] Add tests for CA utility methods

This commit is contained in:
Alessandro Pasotti 2017-10-13 12:59:30 +02:00
parent 566ad8b554
commit 25cd27a513
5 changed files with 260 additions and 2 deletions

View File

@ -29,9 +29,10 @@ from qgis.PyQt.QtNetwork import QSsl, QSslError, QSslSocket
from qgis.testing import (
start_app,
unittest,
unitTestDataPath,
)
from utilities import unitTestDataPath
AUTHDBDIR = tempfile.mkdtemp()
os.environ['QGIS_AUTH_DB_DIR_PATH'] = AUTHDBDIR
start_app()
@ -325,7 +326,7 @@ class TestQgsAuthManager(unittest.TestCase):
config.setSslIgnoredErrorEnums([QSslError.SelfSignedCertificate])
config.setSslPeerVerifyMode(QSslSocket.VerifyNone)
config.setSslPeerVerifyDepth(3)
config.setSslProtocol(QSsl.TlsV1)
config.setSslProtocol(QSsl.TlsV1_1)
msg = 'SSL config is null'
self.assertFalse(config.isNull(), msg)
@ -560,6 +561,48 @@ class TestQgsAuthManager(unittest.TestCase):
self.set_master_password()
def test_110_pkcs12_cas(self):
"""Test if CAs can be read from a pkcs12 bundle"""
path = PKIDATA + '/alice_w-chain.p12'
cas = QgsAuthCertUtils.pkcs12BundleCas(path, 'password')
self.assertEqual(cas[0].issuerInfo(b'CN'), ['Boundless Test Root CA'])
self.assertEqual(cas[0].subjectInfo(b'CN'), ['Boundless Test Issuer CA'])
self.assertEqual(cas[0].serialNumber(), b'02')
self.assertEqual(cas[1].issuerInfo(b'CN'), ['Boundless Test Root CA'])
self.assertEqual(cas[1].subjectInfo(b'CN'), ['Boundless Test Root CA'])
self.assertEqual(cas[1].serialNumber(), b'01')
def test_120_pem_cas_from_file(self):
"""Test if CAs can be read from a pem bundle"""
path = PKIDATA + '/alice-cert_w-chain.pem'
cas = QgsAuthCertUtils.casFromFile(path)
self.assertEqual(cas[0].issuerInfo(b'CN'), ['Boundless Test Root CA'])
self.assertEqual(cas[0].subjectInfo(b'CN'), ['Boundless Test Issuer CA'])
self.assertEqual(cas[0].serialNumber(), b'02')
self.assertEqual(cas[1].issuerInfo(b'CN'), ['Boundless Test Root CA'])
self.assertEqual(cas[1].subjectInfo(b'CN'), ['Boundless Test Root CA'])
self.assertEqual(cas[1].serialNumber(), b'01')
def test_130_cas_merge(self):
"""Test CAs merge """
trusted_path = PKIDATA + '/subissuer_ca_cert.pem'
extra_path = PKIDATA + '/alice-cert_w-chain.pem'
trusted = QgsAuthCertUtils.casFromFile(trusted_path)
extra = QgsAuthCertUtils.casFromFile(extra_path)
merged = QgsAuthCertUtils.casMerge(trusted, extra)
self.assertEqual(len(trusted), 1)
self.assertEqual(len(extra), 2)
self.assertEqual(len(merged), 3)
for c in extra:
self.assertTrue(c in merged)
self.assertTrue(trusted[0] in merged)
if __name__ == '__main__':
unittest.main()

View File

@ -0,0 +1,80 @@
-----BEGIN CERTIFICATE-----
MIIEczCCA9ygAwIBAgIBBTANBgkqhkiG9w0BAQsFADCBzjELMAkGA1UEBhMCVVMx
FzAVBgNVBAgTDldhc2hpbmd0b24sIERDMR0wGwYDVQQHExREaXN0cmljdCBvZiBD
b2x1bWJpYTEaMBgGA1UEChMRQm91bmRsZXNzIFRlc3QgQ0ExHjAcBgNVBAsTFUNl
cnRpZmljYXRlIEF1dGhvcml0eTEhMB8GA1UEAxMYQm91bmRsZXNzIFRlc3QgSXNz
dWVyIENBMSgwJgYJKoZIhvcNAQkBFhl0ZXN0Y2VydEBib3VuZGxlc3NnZW8uY29t
MB4XDTE1MDQxODAwMDAwMFoXDTI1MDQxNzIzNTk1OVowgb4xCzAJBgNVBAYTAlVT
MRcwFQYDVQQIEw5XYXNoaW5ndG9uLCBEQzEdMBsGA1UEBxMURGlzdHJpY3Qgb2Yg
Q29sdW1iaWExGjAYBgNVBAoTEUJvdW5kbGVzcyBUZXN0IENBMRswGQYDVQQLExJD
bGllbnQgQ2VydGlmaWNhdGUxDjAMBgNVBAMTBWFsaWNlMS4wLAYJKoZIhvcNAQkB
Fh9hbGljZV90ZXN0Y2VydEBib3VuZGxlc3NnZW8uY29tMIGfMA0GCSqGSIb3DQEB
AQUAA4GNADCBiQKBgQDUCocRWKuiSAent74zw+HQVUA1cWIgp9odE/oawgE8kyx3
dCX3o/CR1mqfG9vCcFW0vCBBiJmVJv5W3EBIjKpW5yiPoOJqqzQihkNdwoFi+vRO
7370liEjoHwFN+V0S0/UqCT4TKnZLk5HslEp+ekbh9PdBHkS//7rDM47F+PtAQID
AQABo4IBbTCCAWkwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUFcfFxopBpcvWX7VI
y7Qh8Wq37pwwgfkGA1UdIwSB8TCB7oAUnKBH4lVKM9gwpHdVjn30LoPEUlihgdKk
gc8wgcwxCzAJBgNVBAYTAlVTMRcwFQYDVQQIEw5XYXNoaW5ndG9uLCBEQzEdMBsG
A1UEBxMURGlzdHJpY3Qgb2YgQ29sdW1iaWExGjAYBgNVBAoTEUJvdW5kbGVzcyBU
ZXN0IENBMR4wHAYDVQQLExVDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMT
FkJvdW5kbGVzcyBUZXN0IFJvb3QgQ0ExKDAmBgkqhkiG9w0BCQEWGXRlc3RjZXJ0
QGJvdW5kbGVzc2dlby5jb22CAQIwCwYDVR0PBAQDAgSwMBEGCWCGSAGG+EIBAQQE
AwIFoDAeBglghkgBhvhCAQ0EERYPeGNhIGNlcnRpZmljYXRlMA0GCSqGSIb3DQEB
CwUAA4GBAHOiLM5f7mTEQu3Uyh0etnkywJtVxGBwNt1He3KpOzRDceWX/mvPRFRB
44joK5Vk0QoeREoAAwQ63oLRNzu8mnFDFPLRXFRcsvAeBc4ZjJR0JShtNcyhrttZ
tS35YBQ/yUQ/z6fPY7Tum1VDyp4aJKz6OKpO3N6Agzc1PutZEdNT
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEhDCCA+2gAwIBAgIBAjANBgkqhkiG9w0BAQsFADCBzDELMAkGA1UEBhMCVVMx
FzAVBgNVBAgTDldhc2hpbmd0b24sIERDMR0wGwYDVQQHExREaXN0cmljdCBvZiBD
b2x1bWJpYTEaMBgGA1UEChMRQm91bmRsZXNzIFRlc3QgQ0ExHjAcBgNVBAsTFUNl
cnRpZmljYXRlIEF1dGhvcml0eTEfMB0GA1UEAxMWQm91bmRsZXNzIFRlc3QgUm9v
dCBDQTEoMCYGCSqGSIb3DQEJARYZdGVzdGNlcnRAYm91bmRsZXNzZ2VvLmNvbTAe
Fw0xNTA0MTgwMDAwMDBaFw0yNTA0MTcyMzU5NTlaMIHOMQswCQYDVQQGEwJVUzEX
MBUGA1UECBMOV2FzaGluZ3RvbiwgREMxHTAbBgNVBAcTFERpc3RyaWN0IG9mIENv
bHVtYmlhMRowGAYDVQQKExFCb3VuZGxlc3MgVGVzdCBDQTEeMBwGA1UECxMVQ2Vy
dGlmaWNhdGUgQXV0aG9yaXR5MSEwHwYDVQQDExhCb3VuZGxlc3MgVGVzdCBJc3N1
ZXIgQ0ExKDAmBgkqhkiG9w0BCQEWGXRlc3RjZXJ0QGJvdW5kbGVzc2dlby5jb20w
gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMBv9yH4/HYs6E1bN/psalbQxCda
Uj/aA9bFPUzv5yzcLAinqeu8IWlrc/msQdShz9GJ7GssSp71VrydBwDda7jg4BZ5
wdnbtXwj9A4YOL8sQzjlYhuIVnL7vG2/yBCy8ijUS1eWO1/Jci/CFJ5xhg+HBg2z
csfEnP3WYP3r67odAgMBAAGjggFwMIIBbDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud
DgQWBBScoEfiVUoz2DCkd1WOffQug8RSWDCB+QYDVR0jBIHxMIHugBRdLIDLz7y6
WETB6Jp6P9A5kQ7vE6GB0qSBzzCBzDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDldh
c2hpbmd0b24sIERDMR0wGwYDVQQHExREaXN0cmljdCBvZiBDb2x1bWJpYTEaMBgG
A1UEChMRQm91bmRsZXNzIFRlc3QgQ0ExHjAcBgNVBAsTFUNlcnRpZmljYXRlIEF1
dGhvcml0eTEfMB0GA1UEAxMWQm91bmRsZXNzIFRlc3QgUm9vdCBDQTEoMCYGCSqG
SIb3DQEJARYZdGVzdGNlcnRAYm91bmRsZXNzZ2VvLmNvbYIBATALBgNVHQ8EBAMC
AQYwEQYJYIZIAYb4QgEBBAQDAgAHMB4GCWCGSAGG+EIBDQQRFg94Y2EgY2VydGlm
aWNhdGUwDQYJKoZIhvcNAQELBQADgYEAjDHCC0mEU76XmPy7BN/sLozWsnMrz9Y2
usFMVvCvehnEYuB/+2N+zleNqW07ROLi/mpjjKGCyB5U7GQQl5EUL4PE5Kv75/8W
TRvI4k0VzKLHZ9LBFX8ccvNzY289VVH+Gvzt/p61KbyKRhj6lW0Kf5UEfHBX0qhq
wC3eT6QoTnI=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEgjCCA+ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBzDELMAkGA1UEBhMCVVMx
FzAVBgNVBAgTDldhc2hpbmd0b24sIERDMR0wGwYDVQQHExREaXN0cmljdCBvZiBD
b2x1bWJpYTEaMBgGA1UEChMRQm91bmRsZXNzIFRlc3QgQ0ExHjAcBgNVBAsTFUNl
cnRpZmljYXRlIEF1dGhvcml0eTEfMB0GA1UEAxMWQm91bmRsZXNzIFRlc3QgUm9v
dCBDQTEoMCYGCSqGSIb3DQEJARYZdGVzdGNlcnRAYm91bmRsZXNzZ2VvLmNvbTAe
Fw0xNTA0MTgwMDAwMDBaFw0yNTA0MTcyMzU5NTlaMIHMMQswCQYDVQQGEwJVUzEX
MBUGA1UECBMOV2FzaGluZ3RvbiwgREMxHTAbBgNVBAcTFERpc3RyaWN0IG9mIENv
bHVtYmlhMRowGAYDVQQKExFCb3VuZGxlc3MgVGVzdCBDQTEeMBwGA1UECxMVQ2Vy
dGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDExZCb3VuZGxlc3MgVGVzdCBSb290
IENBMSgwJgYJKoZIhvcNAQkBFhl0ZXN0Y2VydEBib3VuZGxlc3NnZW8uY29tMIGf
MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEGCpbDfogZjX8qrgg+KjjwQyuIcYn
eNpjS0W9SIEtE++ffb42jpgnSZqgNgLRQNMn66DjUJ4ffnEqAS0J+qvFtRS5NaW7
0Z91NvNdulhKqg7H9ftnDiUQZ5Felaff0amYZkAP9e/6TqyA7B7LPSmVGVfWnMEd
a/tULejDqcCJYwIDAQABo4IBcDCCAWwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
FgQUXSyAy8+8ulhEweiaej/QOZEO7xMwgfkGA1UdIwSB8TCB7oAUXSyAy8+8ulhE
weiaej/QOZEO7xOhgdKkgc8wgcwxCzAJBgNVBAYTAlVTMRcwFQYDVQQIEw5XYXNo
aW5ndG9uLCBEQzEdMBsGA1UEBxMURGlzdHJpY3Qgb2YgQ29sdW1iaWExGjAYBgNV
BAoTEUJvdW5kbGVzcyBUZXN0IENBMR4wHAYDVQQLExVDZXJ0aWZpY2F0ZSBBdXRo
b3JpdHkxHzAdBgNVBAMTFkJvdW5kbGVzcyBUZXN0IFJvb3QgQ0ExKDAmBgkqhkiG
9w0BCQEWGXRlc3RjZXJ0QGJvdW5kbGVzc2dlby5jb22CAQEwCwYDVR0PBAQDAgEG
MBEGCWCGSAGG+EIBAQQEAwIABzAeBglghkgBhvhCAQ0EERYPeGNhIGNlcnRpZmlj
YXRlMA0GCSqGSIb3DQEBCwUAA4GBAKcAfz+FBZ0UIOZdWZFgMQB2CahG1vuYoumr
ZfSeiai6Tl7zOOXpfiImbfMT3XSflidQHPRkjMrZ1skiRQwk//ctakXKl2SS8wBY
V7RjtsQGSb5/o74k3zKNyh3OQThWLyibvJPuBL8OMKA2pRC/cH5jXC+7xMA6Ianf
NVB9w9A3
-----END CERTIFICATE-----

Binary file not shown.

View File

@ -0,0 +1,135 @@
-----BEGIN CERTIFICATE-----
MIIEjDCCA/WgAwIBAgIBAzANBgkqhkiG9w0BAQsFADCBzjELMAkGA1UEBhMCVVMx
FzAVBgNVBAgTDldhc2hpbmd0b24sIERDMR0wGwYDVQQHExREaXN0cmljdCBvZiBD
b2x1bWJpYTEaMBgGA1UEChMRQm91bmRsZXNzIFRlc3QgQ0ExHjAcBgNVBAsTFUNl
cnRpZmljYXRlIEF1dGhvcml0eTEhMB8GA1UEAxMYQm91bmRsZXNzIFRlc3QgSXNz
dWVyIENBMSgwJgYJKoZIhvcNAQkBFhl0ZXN0Y2VydEBib3VuZGxlc3NnZW8uY29t
MB4XDTE1MDQxODAwMDAwMFoXDTI1MDQxNzIzNTk1OVowgdQxCzAJBgNVBAYTAlVT
MRcwFQYDVQQIEw5XYXNoaW5ndG9uLCBEQzEdMBsGA1UEBxMURGlzdHJpY3Qgb2Yg
Q29sdW1iaWExGjAYBgNVBAoTEUJvdW5kbGVzcyBUZXN0IENBMSEwHwYDVQQLExhD
ZXJ0aWZpY2F0ZSBTdWJBdXRob3JpdHkxJDAiBgNVBAMTG0JvdW5kbGVzcyBUZXN0
IFN1Yklzc3VlciBDQTEoMCYGCSqGSIb3DQEJARYZdGVzdGNlcnRAYm91bmRsZXNz
Z2VvLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuyfr14qY4Cs+j70Z
KIv1PvRrRRVF5C1kydjeDhUrdH8CbzIQ4+9xlph2Ugvpa+GVSuEJoiiUcxK7TEwj
qjYUNGAmdOAxXwcU3oPYnokX2E12MQXSzV93PQ/6CrhTQdcDxBdXRE+mXKvpebJi
IWWiA/DtpH531yyxdeT+Rz5MhvUCAwEAAaOCAXAwggFsMA8GA1UdEwEB/wQFMAMB
Af8wHQYDVR0OBBYEFJy9Ta8JHOsbqF8e5i+dVKtyNluhMIH5BgNVHSMEgfEwge6A
FJygR+JVSjPYMKR3VY599C6DxFJYoYHSpIHPMIHMMQswCQYDVQQGEwJVUzEXMBUG
A1UECBMOV2FzaGluZ3RvbiwgREMxHTAbBgNVBAcTFERpc3RyaWN0IG9mIENvbHVt
YmlhMRowGAYDVQQKExFCb3VuZGxlc3MgVGVzdCBDQTEeMBwGA1UECxMVQ2VydGlm
aWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDExZCb3VuZGxlc3MgVGVzdCBSb290IENB
MSgwJgYJKoZIhvcNAQkBFhl0ZXN0Y2VydEBib3VuZGxlc3NnZW8uY29tggECMAsG
A1UdDwQEAwIBBjARBglghkgBhvhCAQEEBAMCAAcwHgYJYIZIAYb4QgENBBEWD3hj
YSBjZXJ0aWZpY2F0ZTANBgkqhkiG9w0BAQsFAAOBgQBoV8b2I5+LmmMyHeaR7QeS
cSEYLDHpbWQb3jBJcsHjnbquFLV8437bPhBB/0b5YoVCbJt+UO6EKJ7HA3oVNXOS
Z3MfX5xXFbBJa+sSLhiWMtfi2wXzkCECvN2ZC+NDp6d5n5LK1eaoN+TUQRFP+Mm/
RAMmao5DkWetdZYop8Vi+g==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEhDCCA+2gAwIBAgIBAjANBgkqhkiG9w0BAQsFADCBzDELMAkGA1UEBhMCVVMx
FzAVBgNVBAgTDldhc2hpbmd0b24sIERDMR0wGwYDVQQHExREaXN0cmljdCBvZiBD
b2x1bWJpYTEaMBgGA1UEChMRQm91bmRsZXNzIFRlc3QgQ0ExHjAcBgNVBAsTFUNl
cnRpZmljYXRlIEF1dGhvcml0eTEfMB0GA1UEAxMWQm91bmRsZXNzIFRlc3QgUm9v
dCBDQTEoMCYGCSqGSIb3DQEJARYZdGVzdGNlcnRAYm91bmRsZXNzZ2VvLmNvbTAe
Fw0xNTA0MTgwMDAwMDBaFw0yNTA0MTcyMzU5NTlaMIHOMQswCQYDVQQGEwJVUzEX
MBUGA1UECBMOV2FzaGluZ3RvbiwgREMxHTAbBgNVBAcTFERpc3RyaWN0IG9mIENv
bHVtYmlhMRowGAYDVQQKExFCb3VuZGxlc3MgVGVzdCBDQTEeMBwGA1UECxMVQ2Vy
dGlmaWNhdGUgQXV0aG9yaXR5MSEwHwYDVQQDExhCb3VuZGxlc3MgVGVzdCBJc3N1
ZXIgQ0ExKDAmBgkqhkiG9w0BCQEWGXRlc3RjZXJ0QGJvdW5kbGVzc2dlby5jb20w
gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMBv9yH4/HYs6E1bN/psalbQxCda
Uj/aA9bFPUzv5yzcLAinqeu8IWlrc/msQdShz9GJ7GssSp71VrydBwDda7jg4BZ5
wdnbtXwj9A4YOL8sQzjlYhuIVnL7vG2/yBCy8ijUS1eWO1/Jci/CFJ5xhg+HBg2z
csfEnP3WYP3r67odAgMBAAGjggFwMIIBbDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud
DgQWBBScoEfiVUoz2DCkd1WOffQug8RSWDCB+QYDVR0jBIHxMIHugBRdLIDLz7y6
WETB6Jp6P9A5kQ7vE6GB0qSBzzCBzDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDldh
c2hpbmd0b24sIERDMR0wGwYDVQQHExREaXN0cmljdCBvZiBDb2x1bWJpYTEaMBgG
A1UEChMRQm91bmRsZXNzIFRlc3QgQ0ExHjAcBgNVBAsTFUNlcnRpZmljYXRlIEF1
dGhvcml0eTEfMB0GA1UEAxMWQm91bmRsZXNzIFRlc3QgUm9vdCBDQTEoMCYGCSqG
SIb3DQEJARYZdGVzdGNlcnRAYm91bmRsZXNzZ2VvLmNvbYIBATALBgNVHQ8EBAMC
AQYwEQYJYIZIAYb4QgEBBAQDAgAHMB4GCWCGSAGG+EIBDQQRFg94Y2EgY2VydGlm
aWNhdGUwDQYJKoZIhvcNAQELBQADgYEAjDHCC0mEU76XmPy7BN/sLozWsnMrz9Y2
usFMVvCvehnEYuB/+2N+zleNqW07ROLi/mpjjKGCyB5U7GQQl5EUL4PE5Kv75/8W
TRvI4k0VzKLHZ9LBFX8ccvNzY289VVH+Gvzt/p61KbyKRhj6lW0Kf5UEfHBX0qhq
wC3eT6QoTnI=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEgjCCA+ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBzDELMAkGA1UEBhMCVVMx
FzAVBgNVBAgTDldhc2hpbmd0b24sIERDMR0wGwYDVQQHExREaXN0cmljdCBvZiBD
b2x1bWJpYTEaMBgGA1UEChMRQm91bmRsZXNzIFRlc3QgQ0ExHjAcBgNVBAsTFUNl
cnRpZmljYXRlIEF1dGhvcml0eTEfMB0GA1UEAxMWQm91bmRsZXNzIFRlc3QgUm9v
dCBDQTEoMCYGCSqGSIb3DQEJARYZdGVzdGNlcnRAYm91bmRsZXNzZ2VvLmNvbTAe
Fw0xNTA0MTgwMDAwMDBaFw0yNTA0MTcyMzU5NTlaMIHMMQswCQYDVQQGEwJVUzEX
MBUGA1UECBMOV2FzaGluZ3RvbiwgREMxHTAbBgNVBAcTFERpc3RyaWN0IG9mIENv
bHVtYmlhMRowGAYDVQQKExFCb3VuZGxlc3MgVGVzdCBDQTEeMBwGA1UECxMVQ2Vy
dGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDExZCb3VuZGxlc3MgVGVzdCBSb290
IENBMSgwJgYJKoZIhvcNAQkBFhl0ZXN0Y2VydEBib3VuZGxlc3NnZW8uY29tMIGf
MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEGCpbDfogZjX8qrgg+KjjwQyuIcYn
eNpjS0W9SIEtE++ffb42jpgnSZqgNgLRQNMn66DjUJ4ffnEqAS0J+qvFtRS5NaW7
0Z91NvNdulhKqg7H9ftnDiUQZ5Felaff0amYZkAP9e/6TqyA7B7LPSmVGVfWnMEd
a/tULejDqcCJYwIDAQABo4IBcDCCAWwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
FgQUXSyAy8+8ulhEweiaej/QOZEO7xMwgfkGA1UdIwSB8TCB7oAUXSyAy8+8ulhE
weiaej/QOZEO7xOhgdKkgc8wgcwxCzAJBgNVBAYTAlVTMRcwFQYDVQQIEw5XYXNo
aW5ndG9uLCBEQzEdMBsGA1UEBxMURGlzdHJpY3Qgb2YgQ29sdW1iaWExGjAYBgNV
BAoTEUJvdW5kbGVzcyBUZXN0IENBMR4wHAYDVQQLExVDZXJ0aWZpY2F0ZSBBdXRo
b3JpdHkxHzAdBgNVBAMTFkJvdW5kbGVzcyBUZXN0IFJvb3QgQ0ExKDAmBgkqhkiG
9w0BCQEWGXRlc3RjZXJ0QGJvdW5kbGVzc2dlby5jb22CAQEwCwYDVR0PBAQDAgEG
MBEGCWCGSAGG+EIBAQQEAwIABzAeBglghkgBhvhCAQ0EERYPeGNhIGNlcnRpZmlj
YXRlMA0GCSqGSIb3DQEBCwUAA4GBAKcAfz+FBZ0UIOZdWZFgMQB2CahG1vuYoumr
ZfSeiai6Tl7zOOXpfiImbfMT3XSflidQHPRkjMrZ1skiRQwk//ctakXKl2SS8wBY
V7RjtsQGSb5/o74k3zKNyh3OQThWLyibvJPuBL8OMKA2pRC/cH5jXC+7xMA6Ianf
NVB9w9A3
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEijCCA/OgAwIBAgIBAjANBgkqhkiG9w0BAQsFADCBzjELMAkGA1UEBhMCVVMx
FzAVBgNVBAgTDldhc2hpbmd0b24sIERDMR0wGwYDVQQHExREaXN0cmljdCBvZiBD
b2x1bWJpYTEaMBgGA1UEChMRQm91bmRsZXNzIFRlc3QgQ0ExHjAcBgNVBAsTFUNl
cnRpZmljYXRlIEF1dGhvcml0eTEhMB8GA1UEAxMYQm91bmRsZXNzIFRlc3QgUm9v
dCAyIENBMSgwJgYJKoZIhvcNAQkBFhl0ZXN0Y2VydEBib3VuZGxlc3NnZW8uY29t
MB4XDTE1MDQxODAwMDAwMFoXDTI1MDQxNzIzNTk1OVowgdAxCzAJBgNVBAYTAlVT
MRcwFQYDVQQIEw5XYXNoaW5ndG9uLCBEQzEdMBsGA1UEBxMURGlzdHJpY3Qgb2Yg
Q29sdW1iaWExGjAYBgNVBAoTEUJvdW5kbGVzcyBUZXN0IENBMR4wHAYDVQQLExVD
ZXJ0aWZpY2F0ZSBBdXRob3JpdHkxIzAhBgNVBAMTGkJvdW5kbGVzcyBUZXN0IElz
c3VlciAyIENBMSgwJgYJKoZIhvcNAQkBFhl0ZXN0Y2VydEBib3VuZGxlc3NnZW8u
Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2G8fkZB8eF2gbA76gOecp
lorNcvyEYpqMwL0XiDAO47VakKmqaRus07C8PnL9flpdx82Te0yJm+QYYgh38M6O
Zo6Jx8bTI8cp99Qu4h0nP60kZv8CpMSvdf/ZPEN2mySZnDQgZixmDGEZGgjEmZrn
TODX+KGYUSfUe89xtPA7jQIDAQABo4IBcjCCAW4wDwYDVR0TAQH/BAUwAwEB/zAd
BgNVHQ4EFgQUrULU2MLFuxXseRmpABXeHrbeflEwgfsGA1UdIwSB8zCB8IAUqrP9
h3LdgI2DUOWCKZO/VOHCvBihgdSkgdEwgc4xCzAJBgNVBAYTAlVTMRcwFQYDVQQI
Ew5XYXNoaW5ndG9uLCBEQzEdMBsGA1UEBxMURGlzdHJpY3Qgb2YgQ29sdW1iaWEx
GjAYBgNVBAoTEUJvdW5kbGVzcyBUZXN0IENBMR4wHAYDVQQLExVDZXJ0aWZpY2F0
ZSBBdXRob3JpdHkxITAfBgNVBAMTGEJvdW5kbGVzcyBUZXN0IFJvb3QgMiBDQTEo
MCYGCSqGSIb3DQEJARYZdGVzdGNlcnRAYm91bmRsZXNzZ2VvLmNvbYIBATALBgNV
HQ8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMB4GCWCGSAGG+EIBDQQRFg94Y2Eg
Y2VydGlmaWNhdGUwDQYJKoZIhvcNAQELBQADgYEAupOVftVPnaR8pGcCMx42o23y
Y1CGM18u87U7aBHY0aBoC7GJKugQeJ0aeIP+2wEbbGvrm7FMSlk7+ZhdEKsELjRD
f/6egZV1tbsIKFNleg3MY7jCIAor/KrYNSzxemheYRUwaS8JgJAZiQORKmJqdn6I
Pl8PyEdLvgv63KY258k=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEiDCCA/GgAwIBAgIBATANBgkqhkiG9w0BAQsFADCBzjELMAkGA1UEBhMCVVMx
FzAVBgNVBAgTDldhc2hpbmd0b24sIERDMR0wGwYDVQQHExREaXN0cmljdCBvZiBD
b2x1bWJpYTEaMBgGA1UEChMRQm91bmRsZXNzIFRlc3QgQ0ExHjAcBgNVBAsTFUNl
cnRpZmljYXRlIEF1dGhvcml0eTEhMB8GA1UEAxMYQm91bmRsZXNzIFRlc3QgUm9v
dCAyIENBMSgwJgYJKoZIhvcNAQkBFhl0ZXN0Y2VydEBib3VuZGxlc3NnZW8uY29t
MB4XDTE1MDQxODAwMDAwMFoXDTI1MDQxNzIzNTk1OVowgc4xCzAJBgNVBAYTAlVT
MRcwFQYDVQQIEw5XYXNoaW5ndG9uLCBEQzEdMBsGA1UEBxMURGlzdHJpY3Qgb2Yg
Q29sdW1iaWExGjAYBgNVBAoTEUJvdW5kbGVzcyBUZXN0IENBMR4wHAYDVQQLExVD
ZXJ0aWZpY2F0ZSBBdXRob3JpdHkxITAfBgNVBAMTGEJvdW5kbGVzcyBUZXN0IFJv
b3QgMiBDQTEoMCYGCSqGSIb3DQEJARYZdGVzdGNlcnRAYm91bmRsZXNzZ2VvLmNv
bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0qJENg4I929Zk+AR8pZVUj+Z
SDbv+ddwuRrXJE/GZ6DGzNF8dKs69005kRMkGaoamuDQDNuRAU2BOBwlrUyqnNfP
arjicp6I0j34NJp1OpIr6H4TqKPINJWQ8TfN1xGVJZJ2a3vhb7J9dJIT6B1Ds0cR
NlZ3fFlEzJXd08z3+y0CAwEAAaOCAXIwggFuMA8GA1UdEwEB/wQFMAMBAf8wHQYD
VR0OBBYEFKqz/Ydy3YCNg1DlgimTv1ThwrwYMIH7BgNVHSMEgfMwgfCAFKqz/Ydy
3YCNg1DlgimTv1ThwrwYoYHUpIHRMIHOMQswCQYDVQQGEwJVUzEXMBUGA1UECBMO
V2FzaGluZ3RvbiwgREMxHTAbBgNVBAcTFERpc3RyaWN0IG9mIENvbHVtYmlhMRow
GAYDVQQKExFCb3VuZGxlc3MgVGVzdCBDQTEeMBwGA1UECxMVQ2VydGlmaWNhdGUg
QXV0aG9yaXR5MSEwHwYDVQQDExhCb3VuZGxlc3MgVGVzdCBSb290IDIgQ0ExKDAm
BgkqhkiG9w0BCQEWGXRlc3RjZXJ0QGJvdW5kbGVzc2dlby5jb22CAQEwCwYDVR0P
BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAeBglghkgBhvhCAQ0EERYPeGNhIGNl
cnRpZmljYXRlMA0GCSqGSIb3DQEBCwUAA4GBAHeXzhflOqHETrwtCuE+CQjkfEiV
De0ieewBcrOuphgUa9O0V+q1SRKodT5OIZoAA3zNa1dhCxxQ64Pg2dzic7KwlbMU
XSwm3gD10j5eNuTKjCb21E5aOC3pZoT/bJAkiFy5OYl6vzyNzgbVru76PzEkNtSe
7VRUHC7U8rWKiY0l
-----END CERTIFICATE-----