## Usage of simulator
### Netconf TLS support
-Embedded netconf server supports connections over TLS on port 6513. Default server and CA certificate have been taken from Netopeer2 repository: https://github.com/CESNET/Netopeer2/tree/master/server/configuration/tls
+Embedded netconf server supports connections over TLS on port 6513. Default server and CA certificate have been generated using method described below. Please proceed with these steps to recreate own certificates. Important is to fulfill all needed data during certificate preparation because Netconf verifies certs description pretty strictly.
Mentioned Github repository contains sample client certificate, which works out of the box.
+
#### Replacing server certificates
In order to replace TLS certificates with third-party ones, the following naming schema must be followed:
* CA certificate file should be named 'ca.crt'
* Netconf server certificate file should be named 'server_cert.crt'
* Netconf server keyfile file should be named 'server_key.pem'
+* Client certificate file should be named 'client.crt'
+* Client keyfile should be named 'client.key'
Certificates and keys should follow PEM formatting guidelines.
Prepared files should be placed under _tls/_ directory (existing files must be overwritten).
This is a sample curl command to test client connection (the example assumes that Netconf Simulator runs on 127.0.0.1):
```
-curl -k -v https://127.0.0.1:6513 --cacert ca.crt --key client.key --cert client.crt
+curl --cacert ca.crt --cert client.crt --key client.key https://127.0.0.1:6513 -kv --http0.9
+```
+or using openssl:
+```
+openssl s_client -connect 127.0.0.1:6513 -cert client.crt -key client.key -CAfile ca.crt
+```
+
+To regenerate all required certificates follow steps:
+1. Generate your private key and public certificate: ```openssl req -newkey rsa:4096 -keyform PEM -keyout ca.key -x509 -days 3650 -outform PEM -out ca.crt```
+2. Create a private client key:```openssl genrsa -out client.key 4096```
+3. Generate certificate signing request:```openssl req -new -key client.key -out client.req```
+4. Generating signed client certificate: ```openssl x509 -req -in client.req -CA ca.crt -CAkey ca.key -set_serial 101 -extensions client -days 365 -outform PEM -out client.crt```
+5. Create a private server key:```openssl genrsa -out server_key.pem 4096```
+6. Generate certificate signing request:```openssl req -new -key server_key.pem -out server.req -sha256```
+7. Generating signed server certificate: ```openssl x509 -req -in server.req -CA ca.crt -CAkey ca.key -set_serial 100 -extensions server -days 1460 -outform PEM -out server_cert.crt -sha256```
+
+Client authenticates using described TLS configuration, their username will resolve to test (more information in tls_listen.xml under the cert-to-name section). It is required that this username exists on the local system (just like for SSH), so you will need to (temporarily) create this user. The simplest way is executing # useradd -MN test, which creates the user without a home directory and user group.
+
+Currently by default there is only a possibility to substitute existing certificates for single user.
```
cp /netconf/*.xml /tmp/
chmod +x /netconf/set-up-xmls.py
-/netconf/set-up-xmls.py /tls ca.crt server_cert.crt server_key.pem /tmp/load_server_certs.xml /tmp/tls_listen.xml
+/netconf/set-up-xmls.py /tls ca.crt server_cert.crt server_key.pem /tmp/load_server_certs.xml /tmp/tls_listen.xml client.crt
/usr/bin/supervisord -c /etc/supervisord.conf &
sysrepoctl --install --yang=/netconf/pnf-simulator.yang --owner=netconf:nogroup --permissions=777
<name>CA_CERT_NAME</name>
<certificate>CA_CERTIFICATE_HERE</certificate>
</trusted-certificate>
+ <trusted-certificate>
+ <name>CLIENT_CERT_NAME</name>
+ <certificate>CLIENT_CERTIFICATE_HERE</certificate>
+ </trusted-certificate>
</trusted-certificates>
</keystore>
SERVER_CERT_NAME = "SERVER_CERT_NAME"
SERVER_CERTIFICATE_HERE = "SERVER_CERTIFICATE_HERE"
CA_CERT_NAME = "CA_CERT_NAME"
+CLIENT_CERT_NAME = "CLIENT_CERT_NAME"
+CLIENT_CERTIFICATE_HERE="CLIENT_CERTIFICATE_HERE"
CA_CERTIFICATE_HERE = "CA_CERTIFICATE_HERE"
-CA_FINGERPRINT_HERE = "CA_FINGERPRINT_HERE"
-CA_FINGERPRINT_ENV = "CA_FINGERPRINT"
+CLIENT_FINGERPRINT_HERE = "CLIENT_FINGERPRINT_HERE"
SERVER_CERTIFICATE_ENV = "SERVER_CERTIFICATE_ENV"
CA_CERTIFICATE_ENV = "CA_CERTIFICATE_ENV"
@classmethod
def get_cert_fingerprint(cls, directory, cert_filename):
cmd = "openssl x509 -fingerprint -noout -in {}/{} | sed -e " \
- "'s/SHA1 Fingerprint//; s/=//; s/=//p'" \
+ "'s/SHA1 Fingerprint//; s/=//; s/=//p'" \
.format(directory, cert_filename)
fingerprint = CertHelper.system(cmd)
return fingerprint
@classmethod
def patch_server_certs(cls, data, server_key_filename_noext,
server_cert_filename_noext, ca_cert_filename_noext,
- server_cert, ca_cert):
+ server_cert, ca_cert, client_cert_filename_noext, client_cert):
data = data.replace(SERVER_KEY_NAME, server_key_filename_noext)
data = data.replace(SERVER_CERT_NAME, server_cert_filename_noext)
data = data.replace(CA_CERT_NAME, ca_cert_filename_noext)
+ data = data.replace(CLIENT_CERT_NAME, client_cert_filename_noext)
+ data = data.replace(CLIENT_CERTIFICATE_HERE, client_cert)
data = data.replace(SERVER_CERTIFICATE_HERE, server_cert)
data = data.replace(CA_CERTIFICATE_HERE, ca_cert)
return data
@classmethod
- def patch_tls_listen(cls, data, server_cert_filename_noext, ca_fingerprint,
+ def patch_tls_listen(cls, data, server_cert_filename_noext, client_fingerprint,
server_cert, ca_cert):
data = data.replace(SERVER_CERT_NAME, server_cert_filename_noext)
- data = data.replace(CA_FINGERPRINT_HERE, ca_fingerprint)
+ data = data.replace(CLIENT_FINGERPRINT_HERE, client_fingerprint)
data = data.replace(SERVER_CERTIFICATE_HERE, server_cert)
data = data.replace(CA_CERTIFICATE_HERE, ca_cert)
return data
server_key_filename = sys.argv[4]
load_server_certs_xml_file = sys.argv[5]
tls_listen_xml_file = sys.argv[6]
+ client_cert_filename = sys.argv[7]
+
# strip extensions
ca_cert_filename_noext = ca_cert_filename.replace(".crt", "")
server_cert_filename_noext = server_cert_filename.replace(".crt", "")
server_key_filename_noext = server_key_filename.replace(".pem", "")
+ client_cert_filename_noext = client_cert_filename.replace(".crt", "")
# get certificates from files
server_cert = CertHelper.get_pem_content_stripped(cert_dir,
server_cert_filename)
ca_cert = CertHelper.get_pem_content_stripped(cert_dir,
ca_cert_filename)
- ca_fingerprint = CertHelper.get_cert_fingerprint(cert_dir,
- ca_cert_filename)
- CertHelper.print_certs_info(ca_cert, ca_fingerprint, server_cert)
+ client_fingerprint = CertHelper.get_cert_fingerprint(cert_dir,
+ client_cert_filename)
+ CertHelper.print_certs_info(ca_cert, client_fingerprint, server_cert)
+ client_cert = CertHelper.get_pem_content_stripped(cert_dir,
+ client_cert_filename)
# patch TLS configuration files
data_srv = FileHelper.get_file_contents(load_server_certs_xml_file)
patched_srv = App.patch_server_certs(data_srv, server_key_filename_noext,
server_cert_filename_noext,
ca_cert_filename_noext,
- server_cert, ca_cert)
+ server_cert, ca_cert,
+ client_cert_filename_noext, client_cert)
FileHelper.write_file_contents(load_server_certs_xml_file, patched_srv)
data_tls = FileHelper.get_file_contents(tls_listen_xml_file)
patched_tls = App.patch_tls_listen(data_tls, server_cert_filename_noext,
- ca_fingerprint, server_cert, ca_cert)
+ client_fingerprint, server_cert, ca_cert)
FileHelper.write_file_contents(tls_listen_xml_file, patched_tls)
def main():
- if len(sys.argv) is not 7:
+ if len(sys.argv) is not 8:
print("Usage: {1} <cert_dir> <ca_cert_filename> <server_cert_filename> "
"<server_key_filename> <load_server_certs_xml_full_path> "
- "<tls_listen_full_path>", sys.argv[0])
+ "<tls_listen_full_path> <client_cert_filename>", sys.argv[0])
return 1
App.run()
logger.info("XML files patched successfully")
</certificates>
<client-auth>
<trusted-ca-certs>test_trusted_ca_list</trusted-ca-certs>
+ <trusted-client-certs>test_trusted_ca_list</trusted-client-certs>
<cert-maps>
<cert-to-name>
<id>1</id>
<!-- This is not a typo - 0x02 should stay there -->
- <fingerprint>02:CA_FINGERPRINT_HERE</fingerprint>
+ <fingerprint>02:CLIENT_FINGERPRINT_HERE</fingerprint>
<map-type xmlns:x509c2n="urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name">x509c2n:specified</map-type>
<name>test</name>
</cert-to-name>
-----BEGIN CERTIFICATE-----
-MIID7TCCAtWgAwIBAgIJAMtE1NGAR5KoMA0GCSqGSIb3DQEBBQUAMIGMMQswCQYD
-VQQGEwJDWjEWMBQGA1UECAwNU291dGggTW9yYXZpYTENMAsGA1UEBwwEQnJubzEP
-MA0GA1UECgwGQ0VTTkVUMQwwCgYDVQQLDANUTUMxEzARBgNVBAMMCmV4YW1wbGUg
-Q0ExIjAgBgkqhkiG9w0BCQEWE2V4YW1wbGVjYUBsb2NhbGhvc3QwHhcNMTQwNzI0
-MTQxOTAyWhcNMjQwNzIxMTQxOTAyWjCBjDELMAkGA1UEBhMCQ1oxFjAUBgNVBAgM
-DVNvdXRoIE1vcmF2aWExDTALBgNVBAcMBEJybm8xDzANBgNVBAoMBkNFU05FVDEM
-MAoGA1UECwwDVE1DMRMwEQYDVQQDDApleGFtcGxlIENBMSIwIAYJKoZIhvcNAQkB
-FhNleGFtcGxlY2FAbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEArD3TDHPAMT2Z84orK4lMlarbgooIUCcRZyLe+QM+8KY8Hn+mGaxPEOTS
-L3ywszqefB/Utm2hPKLHX684iRC14ID9WDGHxPjvoPArhgFhfV+qnPfxKTgxZC12
-uOj4u1V9y+SkTCocFbRfXVBGpojrBuDHXkDMDEWNvr8/52YCv7bGaiBwUHolcLCU
-bmtKILCG0RNJyTaJpXQdAeq5Z1SJotpbfYFFtAXB32hVoLug1dzl2tjG9sb1wq3Q
-aDExcbC5w6P65qOkNoyym9ne6QlQagCqVDyFn3vcqkRaTjvZmxauCeUxXgJoXkyW
-cm0lM1KMHdoTArmchw2Dz0yHHSyDAQIDAQABo1AwTjAdBgNVHQ4EFgQUc1YQIqjZ
-sHVwlea0AB4N+ilNI2gwHwYDVR0jBBgwFoAUc1YQIqjZsHVwlea0AB4N+ilNI2gw
-DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAI/1KH60qnw9Xs2RGfi0/
-IKf5EynXt4bQX8EIyVKwSkYKe04zZxYfLIl/Q2HOPYoFmm3daj5ddr0ZS1i4p4fT
-UhstjsYWvXs3W/HhVmFUslakkn3PrswhP77fCk6eEJLxdfyJ1C7Uudq2m1isZbKi
-h+XF0mG1LxJaDMocSz4eAya7M5brwjy8DoOmA1TnLQFCVcpn+sCr7VC4wE/JqxyV
-hBCk/MuGqqM3B1j90bGFZ112ZOecyE0EDSr6IbiRBtmeNbEwOFjKXhNLYdxpBZ9D
-8A/368OckZkCrVLGuJNxK9UwCVTe8IhotHUqU9EqFDmxdV8oIdU/OzUwwNPA/Bd/
-9g==
+MIIFlTCCA32gAwIBAgIUYjGBXIujymdkS9A2MzssbetWn9gwDQYJKoZIhvcNAQEL
+BQAwWjELMAkGA1UEBhMCUEwxCzAJBgNVBAgMAkRTMRAwDgYDVQQHDAdXcm9jbGF3
+MQ4wDAYDVQQKDAVOb2tpYTENMAsGA1UECwwETWFubzENMAsGA1UEAwwET25hcDAe
+Fw0xOTExMDYxNTExNDBaFw0yOTExMDMxNTExNDBaMFoxCzAJBgNVBAYTAlBMMQsw
+CQYDVQQIDAJEUzEQMA4GA1UEBwwHV3JvY2xhdzEOMAwGA1UECgwFTm9raWExDTAL
+BgNVBAsMBE1hbm8xDTALBgNVBAMMBE9uYXAwggIiMA0GCSqGSIb3DQEBAQUAA4IC
+DwAwggIKAoICAQC7zJGm+qODeBm0citmi+VKOwhVUg1QTyofXsqoib+yeiepYz+c
+MRMXMK20TA2m4ObAG5JoU0Ht1bT08f4K8BAoutq0rwb28YodSKiq8PCtD4Pn81Up
+FdP+Ymsl4YqXhydLEsqv/tpZgVvsCr/a6esxPfGSrScqw2PUf8qrHEXV48lX2Ho9
+19nZWjQTgqDzmOAShyMQabdrfuKII6/A6w/Q8eghzMQrJFsnfOS35RmH6MJyi1vl
+Hn37uEpZWjh0untRA4mtAHB6f3exw36gfpGyQgfMUiCBCbsr8SgJbHCaDpozD9ZE
+Ny+R+jRsqt0RlBoZsSPToNw1o6YjzBZZi1qYyDuNz0bQR/hedQxkwwKcj0Y7tfxF
+IfwUkb1XQ0e4mDia6R6tptphSfrSKLouVFGTVdVtoP5lpGhsw3+KWuTbwB64cZuS
+YuWW1BJ7gM6xj8b9cWRtOakHJ7WKt98Z3U7wDrQqZpnWk893kWoo0Q22X4uTipHX
++ETSdtTq5mVvYQQNub2CcA/4GQyODfdlC0gDkNeT9t6yfMJcOAJUBvW1JMoDAkED
+nWnWm/kS7aflFH6IHfqHbt1ZXUGJG94wTpvGJAHTnaiyX0mL4KK/r+ivdii+Tais
+VFKOqW7EqNZziOvZ0TMfkHtrBY89DgG8+XNwa0KUQIqVIQoJwOfQl4pAjQIDAQAB
+o1MwUTAdBgNVHQ4EFgQUQ9QHKoM/JUSm7ZnO+JvsHMVo6M0wHwYDVR0jBBgwFoAU
+Q9QHKoM/JUSm7ZnO+JvsHMVo6M0wDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B
+AQsFAAOCAgEAK6bcNkkAVY11yUg1Vm3e9QGRWPeWNbKVIHR/uJIvq4R8AthvFcEG
+6GxApE9Zdd0oWpUG9cM/EZ3ZB5drDnpqUYURkQ8YNrIPJXByvqXFeQPej+m7DHOE
+vPtbm780cE+Z6abfctRFdujJX8hQ5s3UEKjpk0HsbZqEX4JbNeLT+LKgH+kwU/SA
+puVFZXN7dTACdX2gg2F1Fg52L54ZTWMlFMNn32b1a8zrKY0HaoLQd+yXS4RfrMpd
+jPsaytuOimU+OFRFb8cvSpuC+gkCEwQFVKb/B+0Rp1No3edEE4N92hpkiDh5/+ML
+/B8kSh0InaGxu6uTC3QzqTRgzbaRpOoWkdVRkDSpU6xNtyQN5jXDExpXtPe4LMP6
+Vk1jGpJ3E6kjSzzSvZFsH9Fko++aF6m5qqAHgG/Yc0j+7bmWCoMZWVqoxE9fHjfc
+mFs8N7R2HYA7G3qKs1fZy5SzAhuMkggys6z3c6ZW2BtD82GClSlXIlPwBu6KpCNy
+6cDeQ245wH1pO7pKfaIu3hbY6m5Z9jkbyOeW4I2Pj2s13345qjF9pRggkJ0MQtgi
+M6vU/13o/WhF0lEVz37pbriJ106412tF60uyyzZvJkAqhBCJyJ0jxqtwKr8GhL9g
+PnTRJkhFAE/5KvAi0ETbOIScRz/B+v+nm08ZGe1nHQ/Vu+NIY5gLp18=
-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+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
+ETq+BbQtrvmZb6x5IrRU3Kt5QmkS/K/1
+-----END ENCRYPTED PRIVATE KEY-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIFKDCCAxACAWUwDQYJKoZIhvcNAQELBQAwWjELMAkGA1UEBhMCUEwxCzAJBgNV
+BAgMAkRTMRAwDgYDVQQHDAdXcm9jbGF3MQ4wDAYDVQQKDAVOb2tpYTENMAsGA1UE
+CwwETWFubzENMAsGA1UEAwwET25hcDAeFw0xOTExMDYxNTEyMjlaFw0yMDExMDUx
+NTEyMjlaMFoxCzAJBgNVBAYTAlBMMQswCQYDVQQIDAJETjEQMA4GA1UEBwwHV3Jv
+Y2xhdzEOMAwGA1UECgwFTm9raWExDTALBgNVBAsMBE1hbm8xDTALBgNVBAMMBE9u
+YXAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC1kEo6cAykAqNE4R53
+8VJn5Rzbs5HDDk9+0HCxgEp/7suRMWLOgeG5/L+nRgrLLcFPscwnIwIHUUE1pzyj
+aDux6cXjpto+1APq/sd1ofVMMl3I/zqcrqojixjFJO1INgN/i1CaAeBRO+mNmIUN
+IJKy2KbTYvTYYJrJbzIRh1NBsUvuIzvj5Wkq3cri4oJmz82lsNDAh4BGedWQT4RU
+mjb/EC7D9WpfOlMhsgLVJgPdG5ESFqN+xx/n4xJUcM/HGqVlfZED5XDcfQjp56Ba
+FBpNhLW41qVy8UoeixYiduLaVvKDoJc2Ea3N/pyE3YU1LBOy7znpULX3UdMb+bX5
+jGn4uauKz77hLZA5nurgb8v1ofbj1GCM28JfaiPRtIuWVtWKI+8RyKjaXjKd/rcG
+W/5T9aM9um/lH2v/DteaTa4i8zebL7k/DJFTXP+DCtJTi8e23Xalkp+O+MWQQrGR
+O07NHdl1gjDmEoc3NMRO51Ux5CDyqCbhF4QdX0ND+vDJmD8GBuxb6A3HjdmT5/iB
+iH5/HO6FRHFhMtR9xABryT01gYkDWJHszTStNLx/ZzW4Dz3i2WyoEvDa2meLkSh5
+edE1skowZriSeoOuGWJlfpjjvn1p4kjk0msg3T8EgJqZu9AiKzuVgILa8u6Kny8/
+p12MN+yltB02hiJZyMlyJDCn3QIDAQABMA0GCSqGSIb3DQEBCwUAA4ICAQAf227R
+PWMNcdVKbDz8pKXOYUN5RtvvisabF25CrxVMNzH2+3nQIuICOEg7dFI1qKEEh+DJ
+51dAgwCC7d+levHBHximFaW7ED1rRFZJUoHlF9Ku74KA3eWPcWBJdzIAk2KzcQhu
+GXVQs2RUv5nJJogAPTtt9hFU9e3vqfpb+DNrzO0BTCfTsO3QSSojrtOpLOhH4EBV
+z6TyKDYJH7XCIvhApJjbuWsvVi3WTYFpFtF3dBNTMXjMZaHqMQBmMO4VzoQeu422
+fAcCVb+UUIrdU/Jdm+6tjuUqfQj3lVIZFPhTXrZ0MfBkowHoioos34u+JJ3Hjd+5
+mK27OhNA4SKaYQfi2DQ8jV1Jf/yA+lcmZddAiLZyOgHXPNZpP6glG802/k67i61J
+PIxaoaVmgxccZINzqov4Sn7A6hgt3S68izpsrIu1R9JqKjjgNA5HqtkMjyYqaMoX
+nQ0jIxkd5lkHL8MzAecaR37Y4hibpgsDl2SsuLTtfcO3NQO0bGFMRqYaIHN6DYd0
+4S1vOrsCWc3njvUGW8UcvB8GC4puwTi9en9SPaVcgSEBZ8gsJ4E1XWAdyTQZJWon
+aMn8iAeapfJu7N3UA5nM9L0f7dvODkLDqXOJuLl1IhhNFu6E864Ld+BVH8EQjIrr
+xCvjvlMQ4pnp7kjQdEekswN9ON6e3pxT/W3t7g==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN RSA PRIVATE KEY-----
+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
+-----END RSA PRIVATE KEY-----
\ No newline at end of file
--- /dev/null
+-----BEGIN CERTIFICATE REQUEST-----
+MIIE0zCCArsCAQAwWjELMAkGA1UEBhMCUEwxCzAJBgNVBAgMAkROMRAwDgYDVQQH
+DAdXcm9jbGF3MQ4wDAYDVQQKDAVOb2tpYTENMAsGA1UECwwETWFubzENMAsGA1UE
+AwwET25hcDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALWQSjpwDKQC
+o0ThHnfxUmflHNuzkcMOT37QcLGASn/uy5ExYs6B4bn8v6dGCsstwU+xzCcjAgdR
+QTWnPKNoO7HpxeOm2j7UA+r+x3Wh9UwyXcj/OpyuqiOLGMUk7Ug2A3+LUJoB4FE7
+6Y2YhQ0gkrLYptNi9NhgmslvMhGHU0GxS+4jO+PlaSrdyuLigmbPzaWw0MCHgEZ5
+1ZBPhFSaNv8QLsP1al86UyGyAtUmA90bkRIWo37HH+fjElRwz8capWV9kQPlcNx9
+COnnoFoUGk2EtbjWpXLxSh6LFiJ24tpW8oOglzYRrc3+nITdhTUsE7LvOelQtfdR
+0xv5tfmMafi5q4rPvuEtkDme6uBvy/Wh9uPUYIzbwl9qI9G0i5ZW1Yoj7xHIqNpe
+Mp3+twZb/lP1oz26b+Ufa/8O15pNriLzN5svuT8MkVNc/4MK0lOLx7bddqWSn474
+xZBCsZE7Ts0d2XWCMOYShzc0xE7nVTHkIPKoJuEXhB1fQ0P68MmYPwYG7FvoDceN
+2ZPn+IGIfn8c7oVEcWEy1H3EAGvJPTWBiQNYkezNNK00vH9nNbgPPeLZbKgS8Nra
+Z4uRKHl50TWySjBmuJJ6g64ZYmV+mOO+fWniSOTSayDdPwSAmpm70CIrO5WAgtry
+7oqfLz+nXYw37KW0HTaGIlnIyXIkMKfdAgMBAAGgNDAYBgkqhkiG9w0BCQIxCwwJ
+Y29sbGVjdG9yMBgGCSqGSIb3DQEJBzELDAljb2xsZWN0b3IwDQYJKoZIhvcNAQEL
+BQADggIBAG4zPJVwotinJdDfBY8sGj6ARcWNtRuCmLj4Xri6pzzvUCaSLFAvIkd1
+Tdm7uIrfUMU+/stvu2E1myWJGnITL8njUahMqrTwI0yZF3Do8bw12kr9lf3wDNLT
+CvPApGpUEegcGQS/pp6ksa7zd4iDkWPLqf4CqnooDKprPQXz2HL2clBCmSrD2u61
+zTVey/G6FCU1tfAXisykmF2pElC8AJpY9EkY/ShSwk31n3ARe0XZAqo9NfcwvgAx
+isqevdXQ+D/FROjVwSKb8CB1rANn36ziZRMz02cyVj3FLbOgSBsrAfunbLNDyQ9z
+C3FYNA/tTtaPlwL8aOz0T5N6iyjmpqcvlFFFB+H5zg1tP0rcYwGnto3d85GgBYBF
+BK+ikAzYgZlpB48VceMQydZk3aMOcUIVSWpzsVhr9GkUYmYE6DxSZlzXGs75FkFf
+aP7/Qqf8Ut8G8fZV2QziOcuMbCnZ2fZl/lLLHO6A4e86bDyUjqPQK/LPylvJGgmY
+CivXpuBVA7j5SZZ4YnwqtWe4xh5vgbxZU7sq9omHnJaLfINHfQepeHcL4mWRo1oP
+xnacKz0ju2rlPNRN2jFciFQnZTUvmWO5KvoipadyjWqd7QzM0J4rdW56+a4tR1LA
+0JiV+yzsq9NB6/wKGGtwjYOEhr5AJOEb3qJPNJ45KI3nag2l3HWj
+-----END CERTIFICATE REQUEST-----
\ No newline at end of file
--- /dev/null
+-----BEGIN CERTIFICATE REQUEST-----
+MIIEuTCCAqECAQAwWjELMAkGA1UEBhMCUEwxCzAJBgNVBAgMAkROMRAwDgYDVQQH
+DAdXcm9jbGF3MQ4wDAYDVQQKDAVOb2tpYTENMAsGA1UECwwETWFubzENMAsGA1UE
+AwwET25hcDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALFl14dsyahU
+bDm8WxD2VPGHOy8CccW77WFyxbUUM0JxfawM8cJC8AZlb2RRVNmwsq5mtQa5XWnp
+rZBx1BaMmN+ek201QSec5m3Nwesz6m7w8xIn+JJqrerdQ6vDqKTsCIINhekHgNAb
+3QdRnIE2dSk8ORZgVTPxNMyLG832U/8lGic2yi+P/jB3j4Ianx33k18GUb851H60
+DSDYkT1QDP97DSw/2k2YThljBcUKaKKuajJpA+IwL2s7vDbaJj1neIuE+tDSKZAS
+TPzUJSS9d0yFk090wI42idZ9szByP+v08hBQDc4Uo0CWUrSxebKJ8Z7k347U3uG6
+MEjY6FqjL7y4oZo670fjiKiOnJVRxFDdj/5DR37hFGjHg1x6BSRt4aJ4SSdYuNu5
+X2LGijqJ6FBeKc+TZfj4g1eH2bLvEI03Z0V1Q2p8qq59jVJAb5U2qwPRU30JRrFY
+R84kPj8xV1xi3tZke0T0nszCLnDa5oCImm1Q31Ncbe1ZruSNNmGhpjGqe+nGaLOg
+jSQaoYfe982i9hhsEIgLOtOLSOYSRsIwd6tWoH5WrsrkotTawby9dMDA7ghkQ8lL
+xkuLkcm/VIKrqCofkP1KNi0NzAa4F3HXhwN8xd/UrbYz5jjjh0s6DOxX5Eu5P1+7
+JIGnuSc2Trd2iHSob2Cf97a5OrQ7/farAgMBAAGgGjAYBgkqhkiG9w0BCQcxCwwJ
+Y29sbGVjdG9yMA0GCSqGSIb3DQEBCwUAA4ICAQCJb4dJS4ddeL/IzuOA6kKpqOz/
+YJUECLCRPSvdf5DCH/ezf5L+UE8WUpcvSkRo36rwBPR/R2hDnshfKUYYZoi5UqzT
++Y7E3Kdrim4K9MGJGVTqtIYqoNS0jgbmX2zw7FDXHBVfP2TQhalzBO4BMshB916o
+IWs8esTRNhXZ7P4hDOkYyWp4qPeOjzdUgqEQosz+OkB+RdVpKfs3sG0eqZRDVnHz
+Hk7cfpn6m9OZf+0aLlAlhs1d9KvvdmUn0vC3QVktPLXZpa1XNTrE7tml3crYNmU0
+JSuP7MBwgjJMBe400aIXIKssqVUJjlAzNARFWo/84Fzb6QuyfVwNp1tMzBAFFDc3
+BOv891fwIKAOKRSSui2Eq3nxt6+8JTTx8YeuppS79V50XNl6PolY5jDEkxED7sst
+ScpU7rOURDfgT2EdqjWzSmW7JzBuuTkAz4T/lg4dAspKacVi9hG28Jt+gX6xlM5Y
+qS43o2YhSze4PfOgjkUIvqSiDa6uORMJPi5iCwGVpomKfMtZCmXrPiCyQg6u8TqJ
+LXA9pm++mehgj79kl+yb8A2eQvIqEb8eOG/CzZjW5IZxLZgKk/AjAcBn0yhhIrVq
+6rBaIlVbXOdxMsxxVgyktziA7DFCt/1TvQylSn9hWaBkpdjVlbFmMyuNU+KHZA41
+8raJhp+mC5IUG/98UQ==
+-----END CERTIFICATE REQUEST-----
-----BEGIN CERTIFICATE-----
-MIIECTCCAvGgAwIBAgIBCDANBgkqhkiG9w0BAQsFADCBjDELMAkGA1UEBhMCQ1ox
-FjAUBgNVBAgMDVNvdXRoIE1vcmF2aWExDTALBgNVBAcMBEJybm8xDzANBgNVBAoM
-BkNFU05FVDEMMAoGA1UECwwDVE1DMRMwEQYDVQQDDApleGFtcGxlIENBMSIwIAYJ
-KoZIhvcNAQkBFhNleGFtcGxlY2FAbG9jYWxob3N0MB4XDTE1MDczMDA3MjU1MFoX
-DTM1MDcyNTA3MjU1MFowgYUxCzAJBgNVBAYTAkNaMRYwFAYDVQQIDA1Tb3V0aCBN
-b3JhdmlhMQ8wDQYDVQQKDAZDRVNORVQxDDAKBgNVBAsMA1RNQzEXMBUGA1UEAwwO
-ZXhhbXBsZSBzZXJ2ZXIxJjAkBgkqhkiG9w0BCQEWF2V4YW1wbGVzZXJ2ZXJAbG9j
-YWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsdI1TBjzX1Pg
-QXFuPCw5/kQwU7qkrhirMcFAXhI8EoXepPa9fKAVuMjHW32P6nNzDpnhFe0YGdNl
-oIEN3hJJ87cVOqj4o7zZMbq3zVG2L8As7MTA8tYXm2fSC/0rIxxRRemcGUXM0q+4
-LEACjZj2pOKonaivF5VbhgNjPCO1Jj/TamUc0aViE577C9L9EiObGM+bGbabWk/K
-WKLsvxUc+sKZXaJ7psTVgpggJAkUszlmwOQgFiMSR53E9/CAkQYhzGVCmH44Vs6H
-zs3RZjOTbce4wr4ongiA5LbPeSNSCFjy9loKpaE1rtOjkNBVdiNPCQTmLuODXUTK
-gkeL+9v/OwIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVu
-U1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQU83qEtQDFzDvLoaII
-vqiU6k7j1uswHwYDVR0jBBgwFoAUc1YQIqjZsHVwlea0AB4N+ilNI2gwDQYJKoZI
-hvcNAQELBQADggEBAJ+QOLi4gPWGofMkLTqSsbv5xRvTw0xa/sJnEeiejtygAu3o
-McAsyevSH9EYVPCANxzISPzd9SFaO56HxWgcxLn9vi8ZNvo2wIp9zucNu285ced1
-K/2nDZfBmvBxXnj/n7spwqOyuoIc8sR7P7YyI806Qsfhk3ybNZE5UHJFZKDRQKvR
-J1t4nk9saeo87kIuNEDfYNdwYZzRfXoGJ5qIJQK+uJJv9noaIhfFowDW/G14Ji5p
-Vh/YtvnOPh7aBjOj8jmzk8MqzK+TZgT7GWu48Nd/NaV8g/DNg9hlN047LaNsJly3
-NX3+VBlpMnA4rKwl1OnmYSirIVh9RJqNwqe6k/k=
+MIIFKDCCAxACAWQwDQYJKoZIhvcNAQELBQAwWjELMAkGA1UEBhMCUEwxCzAJBgNV
+BAgMAkRTMRAwDgYDVQQHDAdXcm9jbGF3MQ4wDAYDVQQKDAVOb2tpYTENMAsGA1UE
+CwwETWFubzENMAsGA1UEAwwET25hcDAeFw0xOTExMDYxNTEzMjJaFw0yMzExMDUx
+NTEzMjJaMFoxCzAJBgNVBAYTAlBMMQswCQYDVQQIDAJETjEQMA4GA1UEBwwHV3Jv
+Y2xhdzEOMAwGA1UECgwFTm9raWExDTALBgNVBAsMBE1hbm8xDTALBgNVBAMMBE9u
+YXAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCxZdeHbMmoVGw5vFsQ
+9lTxhzsvAnHFu+1hcsW1FDNCcX2sDPHCQvAGZW9kUVTZsLKuZrUGuV1p6a2QcdQW
+jJjfnpNtNUEnnOZtzcHrM+pu8PMSJ/iSaq3q3UOrw6ik7AiCDYXpB4DQG90HUZyB
+NnUpPDkWYFUz8TTMixvN9lP/JRonNsovj/4wd4+CGp8d95NfBlG/OdR+tA0g2JE9
+UAz/ew0sP9pNmE4ZYwXFCmiirmoyaQPiMC9rO7w22iY9Z3iLhPrQ0imQEkz81CUk
+vXdMhZNPdMCONonWfbMwcj/r9PIQUA3OFKNAllK0sXmyifGe5N+O1N7hujBI2Oha
+oy+8uKGaOu9H44iojpyVUcRQ3Y/+Q0d+4RRox4NcegUkbeGieEknWLjbuV9ixoo6
+iehQXinPk2X4+INXh9my7xCNN2dFdUNqfKqufY1SQG+VNqsD0VN9CUaxWEfOJD4/
+MVdcYt7WZHtE9J7Mwi5w2uaAiJptUN9TXG3tWa7kjTZhoaYxqnvpxmizoI0kGqGH
+3vfNovYYbBCICzrTi0jmEkbCMHerVqB+Vq7K5KLU2sG8vXTAwO4IZEPJS8ZLi5HJ
+v1SCq6gqH5D9SjYtDcwGuBdx14cDfMXf1K22M+Y444dLOgzsV+RLuT9fuySBp7kn
+Nk63doh0qG9gn/e2uTq0O/32qwIDAQABMA0GCSqGSIb3DQEBCwUAA4ICAQBqW8/0
+u85VTUWA8tpfjqgmMd9WdM5YVty/oRQ3sT+1k6mdPF2u8HgTD5vNR71XEkpQuNbZ
+9UrJ1UOgcbxcodDh2v2Jv5faSyQBnmkSjagyH+7goN/mcM+CtIZQsdp8drzlty/M
+x1CeVW54jVrInk01yS3cATCdxqkel9nhTT0qcPOmHxugTyTwApzwN4dRMf1WHQ9B
+U1K95yWvscZdY2cMKRw3Ps90+AU8eSoAbV1qQEl95qcWani7LPNfc8nii3nCINBR
+KTdbP1uG8hck4BFxOZye6mbNMx086T7O3Buzcve5O/3isCCZQhV6PZIE7zL5+hyY
+RLx7MxUUETy4QFapGCfOGvixK8QM/xXJone2CjnmptiRJjC11Imv84bL3KUziKPR
+DTyX2f4oKEwaVpbfJgyyxMmoNUAB2NaKNAW9NhvYjVqmCUvgrvL7L6WZTe9N5gkX
+H7cQZ7PyAdgGKet0b0Spr8NfBATyZKNI6ZRcGJduO7sOblqAsC6GToq7Jcz9xkYd
+ItNdhoDohZIDwW1XnHuNKgE1tEXm1KAbdlGrUEOTsyuK4bz4kDdVu58/nFT4ZYnC
+2HSyLwsNNeKChwdVFL8d/Rj9ojjVyUBH6wuQHRAcs0Ui2Cpy+OPWcNjDuHjkiw2J
+KEzFqRi6zQqj1y2Sjv1HQpn8dxppKOsV6rjoXQ==
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
-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
+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
-----END RSA PRIVATE KEY-----