summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config_files/certificate-authority/certs/root.crt15
-rw-r--r--config_files/certificate-authority/config/create_intermediate_csr.ini22
-rw-r--r--config_files/certificate-authority/config/create_root_cert.ini55
-rw-r--r--config_files/certificate-authority/config/fullchain.crt55
-rwxr-xr-xconfig_files/certificate-authority/config/normalcli/client.crt24
-rwxr-xr-xconfig_files/certificate-authority/config/normalcli/client.csr17
-rwxr-xr-xconfig_files/certificate-authority/config/normalcli/client.key28
-rw-r--r--config_files/certificate-authority/config/server.crt24
-rw-r--r--config_files/certificate-authority/config/server.csr17
-rw-r--r--config_files/certificate-authority/config/sign_intermediate_csr.ini43
-rw-r--r--config_files/certificate-authority/config/sign_server_and_client_csrs.ini45
-rw-r--r--config_files/certificate-authority/config/yubikey/yubi.crt23
-rw-r--r--config_files/certificate-authority/config/yubikey/yubi.crt.pem23
-rw-r--r--config_files/certificate-authority/config/yubikey/yubi.csr16
-rw-r--r--config_files/certificate-authority/config/yubikey/yubi_pubkey.pem9
-rw-r--r--config_files/certificate-authority/index.txt1
-rw-r--r--config_files/certificate-authority/index.txt.attr1
-rw-r--r--config_files/certificate-authority/index.txt.old0
-rw-r--r--config_files/certificate-authority/intermediate/certs/intermediate.crt16
-rw-r--r--config_files/certificate-authority/intermediate/csr/intermediate.csr10
-rw-r--r--config_files/certificate-authority/intermediate/index.txt3
-rw-r--r--config_files/certificate-authority/intermediate/index.txt.attr1
-rw-r--r--config_files/certificate-authority/intermediate/index.txt.attr.old1
-rw-r--r--config_files/certificate-authority/intermediate/index.txt.old2
-rw-r--r--config_files/certificate-authority/intermediate/newcerts/74F214909A4F244A2352A2851BCC0F13109CB80E.pem24
-rw-r--r--config_files/certificate-authority/intermediate/newcerts/74F214909A4F244A2352A2851BCC0F13109CB80F.pem23
-rw-r--r--config_files/certificate-authority/intermediate/newcerts/74F214909A4F244A2352A2851BCC0F13109CB810.pem24
-rw-r--r--config_files/certificate-authority/intermediate/serial1
-rw-r--r--config_files/certificate-authority/intermediate/serial.old1
-rw-r--r--config_files/certificate-authority/newcerts/37CA4B18EB4D375F067A5A93EFE81BE534C446D7.pem16
-rw-r--r--config_files/certificate-authority/serial1
-rw-r--r--config_files/nginx.conf88
-rw-r--r--config_files/nginx.service23
-rw-r--r--config_files/nitrohsm-ca-docs-complete-and-very-messy/nitrohsm-in-action147
-rw-r--r--config_files/nitrohsm-ca-docs-complete-and-very-messy/nitrohsm-official-docs507
-rw-r--r--config_files/openssl.pkcs11.cnf (renamed from hsm.conf)6
-rw-r--r--config_files/org.debian.pcsc-lite.policy30
-rw-r--r--docs97
-rw-r--r--flask1.py38
-rw-r--r--gunicorn1.service14
-rw-r--r--keys/ca.key28
-rw-r--r--keys/ca.pem22
-rw-r--r--keys/ca.srl1
-rw-r--r--keys/client.crt21
-rw-r--r--keys/client.csr16
-rw-r--r--keys/client.key28
-rw-r--r--keys/server.crt21
-rw-r--r--keys/server.csr17
-rw-r--r--keys/server.key28
-rw-r--r--nginx.conf63
-rw-r--r--tfa.py71
-rw-r--r--untested-docs/gunicorn1.service71
52 files changed, 1744 insertions, 134 deletions
diff --git a/config_files/certificate-authority/certs/root.crt b/config_files/certificate-authority/certs/root.crt
new file mode 100644
index 0000000..9bbdff0
--- /dev/null
+++ b/config_files/certificate-authority/certs/root.crt
@@ -0,0 +1,15 @@
1-----BEGIN CERTIFICATE-----
2MIICYDCCAeagAwIBAgIUKzrohjd0kem8ZlOdZ3Z/WCacRW4wCgYIKoZIzj0EAwQw
3XzELMAkGA1UEBhMCc2cxCzAJBgNVBAgMAmhpMQswCQYDVQQKDAJoaTEhMB8GA1UE
4CwwYaGkgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MRMwEQYDVQQDDApoaSBSb290IENB
5MB4XDTI0MTExMjE5Mjg1OFoXDTM0MTExMDE5Mjg1OFowXzELMAkGA1UEBhMCc2cx
6CzAJBgNVBAgMAmhpMQswCQYDVQQKDAJoaTEhMB8GA1UECwwYaGkgQ2VydGlmaWNh
7dGUgQXV0aG9yaXR5MRMwEQYDVQQDDApoaSBSb290IENBMHYwEAYHKoZIzj0CAQYF
8K4EEACIDYgAEDu8tCkFEHPtSprQKEp+QNUxEMQHPPYAqOtLFYLQrgZV862d/tCms
92ZN610YgJ4Q2jzPoG+OT75/cA66bqfRik0GY6Uc/YIzXVjFIdnLPv36w0gUnazdZ
107J3U95JZ9006o2MwYTAdBgNVHQ4EFgQUNSN4SMcTIdbae4OEkVZowIMhGqUwHwYD
11VR0jBBgwFoAUNSN4SMcTIdbae4OEkVZowIMhGqUwDwYDVR0TAQH/BAUwAwEB/zAO
12BgNVHQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwQDaAAwZQIwDwyap3b/a6em5Q2AOCf7
13sWJfyC1WW/6UAZ3smu5LT5zd+nBeuiQ5OinIWm8xAXUDAjEAxjDUWD1avBtFV6sw
14FHb91laAakaee7EgVkEng1kqEkzza9cNGghek2aIPV5nHXH+
15-----END CERTIFICATE-----
diff --git a/config_files/certificate-authority/config/create_intermediate_csr.ini b/config_files/certificate-authority/config/create_intermediate_csr.ini
new file mode 100644
index 0000000..1929141
--- /dev/null
+++ b/config_files/certificate-authority/config/create_intermediate_csr.ini
@@ -0,0 +1,22 @@
1[ req ]
2# Options for the `req` tool (`man req`).
3default_bits = 4096
4distinguished_name = req_distinguished_name
5string_mask = utf8only
6prompt = no
7
8# SHA-1 is deprecated, so use SHA-2 instead.
9[ v3_ca ]
10# Extensions for a typical CA (`man x509v3_config`).
11subjectKeyIdentifier = hash
12authorityKeyIdentifier = keyid:always,issuer
13basicConstraints = critical, CA:true
14keyUsage = critical, digitalSignature, cRLSign, keyCertSign
15default_md = sha512
16
17[ req_distinguished_name ]
18C = SG
19ST = singapore
20O = company name
21OU = companyname Certificate Authority
22CN = hi Intermediate CA
diff --git a/config_files/certificate-authority/config/create_root_cert.ini b/config_files/certificate-authority/config/create_root_cert.ini
new file mode 100644
index 0000000..3321dd4
--- /dev/null
+++ b/config_files/certificate-authority/config/create_root_cert.ini
@@ -0,0 +1,55 @@
1[ ca ]
2# `man ca`
3default_ca = CA_default
4
5[ CA_default ]
6# Directory and file locations.
7dir = /opt/certificate-authority
8certs = $dir/certs
9crl_dir = $dir/crl
10new_certs_dir = $dir/newcerts
11database = $dir/index.txt
12serial = $dir/serial
13
14# SHA-1 is deprecated, so use SHA-2 instead.
15default_md = sha512
16
17name_opt = ca_default
18cert_opt = ca_default
19default_days = 375
20preserve = no
21policy = policy_strict
22
23[ policy_strict ]
24# The root CA should only sign intermediate certificates that match.
25# See the POLICY FORMAT section of `man ca`.
26countryName = match
27stateOrProvinceName = match
28organizationName = match
29organizationalUnitName = optional
30commonName = supplied
31emailAddress = optional
32
33[ req ]
34# Options for the `req` tool (`man req`).
35default_bits = 4096
36distinguished_name = req_distinguished_name
37string_mask = utf8only
38prompt = no
39
40# SHA-1 is deprecated, so use SHA-2 instead.
41default_md = sha512
42
43[ req_distinguished_name ]
44C = sg
45ST = hi
46O = hi
47OU = hi Certificate Authority
48CN = hi Root CA
49
50[ v3_ca ]
51# Extensions for a typical CA (`man x509v3_config`).
52subjectKeyIdentifier = hash
53authorityKeyIdentifier = keyid:always,issuer
54basicConstraints = critical, CA:true
55keyUsage = critical, digitalSignature, cRLSign, keyCertSign
diff --git a/config_files/certificate-authority/config/fullchain.crt b/config_files/certificate-authority/config/fullchain.crt
new file mode 100644
index 0000000..d17d14e
--- /dev/null
+++ b/config_files/certificate-authority/config/fullchain.crt
@@ -0,0 +1,55 @@
1-----BEGIN CERTIFICATE-----
2MIIEEzCCA5mgAwIBAgIUdPIUkJpPJEojUqKFG8wPExCcuA4wCgYIKoZIzj0EAwQw
3gYExCzAJBgNVBAYTAlNHMRIwEAYDVQQIDAlzaW5nYXBvcmUxFTATBgNVBAoMDGNv
4bXBhbnkgbmFtZTEqMCgGA1UECwwhY29tcGFueW5hbWUgQ2VydGlmaWNhdGUgQXV0
5aG9yaXR5MRswGQYDVQQDDBJoaSBJbnRlcm1lZGlhdGUgQ0EwHhcNMjQxMTEyMTk0
6ODE3WhcNMjUxMTIyMTk0ODE3WjBoMQswCQYDVQQGEwJVUzESMBAGA1UECAwJWW91
7clN0YXRlMREwDwYDVQQHDAhZb3VyQ2l0eTEZMBcGA1UECgwQWW91ck9yZ2FuaXph
8dGlvbjEXMBUGA1UEAwwOeW91cmRvbWFpbi5jb20wggEiMA0GCSqGSIb3DQEBAQUA
9A4IBDwAwggEKAoIBAQCSxTDiQWEArAFdVLF8fYnY5jqCUiYo4CPE1GLL/vI2t/0u
108a//yWWuZaOK0z3Mj0FRuUofXEJGGXB2fFs1qStuyYBEpwJaJm7uhm1zNLakC4I7
11V12Bs5/edw8qMQLmGu7kqQ0PiOMTuS2GS2EhPUnKIErqhiQBgv56hW4o86SGjnYb
12rGSBCAys6NpaqPC8oMOXjJs5T0bbyHaT8ga2zaLlD4pBcho+2sWITWtv9eMZFuva
13kE8vHNR48mbR5FuZ1CJenxU62NHZcfIaMChYN5KjGdHGqCFbPXzxehaX0Ofhghc6
14Z28KiP+AbQwaMEAqRrvU0V7GTLmE6DAWvmYJslGxAgMBAAGjggE6MIIBNjAJBgNV
15HRMEAjAAMBEGCWCGSAGG+EIBAQQEAwIGQDAzBglghkgBhvhCAQ0EJhYkT3BlblNT
16TCBHZW5lcmF0ZWQgU2VydmVyIENlcnRpZmljYXRlMB0GA1UdDgQWBBScPhckKM30
17e6q7bJiXfbXIk6qhSzCBnAYDVR0jBIGUMIGRgBQSutLIyJsePNmzX9GhghKTR5XT
18w6FjpGEwXzELMAkGA1UEBhMCc2cxCzAJBgNVBAgMAmhpMQswCQYDVQQKDAJoaTEh
19MB8GA1UECwwYaGkgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MRMwEQYDVQQDDApoaSBS
20b290IENBghQ3yksY6003XwZ6WpPv6BvlNMRG1zAOBgNVHQ8BAf8EBAMCBaAwEwYD
21VR0lBAwwCgYIKwYBBQUHAwEwCgYIKoZIzj0EAwQDaAAwZQIwEwNmLeDtForhC2WY
22JCcijzNBlKLGvKRP0KXGh3Uhfl+ZZOhmTYM5lnbZ1XDrZG2YAjEA9oU5b7AEqtIO
235uYkFrKJ49qA8crVH84thHvfYrOMMJNO8v1fgDtiKayzHnQq+61V
24-----END CERTIFICATE-----
25-----BEGIN CERTIFICATE-----
26MIIChjCCAgygAwIBAgIUN8pLGOtNN18GelqT7+gb5TTERtcwCgYIKoZIzj0EAwQw
27XzELMAkGA1UEBhMCc2cxCzAJBgNVBAgMAmhpMQswCQYDVQQKDAJoaTEhMB8GA1UE
28CwwYaGkgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MRMwEQYDVQQDDApoaSBSb290IENB
29MB4XDTI0MTExMjE5MzYwNVoXDTI5MTExMTE5MzYwNVowgYExCzAJBgNVBAYTAlNH
30MRIwEAYDVQQIDAlzaW5nYXBvcmUxFTATBgNVBAoMDGNvbXBhbnkgbmFtZTEqMCgG
31A1UECwwhY29tcGFueW5hbWUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MRswGQYDVQQD
32DBJoaSBJbnRlcm1lZGlhdGUgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQHjbSZ
33S/10AselloIpzwY56f1pntc622qiJ/lB3O9WDkSEt5UpdXumtehRVKHkTCK2U6Wc
34ldyBA5aVkj4DpSFgLgfWI/+23WzI5bzYtyEW7VuwsEwWTq6y2PpWVULZzUijZjBk
35MB0GA1UdDgQWBBQSutLIyJsePNmzX9GhghKTR5XTwzAfBgNVHSMEGDAWgBQ1I3hI
36xxMh1tp7g4SRVmjAgyEapTASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQE
37AwIBhjAKBggqhkjOPQQDBANoADBlAjBpqaP5p29kRuZrdmjTJq/laWpenSZiXK4m
38rJVaBV2V0ajCB4eqTnS4KJORjTfLVOMCMQCf6T3ZH5TN+f1QkHxDM9DUOkyOqOzv
39FXvgRTHcWckPqceCIgO4IWFS7WxgyvEmlr4=
40-----END CERTIFICATE-----
41-----BEGIN CERTIFICATE-----
42MIICYDCCAeagAwIBAgIUKzrohjd0kem8ZlOdZ3Z/WCacRW4wCgYIKoZIzj0EAwQw
43XzELMAkGA1UEBhMCc2cxCzAJBgNVBAgMAmhpMQswCQYDVQQKDAJoaTEhMB8GA1UE
44CwwYaGkgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MRMwEQYDVQQDDApoaSBSb290IENB
45MB4XDTI0MTExMjE5Mjg1OFoXDTM0MTExMDE5Mjg1OFowXzELMAkGA1UEBhMCc2cx
46CzAJBgNVBAgMAmhpMQswCQYDVQQKDAJoaTEhMB8GA1UECwwYaGkgQ2VydGlmaWNh
47dGUgQXV0aG9yaXR5MRMwEQYDVQQDDApoaSBSb290IENBMHYwEAYHKoZIzj0CAQYF
48K4EEACIDYgAEDu8tCkFEHPtSprQKEp+QNUxEMQHPPYAqOtLFYLQrgZV862d/tCms
492ZN610YgJ4Q2jzPoG+OT75/cA66bqfRik0GY6Uc/YIzXVjFIdnLPv36w0gUnazdZ
507J3U95JZ9006o2MwYTAdBgNVHQ4EFgQUNSN4SMcTIdbae4OEkVZowIMhGqUwHwYD
51VR0jBBgwFoAUNSN4SMcTIdbae4OEkVZowIMhGqUwDwYDVR0TAQH/BAUwAwEB/zAO
52BgNVHQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwQDaAAwZQIwDwyap3b/a6em5Q2AOCf7
53sWJfyC1WW/6UAZ3smu5LT5zd+nBeuiQ5OinIWm8xAXUDAjEAxjDUWD1avBtFV6sw
54FHb91laAakaee7EgVkEng1kqEkzza9cNGghek2aIPV5nHXH+
55-----END CERTIFICATE-----
diff --git a/config_files/certificate-authority/config/normalcli/client.crt b/config_files/certificate-authority/config/normalcli/client.crt
new file mode 100755
index 0000000..e7bcb9a
--- /dev/null
+++ b/config_files/certificate-authority/config/normalcli/client.crt
@@ -0,0 +1,24 @@
1-----BEGIN CERTIFICATE-----
2MIIEBDCCA4mgAwIBAgIUdPIUkJpPJEojUqKFG8wPExCcuBAwCgYIKoZIzj0EAwQw
3gYExCzAJBgNVBAYTAlNHMRIwEAYDVQQIDAlzaW5nYXBvcmUxFTATBgNVBAoMDGNv
4bXBhbnkgbmFtZTEqMCgGA1UECwwhY29tcGFueW5hbWUgQ2VydGlmaWNhdGUgQXV0
5aG9yaXR5MRswGQYDVQQDDBJoaSBJbnRlcm1lZGlhdGUgQ0EwHhcNMjQxMTEyMjIw
6MjQ0WhcNMjUxMTIyMjIwMjQ0WjBYMQswCQYDVQQGEwJVUzESMBAGA1UECAwJWW91
7clN0YXRlMREwDwYDVQQHDAhZb3VyQ2l0eTEQMA4GA1UECgwHWW91ck9yZzEQMA4G
8A1UEAwwHY2xpZW50MjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANik
9xK/PaOCf2ewyWsZ2paKGWTBmu+72qDDIIJHYAT+7vp/n7m91K0+MhzOsDwdJH/vH
10oT1Wy30Q6eGRG6EgiL6oHbWWp+Rp6zDHAHXc+IYDWqs6ipUOYBbaXllHirnlkG3z
11XJ11d05gxWPsXjDw96O91CKJPtSIC0kyVU4E22SM0Qcv0IaHsBG1+bYOtOT0wNE5
12v/pvNJYP7Oe4H+8s6rZZr+S5AT+JdU7B4+tyzI40M+4cjrVi987C3Y1qZ80MN4L6
13IWSjSVOwe8I1Ktj7fJ11GBGsWrxeOu4G9KtpVTyI+TNyg6UMR805J6c+BR6t7C5Z
14aUdsAaqX66Nsw3pNDo8CAwEAAaOCATowggE2MAkGA1UdEwQCMAAwEQYJYIZIAYb4
15QgEBBAQDAgeAMDMGCWCGSAGG+EIBDQQmFiRPcGVuU1NMIEdlbmVyYXRlZCBDbGll
16bnQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFNh/IRK0n80go6/SriULim3nGAkKMIGc
17BgNVHSMEgZQwgZGAFBK60sjImx482bNf0aGCEpNHldPDoWOkYTBfMQswCQYDVQQG
18EwJzZzELMAkGA1UECAwCaGkxCzAJBgNVBAoMAmhpMSEwHwYDVQQLDBhoaSBDZXJ0
19aWZpY2F0ZSBBdXRob3JpdHkxEzARBgNVBAMMCmhpIFJvb3QgQ0GCFDfKSxjrTTdf
20Bnpak+/oG+U0xEbXMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcD
21AjAKBggqhkjOPQQDBANpADBmAjEA6gSZO2a0iijgvcYOm9fB8vIgwYDlrEytmIt4
22DWSRP7k9/a+CW6CfNf8IWNDmfNOmAjEAsbP8DRJ3Bb5iEwE3XAACAHANnMNWCJ05
231FLmX4pIQee05665Uao7HcTCPAGNJpRY
24-----END CERTIFICATE-----
diff --git a/config_files/certificate-authority/config/normalcli/client.csr b/config_files/certificate-authority/config/normalcli/client.csr
new file mode 100755
index 0000000..356b308
--- /dev/null
+++ b/config_files/certificate-authority/config/normalcli/client.csr
@@ -0,0 +1,17 @@
1-----BEGIN CERTIFICATE REQUEST-----
2MIICnTCCAYUCAQAwWDELMAkGA1UEBhMCVVMxEjAQBgNVBAgMCVlvdXJTdGF0ZTER
3MA8GA1UEBwwIWW91ckNpdHkxEDAOBgNVBAoMB1lvdXJPcmcxEDAOBgNVBAMMB2Ns
4aWVudDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDYpMSvz2jgn9ns
5MlrGdqWihlkwZrvu9qgwyCCR2AE/u76f5+5vdStPjIczrA8HSR/7x6E9Vst9EOnh
6kRuhIIi+qB21lqfkaeswxwB13PiGA1qrOoqVDmAW2l5ZR4q55ZBt81yddXdOYMVj
77F4w8PejvdQiiT7UiAtJMlVOBNtkjNEHL9CGh7ARtfm2DrTk9MDROb/6bzSWD+zn
8uB/vLOq2Wa/kuQE/iXVOwePrcsyONDPuHI61YvfOwt2NamfNDDeC+iFko0lTsHvC
9NSrY+3yddRgRrFq8XjruBvSraVU8iPkzcoOlDEfNOSenPgUerewuWWlHbAGql+uj
10bMN6TQ6PAgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAwj/+j8IWQZ99yV/qE2us
11/YK7VJWCZgRpYbmrUTOH67evwiRlPEj1reXdyTBHISJ9tnE57mcXn0nbvAWI9tpk
124/KMJx9g1Jfuid5SgD74ShsFiHn0SP+9O9OEHTZIL5nyQIDu8L6X3KwsB6TsodbH
13pYGBp/jnhz46LBynsTTDIoxa5i+M0dz43oYpLlJqXZE8Srgm/uR8ye2AS/QPvcuC
14bVgw52YgAGNu3PlE3hf0ORtwWasekl6uCTRVTzIf2qptkx3AuUGgSy0biPotyHxt
15rf0NGodVZyb0L4lF/t+4Wk7SyP9zuxq0sA938kLQb3Ob9hTM2i0T4msJplz5He37
16eA==
17-----END CERTIFICATE REQUEST-----
diff --git a/config_files/certificate-authority/config/normalcli/client.key b/config_files/certificate-authority/config/normalcli/client.key
new file mode 100755
index 0000000..4dd0ac4
--- /dev/null
+++ b/config_files/certificate-authority/config/normalcli/client.key
@@ -0,0 +1,28 @@
1-----BEGIN PRIVATE KEY-----
2MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDYpMSvz2jgn9ns
3MlrGdqWihlkwZrvu9qgwyCCR2AE/u76f5+5vdStPjIczrA8HSR/7x6E9Vst9EOnh
4kRuhIIi+qB21lqfkaeswxwB13PiGA1qrOoqVDmAW2l5ZR4q55ZBt81yddXdOYMVj
57F4w8PejvdQiiT7UiAtJMlVOBNtkjNEHL9CGh7ARtfm2DrTk9MDROb/6bzSWD+zn
6uB/vLOq2Wa/kuQE/iXVOwePrcsyONDPuHI61YvfOwt2NamfNDDeC+iFko0lTsHvC
7NSrY+3yddRgRrFq8XjruBvSraVU8iPkzcoOlDEfNOSenPgUerewuWWlHbAGql+uj
8bMN6TQ6PAgMBAAECggEAUkh2id3plBMypnLTpnhu3aVQX8FNVOwrImgIcsxLYSUS
9OFLTbVLf0dVqjpYlmRtNgggm9hCutgBEDI/cIh0kwuFAc3VWrDsMgJi81IdKfz/r
104ogYFZgBp/xlhFxXVNbbvd8GSKnSWBsKLbMbbVRAglj5pupgykEnpDPxUXInz+63
11Ccmwcz82mYw5oAXwGbFWF9P0wfCbBkr13uH7l4yk9jawm2DNC7IlBQ/TzFv8qI0I
12kUM/JB3/LIgqAL/9tniMt5uGJd5WUTagICJCI+bCRKMJVvjq37096gjbLG2LCPn3
13iQ6/0Or202hlpIBWZBcyXW4d2/0EvI5Rz8C0aV0K+QKBgQDyB10vEFUVKqub+AVu
14VEJJSscuhNH/5PpDV2uOycx9bWwIeofcUFyiDCvorJmCtlU8hvyTjdaBbWR8UhEr
15qewf0ZYfO1WVUP1egz5u5Ralph1IYHUoxwStR2knp+JHtuIHuCSnal2Vu8p57uoZ
16i3nNTzadof0XJq2uiSPWGAxYGQKBgQDlJkUA8eZLb4JVrTcOch3OAHlmxizPgJPJ
17SxsGsaQn/636fk9GHiCtRt2oD7tgGpxzBrf6i0Bs1K0wzBbmPtb6JhE+z5nhKirk
18CPXbb/6XN8svQHkIqKlHOqaSTQ96mHfEfcOurpeuYzQDt09Rppgo4eXExRXig1lI
19g0KN4+gQ5wKBgERKh6SL+zXpwFpV9VJYPAvqKaGaoJaPyX3O4O59SlHp2h3aVRN5
20KWof/RO9/+K+B/b4L7SCxQ/oCf56OZYUcCfaP324hEGJhLRyW992jJlY8dJGRUio
21P02VZLpnyJVrqQN8lfsXLCjfwBX/r9ZdYJTp0QNRfdRWeZNR5ua2CmWhAoGBAMRG
22hl5r1K2SotnOF1WJS5wy7cmpP6Kw6GVHrquKJyiXqSbhX/eYQLcK9ztH1mBYCt+/
23xoCVHCbb+EjO12J6OttjFexuF8k0vC48upIuGKzf/mrH16QiC3TWeOzhkruYsyWb
2476vFImkd0eTI8+jlQHnsHEnx4m/1v9kLjUtKBnHLAoGAXyAN75ZRy69QOvrXpjPI
258Rq48hwCrwwUtIMWNKZFHUA+SlT6fYACfKDwajdkNQjTqJ/KpA/oDVA7He8K2wlM
262RnYraXx1eivGXIfQvUWcuHOq6CmcJEp+WiVUbLlyKMyPS7hB3PYuWrnYpAwaiBn
27uWGX6LvdsBajP4hpEDM6o7o=
28-----END PRIVATE KEY-----
diff --git a/config_files/certificate-authority/config/server.crt b/config_files/certificate-authority/config/server.crt
new file mode 100644
index 0000000..84447b1
--- /dev/null
+++ b/config_files/certificate-authority/config/server.crt
@@ -0,0 +1,24 @@
1-----BEGIN CERTIFICATE-----
2MIIEEzCCA5mgAwIBAgIUdPIUkJpPJEojUqKFG8wPExCcuA4wCgYIKoZIzj0EAwQw
3gYExCzAJBgNVBAYTAlNHMRIwEAYDVQQIDAlzaW5nYXBvcmUxFTATBgNVBAoMDGNv
4bXBhbnkgbmFtZTEqMCgGA1UECwwhY29tcGFueW5hbWUgQ2VydGlmaWNhdGUgQXV0
5aG9yaXR5MRswGQYDVQQDDBJoaSBJbnRlcm1lZGlhdGUgQ0EwHhcNMjQxMTEyMTk0
6ODE3WhcNMjUxMTIyMTk0ODE3WjBoMQswCQYDVQQGEwJVUzESMBAGA1UECAwJWW91
7clN0YXRlMREwDwYDVQQHDAhZb3VyQ2l0eTEZMBcGA1UECgwQWW91ck9yZ2FuaXph
8dGlvbjEXMBUGA1UEAwwOeW91cmRvbWFpbi5jb20wggEiMA0GCSqGSIb3DQEBAQUA
9A4IBDwAwggEKAoIBAQCSxTDiQWEArAFdVLF8fYnY5jqCUiYo4CPE1GLL/vI2t/0u
108a//yWWuZaOK0z3Mj0FRuUofXEJGGXB2fFs1qStuyYBEpwJaJm7uhm1zNLakC4I7
11V12Bs5/edw8qMQLmGu7kqQ0PiOMTuS2GS2EhPUnKIErqhiQBgv56hW4o86SGjnYb
12rGSBCAys6NpaqPC8oMOXjJs5T0bbyHaT8ga2zaLlD4pBcho+2sWITWtv9eMZFuva
13kE8vHNR48mbR5FuZ1CJenxU62NHZcfIaMChYN5KjGdHGqCFbPXzxehaX0Ofhghc6
14Z28KiP+AbQwaMEAqRrvU0V7GTLmE6DAWvmYJslGxAgMBAAGjggE6MIIBNjAJBgNV
15HRMEAjAAMBEGCWCGSAGG+EIBAQQEAwIGQDAzBglghkgBhvhCAQ0EJhYkT3BlblNT
16TCBHZW5lcmF0ZWQgU2VydmVyIENlcnRpZmljYXRlMB0GA1UdDgQWBBScPhckKM30
17e6q7bJiXfbXIk6qhSzCBnAYDVR0jBIGUMIGRgBQSutLIyJsePNmzX9GhghKTR5XT
18w6FjpGEwXzELMAkGA1UEBhMCc2cxCzAJBgNVBAgMAmhpMQswCQYDVQQKDAJoaTEh
19MB8GA1UECwwYaGkgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MRMwEQYDVQQDDApoaSBS
20b290IENBghQ3yksY6003XwZ6WpPv6BvlNMRG1zAOBgNVHQ8BAf8EBAMCBaAwEwYD
21VR0lBAwwCgYIKwYBBQUHAwEwCgYIKoZIzj0EAwQDaAAwZQIwEwNmLeDtForhC2WY
22JCcijzNBlKLGvKRP0KXGh3Uhfl+ZZOhmTYM5lnbZ1XDrZG2YAjEA9oU5b7AEqtIO
235uYkFrKJ49qA8crVH84thHvfYrOMMJNO8v1fgDtiKayzHnQq+61V
24-----END CERTIFICATE-----
diff --git a/config_files/certificate-authority/config/server.csr b/config_files/certificate-authority/config/server.csr
new file mode 100644
index 0000000..9e5e167
--- /dev/null
+++ b/config_files/certificate-authority/config/server.csr
@@ -0,0 +1,17 @@
1-----BEGIN CERTIFICATE REQUEST-----
2MIICrTCCAZUCAQAwaDELMAkGA1UEBhMCVVMxEjAQBgNVBAgMCVlvdXJTdGF0ZTER
3MA8GA1UEBwwIWW91ckNpdHkxGTAXBgNVBAoMEFlvdXJPcmdhbml6YXRpb24xFzAV
4BgNVBAMMDnlvdXJkb21haW4uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
5CgKCAQEAksUw4kFhAKwBXVSxfH2J2OY6glImKOAjxNRiy/7yNrf9LvGv/8llrmWj
6itM9zI9BUblKH1xCRhlwdnxbNakrbsmARKcCWiZu7oZtczS2pAuCO1ddgbOf3ncP
7KjEC5hru5KkND4jjE7kthkthIT1JyiBK6oYkAYL+eoVuKPOkho52G6xkgQgMrOja
8WqjwvKDDl4ybOU9G28h2k/IGts2i5Q+KQXIaPtrFiE1rb/XjGRbr2pBPLxzUePJm
90eRbmdQiXp8VOtjR2XHyGjAoWDeSoxnRxqghWz188XoWl9Dn4YIXOmdvCoj/gG0M
10GjBAKka71NFexky5hOgwFr5mCbJRsQIDAQABoAAwDQYJKoZIhvcNAQELBQADggEB
11ABrlYpipRamlAk0zMYb2J/Yk/sw6T41OzWhG4Z6n6V5KSmCbTO/KgUIjeRMmIilE
12yE2LTJL1aUFDkAib7SJu02U4iZquRDsGSzQbT4xnhzTz4esOowkXEZGFdCV/qhDK
13lN34yFV+oNGT9nO3TjKE2SJPiDlfgMdRikoYPNWo6yv+0l3a4jWiTqq7Xn0derEu
14ZHPBhAuJvWzrD3ixap4BOlSKNp9C0dFuLhbnu9SAuy4uL/rjWsOH+KZVW388MlzA
15CibAN3GHmm7xzNUTrXrX3w5w3mU1O3IKKWu1u/EQTPq8/WfmRcvOg+xhqlOEvCGx
16YrwlWlETn28qAuq0WTa3+Gg=
17-----END CERTIFICATE REQUEST-----
diff --git a/config_files/certificate-authority/config/sign_intermediate_csr.ini b/config_files/certificate-authority/config/sign_intermediate_csr.ini
new file mode 100644
index 0000000..09a20f7
--- /dev/null
+++ b/config_files/certificate-authority/config/sign_intermediate_csr.ini
@@ -0,0 +1,43 @@
1[ ca ]
2# `man ca`
3default_ca = CA_default
4
5[ CA_default ]
6# Directory and file locations.
7dir = /opt/certificate-authority
8certs = $dir/certs
9crl_dir = $dir/crl
10new_certs_dir = $dir/newcerts
11database = $dir/index.txt
12serial = $dir/serial
13
14# The root key and root certificate.
15private_key = pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0104964;token=SmartCard-HSM%20%28UserPIN%29;id=%BA%6C%1F%2B%2B%16%E9%7B%4F%31%B0%91%19%73%2F%C8%DF%78%3A%FD;object=root;type=private
16certificate = ../certs/root.crt
17
18# SHA-1 is deprecated, so use SHA-2 instead.
19default_md = sha512
20
21name_opt = ca_default
22cert_opt = ca_default
23default_days = 375
24preserve = no
25policy = policy_loose
26
27[ policy_loose ]
28# Allow the intermediate CA to sign a more diverse range of certificates.
29# See the POLICY FORMAT section of the `ca` man page.
30countryName = optional
31stateOrProvinceName = optional
32localityName = optional
33organizationName = optional
34organizationalUnitName = optional
35commonName = supplied
36emailAddress = optional
37
38[ v3_intermediate_ca ]
39# Extensions for a typical intermediate CA (`man x509v3_config`).
40subjectKeyIdentifier = hash
41authorityKeyIdentifier = keyid:always,issuer
42basicConstraints = critical, CA:true, pathlen:0
43keyUsage = critical, digitalSignature, cRLSign, keyCertSign
diff --git a/config_files/certificate-authority/config/sign_server_and_client_csrs.ini b/config_files/certificate-authority/config/sign_server_and_client_csrs.ini
new file mode 100644
index 0000000..0cffc13
--- /dev/null
+++ b/config_files/certificate-authority/config/sign_server_and_client_csrs.ini
@@ -0,0 +1,45 @@
1[ ca ]
2default_ca = CA_default
3
4[ CA_default ]
5dir = /opt/certificate-authority/intermediate
6certs = $dir/certs
7crl_dir = $dir/crl
8new_certs_dir = $dir/newcerts
9database = $dir/index.txt
10serial = $dir/serial
11private_key = pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0104964;token=SmartCard-HSM%20%28UserPIN%29;id=%D6%0E%28%C8%ED%2B%D5%FF%87%6B%88%06%4F%5B%70%1A%E5%F7%B4%99;object=intermediate;type=private
12certificate = $dir/certs/intermediate.crt
13default_md = sha512
14name_opt = ca_default
15cert_opt = ca_default
16default_days = 375
17preserve = no
18policy = policy_loose
19
20[ policy_loose ]
21countryName = optional
22stateOrProvinceName = optional
23localityName = optional
24organizationName = optional
25organizationalUnitName = optional
26commonName = supplied
27emailAddress = optional
28
29[ server_cert ]
30basicConstraints = CA:FALSE
31nsCertType = server
32nsComment = "OpenSSL Generated Server Certificate"
33subjectKeyIdentifier = hash
34authorityKeyIdentifier = keyid,issuer:always
35keyUsage = critical, digitalSignature, keyEncipherment
36extendedKeyUsage = serverAuth
37
38[ client_cert ]
39basicConstraints = CA:FALSE
40nsCertType = client
41nsComment = "OpenSSL Generated Client Certificate"
42subjectKeyIdentifier = hash
43authorityKeyIdentifier = keyid,issuer:always
44keyUsage = critical, digitalSignature
45extendedKeyUsage = clientAuth
diff --git a/config_files/certificate-authority/config/yubikey/yubi.crt b/config_files/certificate-authority/config/yubikey/yubi.crt
new file mode 100644
index 0000000..7cd308b
--- /dev/null
+++ b/config_files/certificate-authority/config/yubikey/yubi.crt
@@ -0,0 +1,23 @@
1-----BEGIN CERTIFICATE-----
2MIID5zCCA2ygAwIBAgIUdPIUkJpPJEojUqKFG8wPExCcuA8wCgYIKoZIzj0EAwQw
3gYExCzAJBgNVBAYTAlNHMRIwEAYDVQQIDAlzaW5nYXBvcmUxFTATBgNVBAoMDGNv
4bXBhbnkgbmFtZTEqMCgGA1UECwwhY29tcGFueW5hbWUgQ2VydGlmaWNhdGUgQXV0
5aG9yaXR5MRswGQYDVQQDDBJoaSBJbnRlcm1lZGlhdGUgQ0EwHhcNMjQxMTEyMjAw
6NDQ4WhcNMjUxMTIyMjAwNDQ4WjA7MQswCQYDVQQGEwJVUzEVMBMGA1UECgwMRXhh
7bXBsZSBDb3JwMRUwEwYDVQQDDAxoaWkgVXNlbmFtZXIwggEiMA0GCSqGSIb3DQEB
8AQUAA4IBDwAwggEKAoIBAQDJUjjRY+PpNWuR7Zt81ZLtAzTLSP0BwRhOtUB0JM2Y
9sYm/xaxHDvVORIrn58y7SLEo+k2mWdC5CfyelN7hQEw8BakW2n4ka3BMef7Cd+Hp
10ICTIBvRdecYd5Swl3BB22Pus+WuuY9AP1c1+sMUJ5fRp9TG6MdmyYXDbmNmIUvbU
111NYhaUS9BmE8+Tgcg5BQvvArofk9sR8GVmrfeWRdCIh+Ma+X08UoZLGtkJG3Z51c
12qTUoNBgU61CiRqAEH4PZ5V7zaXgYOpUrr8/ql2e7/WCpn4qmjWDd7DnUCC1VR58z
13lUjFYw9OPPmPZ30IB8fp48Z3tgwynLVX0/iw2o7nPRQtAgMBAAGjggE6MIIBNjAJ
14BgNVHRMEAjAAMBEGCWCGSAGG+EIBAQQEAwIHgDAzBglghkgBhvhCAQ0EJhYkT3Bl
15blNTTCBHZW5lcmF0ZWQgQ2xpZW50IENlcnRpZmljYXRlMB0GA1UdDgQWBBQiJrOh
16Pna4bxHGNpRqmaV/IC/jxzCBnAYDVR0jBIGUMIGRgBQSutLIyJsePNmzX9GhghKT
17R5XTw6FjpGEwXzELMAkGA1UEBhMCc2cxCzAJBgNVBAgMAmhpMQswCQYDVQQKDAJo
18aTEhMB8GA1UECwwYaGkgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MRMwEQYDVQQDDApo
19aSBSb290IENBghQ3yksY6003XwZ6WpPv6BvlNMRG1zAOBgNVHQ8BAf8EBAMCB4Aw
20EwYDVR0lBAwwCgYIKwYBBQUHAwIwCgYIKoZIzj0EAwQDaQAwZgIxAI0V54UBZJqA
21SWYihKikCdS6S6PB9F0OgibPPgWWSVztbImzZsFGAdVpwS8SDp8JMQIxAMVFxqBk
2229UXxX1SvENRXPKZO6a7iMh6E8VmOd/ZXDVkstuL6sUWTRVuiv3YoBPK3A==
23-----END CERTIFICATE-----
diff --git a/config_files/certificate-authority/config/yubikey/yubi.crt.pem b/config_files/certificate-authority/config/yubikey/yubi.crt.pem
new file mode 100644
index 0000000..7cd308b
--- /dev/null
+++ b/config_files/certificate-authority/config/yubikey/yubi.crt.pem
@@ -0,0 +1,23 @@
1-----BEGIN CERTIFICATE-----
2MIID5zCCA2ygAwIBAgIUdPIUkJpPJEojUqKFG8wPExCcuA8wCgYIKoZIzj0EAwQw
3gYExCzAJBgNVBAYTAlNHMRIwEAYDVQQIDAlzaW5nYXBvcmUxFTATBgNVBAoMDGNv
4bXBhbnkgbmFtZTEqMCgGA1UECwwhY29tcGFueW5hbWUgQ2VydGlmaWNhdGUgQXV0
5aG9yaXR5MRswGQYDVQQDDBJoaSBJbnRlcm1lZGlhdGUgQ0EwHhcNMjQxMTEyMjAw
6NDQ4WhcNMjUxMTIyMjAwNDQ4WjA7MQswCQYDVQQGEwJVUzEVMBMGA1UECgwMRXhh
7bXBsZSBDb3JwMRUwEwYDVQQDDAxoaWkgVXNlbmFtZXIwggEiMA0GCSqGSIb3DQEB
8AQUAA4IBDwAwggEKAoIBAQDJUjjRY+PpNWuR7Zt81ZLtAzTLSP0BwRhOtUB0JM2Y
9sYm/xaxHDvVORIrn58y7SLEo+k2mWdC5CfyelN7hQEw8BakW2n4ka3BMef7Cd+Hp
10ICTIBvRdecYd5Swl3BB22Pus+WuuY9AP1c1+sMUJ5fRp9TG6MdmyYXDbmNmIUvbU
111NYhaUS9BmE8+Tgcg5BQvvArofk9sR8GVmrfeWRdCIh+Ma+X08UoZLGtkJG3Z51c
12qTUoNBgU61CiRqAEH4PZ5V7zaXgYOpUrr8/ql2e7/WCpn4qmjWDd7DnUCC1VR58z
13lUjFYw9OPPmPZ30IB8fp48Z3tgwynLVX0/iw2o7nPRQtAgMBAAGjggE6MIIBNjAJ
14BgNVHRMEAjAAMBEGCWCGSAGG+EIBAQQEAwIHgDAzBglghkgBhvhCAQ0EJhYkT3Bl
15blNTTCBHZW5lcmF0ZWQgQ2xpZW50IENlcnRpZmljYXRlMB0GA1UdDgQWBBQiJrOh
16Pna4bxHGNpRqmaV/IC/jxzCBnAYDVR0jBIGUMIGRgBQSutLIyJsePNmzX9GhghKT
17R5XTw6FjpGEwXzELMAkGA1UEBhMCc2cxCzAJBgNVBAgMAmhpMQswCQYDVQQKDAJo
18aTEhMB8GA1UECwwYaGkgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MRMwEQYDVQQDDApo
19aSBSb290IENBghQ3yksY6003XwZ6WpPv6BvlNMRG1zAOBgNVHQ8BAf8EBAMCB4Aw
20EwYDVR0lBAwwCgYIKwYBBQUHAwIwCgYIKoZIzj0EAwQDaQAwZgIxAI0V54UBZJqA
21SWYihKikCdS6S6PB9F0OgibPPgWWSVztbImzZsFGAdVpwS8SDp8JMQIxAMVFxqBk
2229UXxX1SvENRXPKZO6a7iMh6E8VmOd/ZXDVkstuL6sUWTRVuiv3YoBPK3A==
23-----END CERTIFICATE-----
diff --git a/config_files/certificate-authority/config/yubikey/yubi.csr b/config_files/certificate-authority/config/yubikey/yubi.csr
new file mode 100644
index 0000000..f001530
--- /dev/null
+++ b/config_files/certificate-authority/config/yubikey/yubi.csr
@@ -0,0 +1,16 @@
1-----BEGIN CERTIFICATE REQUEST-----
2MIICgDCCAWgCAQAwOzEVMBMGA1UEAwwMaGlpIFVzZW5hbWVyMRUwEwYDVQQKDAxF
3eGFtcGxlIENvcnAxCzAJBgNVBAYTAlVTMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
4MIIBCgKCAQEAyVI40WPj6TVrke2bfNWS7QM0y0j9AcEYTrVAdCTNmLGJv8WsRw71
5TkSK5+fMu0ixKPpNplnQuQn8npTe4UBMPAWpFtp+JGtwTHn+wnfh6SAkyAb0XXnG
6HeUsJdwQdtj7rPlrrmPQD9XNfrDFCeX0afUxujHZsmFw25jZiFL21NTWIWlEvQZh
7PPk4HIOQUL7wK6H5PbEfBlZq33lkXQiIfjGvl9PFKGSxrZCRt2edXKk1KDQYFOtQ
8okagBB+D2eVe82l4GDqVK6/P6pdnu/1gqZ+Kpo1g3ew51AgtVUefM5VIxWMPTjz5
9j2d9CAfH6ePGd7YMMpy1V9P4sNqO5z0ULQIDAQABoAAwDQYJKoZIhvcNAQELBQAD
10ggEBADcx0k7zRU4d9F8yQ7aBLhraIDJ9ZURvEptoUTuzFUu95ACZWOoiATSeLoiJ
116nnHGksOQjYWCRUNu7lYuyE0SfxeFGCKEH8J2jkX8Z5JhKyc+VZeuaD+pu8gH3gz
12RIl2Dz8L9npMQGSQrdAwJyyohHERYNSrW0OWwHP38yqqpA4rRUGHDmZtPRUjirnq
13zABvt5rJAM7nx1Q+OGYupdzrg5fFtlN3JNWl2EZpe2e65A13k+nBNSSBt2aLyfVV
149GXblWRhei/OAIJTThXW+dex5aU8ujDgeGnHrtR5r7OqkL72+4TI3UZie+k2NOBZ
15zD2XpFWYvUMcvi1oLaTyQ4fulLE=
16-----END CERTIFICATE REQUEST-----
diff --git a/config_files/certificate-authority/config/yubikey/yubi_pubkey.pem b/config_files/certificate-authority/config/yubikey/yubi_pubkey.pem
new file mode 100644
index 0000000..4979331
--- /dev/null
+++ b/config_files/certificate-authority/config/yubikey/yubi_pubkey.pem
@@ -0,0 +1,9 @@
1-----BEGIN PUBLIC KEY-----
2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyVI40WPj6TVrke2bfNWS
37QM0y0j9AcEYTrVAdCTNmLGJv8WsRw71TkSK5+fMu0ixKPpNplnQuQn8npTe4UBM
4PAWpFtp+JGtwTHn+wnfh6SAkyAb0XXnGHeUsJdwQdtj7rPlrrmPQD9XNfrDFCeX0
5afUxujHZsmFw25jZiFL21NTWIWlEvQZhPPk4HIOQUL7wK6H5PbEfBlZq33lkXQiI
6fjGvl9PFKGSxrZCRt2edXKk1KDQYFOtQokagBB+D2eVe82l4GDqVK6/P6pdnu/1g
7qZ+Kpo1g3ew51AgtVUefM5VIxWMPTjz5j2d9CAfH6ePGd7YMMpy1V9P4sNqO5z0U
8LQIDAQAB
9-----END PUBLIC KEY-----
diff --git a/config_files/certificate-authority/index.txt b/config_files/certificate-authority/index.txt
new file mode 100644
index 0000000..f389103
--- /dev/null
+++ b/config_files/certificate-authority/index.txt
@@ -0,0 +1 @@
V 291111193605Z 37CA4B18EB4D375F067A5A93EFE81BE534C446D7 unknown /C=SG/ST=singapore/O=company name/OU=companyname Certificate Authority/CN=hi Intermediate CA
diff --git a/config_files/certificate-authority/index.txt.attr b/config_files/certificate-authority/index.txt.attr
new file mode 100644
index 0000000..8f7e63a
--- /dev/null
+++ b/config_files/certificate-authority/index.txt.attr
@@ -0,0 +1 @@
unique_subject = yes
diff --git a/config_files/certificate-authority/index.txt.old b/config_files/certificate-authority/index.txt.old
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/config_files/certificate-authority/index.txt.old
diff --git a/config_files/certificate-authority/intermediate/certs/intermediate.crt b/config_files/certificate-authority/intermediate/certs/intermediate.crt
new file mode 100644
index 0000000..544c552
--- /dev/null
+++ b/config_files/certificate-authority/intermediate/certs/intermediate.crt
@@ -0,0 +1,16 @@
1-----BEGIN CERTIFICATE-----
2MIIChjCCAgygAwIBAgIUN8pLGOtNN18GelqT7+gb5TTERtcwCgYIKoZIzj0EAwQw
3XzELMAkGA1UEBhMCc2cxCzAJBgNVBAgMAmhpMQswCQYDVQQKDAJoaTEhMB8GA1UE
4CwwYaGkgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MRMwEQYDVQQDDApoaSBSb290IENB
5MB4XDTI0MTExMjE5MzYwNVoXDTI5MTExMTE5MzYwNVowgYExCzAJBgNVBAYTAlNH
6MRIwEAYDVQQIDAlzaW5nYXBvcmUxFTATBgNVBAoMDGNvbXBhbnkgbmFtZTEqMCgG
7A1UECwwhY29tcGFueW5hbWUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MRswGQYDVQQD
8DBJoaSBJbnRlcm1lZGlhdGUgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQHjbSZ
9S/10AselloIpzwY56f1pntc622qiJ/lB3O9WDkSEt5UpdXumtehRVKHkTCK2U6Wc
10ldyBA5aVkj4DpSFgLgfWI/+23WzI5bzYtyEW7VuwsEwWTq6y2PpWVULZzUijZjBk
11MB0GA1UdDgQWBBQSutLIyJsePNmzX9GhghKTR5XTwzAfBgNVHSMEGDAWgBQ1I3hI
12xxMh1tp7g4SRVmjAgyEapTASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQE
13AwIBhjAKBggqhkjOPQQDBANoADBlAjBpqaP5p29kRuZrdmjTJq/laWpenSZiXK4m
14rJVaBV2V0ajCB4eqTnS4KJORjTfLVOMCMQCf6T3ZH5TN+f1QkHxDM9DUOkyOqOzv
15FXvgRTHcWckPqceCIgO4IWFS7WxgyvEmlr4=
16-----END CERTIFICATE-----
diff --git a/config_files/certificate-authority/intermediate/csr/intermediate.csr b/config_files/certificate-authority/intermediate/csr/intermediate.csr
new file mode 100644
index 0000000..b9d5e3f
--- /dev/null
+++ b/config_files/certificate-authority/intermediate/csr/intermediate.csr
@@ -0,0 +1,10 @@
1-----BEGIN CERTIFICATE REQUEST-----
2MIIBezCCAQECAQAwgYExCzAJBgNVBAYTAlNHMRIwEAYDVQQIDAlzaW5nYXBvcmUx
3FTATBgNVBAoMDGNvbXBhbnkgbmFtZTEqMCgGA1UECwwhY29tcGFueW5hbWUgQ2Vy
4dGlmaWNhdGUgQXV0aG9yaXR5MRswGQYDVQQDDBJoaSBJbnRlcm1lZGlhdGUgQ0Ew
5djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQHjbSZS/10AselloIpzwY56f1pntc622qi
6J/lB3O9WDkSEt5UpdXumtehRVKHkTCK2U6WcldyBA5aVkj4DpSFgLgfWI/+23WzI
75bzYtyEW7VuwsEwWTq6y2PpWVULZzUigADAKBggqhkjOPQQDBANoADBlAjAwViQS
8f1Bk2z0kdYI5RVorbdJ0nDgxIJ61NmqO0zAB6Rozpgpz13V4G0ozK9D3J68CMQDl
9KAr4P5yRuN8yzKUb+kl4WwnAu5NRtly7xc/uzlqhNOyUcHPRnr8YygbqhjKujBg=
10-----END CERTIFICATE REQUEST-----
diff --git a/config_files/certificate-authority/intermediate/index.txt b/config_files/certificate-authority/intermediate/index.txt
new file mode 100644
index 0000000..248f6f5
--- /dev/null
+++ b/config_files/certificate-authority/intermediate/index.txt
@@ -0,0 +1,3 @@
1V 251122194817Z 74F214909A4F244A2352A2851BCC0F13109CB80E unknown /C=US/ST=YourState/L=YourCity/O=YourOrganization/CN=yourdomain.com
2V 251122200448Z 74F214909A4F244A2352A2851BCC0F13109CB80F unknown /C=US/O=Example Corp/CN=hii Usenamer
3V 251122220244Z 74F214909A4F244A2352A2851BCC0F13109CB810 unknown /C=US/ST=YourState/L=YourCity/O=YourOrg/CN=client2
diff --git a/config_files/certificate-authority/intermediate/index.txt.attr b/config_files/certificate-authority/intermediate/index.txt.attr
new file mode 100644
index 0000000..8f7e63a
--- /dev/null
+++ b/config_files/certificate-authority/intermediate/index.txt.attr
@@ -0,0 +1 @@
unique_subject = yes
diff --git a/config_files/certificate-authority/intermediate/index.txt.attr.old b/config_files/certificate-authority/intermediate/index.txt.attr.old
new file mode 100644
index 0000000..8f7e63a
--- /dev/null
+++ b/config_files/certificate-authority/intermediate/index.txt.attr.old
@@ -0,0 +1 @@
unique_subject = yes
diff --git a/config_files/certificate-authority/intermediate/index.txt.old b/config_files/certificate-authority/intermediate/index.txt.old
new file mode 100644
index 0000000..a701b7b
--- /dev/null
+++ b/config_files/certificate-authority/intermediate/index.txt.old
@@ -0,0 +1,2 @@
1V 251122194817Z 74F214909A4F244A2352A2851BCC0F13109CB80E unknown /C=US/ST=YourState/L=YourCity/O=YourOrganization/CN=yourdomain.com
2V 251122200448Z 74F214909A4F244A2352A2851BCC0F13109CB80F unknown /C=US/O=Example Corp/CN=hii Usenamer
diff --git a/config_files/certificate-authority/intermediate/newcerts/74F214909A4F244A2352A2851BCC0F13109CB80E.pem b/config_files/certificate-authority/intermediate/newcerts/74F214909A4F244A2352A2851BCC0F13109CB80E.pem
new file mode 100644
index 0000000..84447b1
--- /dev/null
+++ b/config_files/certificate-authority/intermediate/newcerts/74F214909A4F244A2352A2851BCC0F13109CB80E.pem
@@ -0,0 +1,24 @@
1-----BEGIN CERTIFICATE-----
2MIIEEzCCA5mgAwIBAgIUdPIUkJpPJEojUqKFG8wPExCcuA4wCgYIKoZIzj0EAwQw
3gYExCzAJBgNVBAYTAlNHMRIwEAYDVQQIDAlzaW5nYXBvcmUxFTATBgNVBAoMDGNv
4bXBhbnkgbmFtZTEqMCgGA1UECwwhY29tcGFueW5hbWUgQ2VydGlmaWNhdGUgQXV0
5aG9yaXR5MRswGQYDVQQDDBJoaSBJbnRlcm1lZGlhdGUgQ0EwHhcNMjQxMTEyMTk0
6ODE3WhcNMjUxMTIyMTk0ODE3WjBoMQswCQYDVQQGEwJVUzESMBAGA1UECAwJWW91
7clN0YXRlMREwDwYDVQQHDAhZb3VyQ2l0eTEZMBcGA1UECgwQWW91ck9yZ2FuaXph
8dGlvbjEXMBUGA1UEAwwOeW91cmRvbWFpbi5jb20wggEiMA0GCSqGSIb3DQEBAQUA
9A4IBDwAwggEKAoIBAQCSxTDiQWEArAFdVLF8fYnY5jqCUiYo4CPE1GLL/vI2t/0u
108a//yWWuZaOK0z3Mj0FRuUofXEJGGXB2fFs1qStuyYBEpwJaJm7uhm1zNLakC4I7
11V12Bs5/edw8qMQLmGu7kqQ0PiOMTuS2GS2EhPUnKIErqhiQBgv56hW4o86SGjnYb
12rGSBCAys6NpaqPC8oMOXjJs5T0bbyHaT8ga2zaLlD4pBcho+2sWITWtv9eMZFuva
13kE8vHNR48mbR5FuZ1CJenxU62NHZcfIaMChYN5KjGdHGqCFbPXzxehaX0Ofhghc6
14Z28KiP+AbQwaMEAqRrvU0V7GTLmE6DAWvmYJslGxAgMBAAGjggE6MIIBNjAJBgNV
15HRMEAjAAMBEGCWCGSAGG+EIBAQQEAwIGQDAzBglghkgBhvhCAQ0EJhYkT3BlblNT
16TCBHZW5lcmF0ZWQgU2VydmVyIENlcnRpZmljYXRlMB0GA1UdDgQWBBScPhckKM30
17e6q7bJiXfbXIk6qhSzCBnAYDVR0jBIGUMIGRgBQSutLIyJsePNmzX9GhghKTR5XT
18w6FjpGEwXzELMAkGA1UEBhMCc2cxCzAJBgNVBAgMAmhpMQswCQYDVQQKDAJoaTEh
19MB8GA1UECwwYaGkgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MRMwEQYDVQQDDApoaSBS
20b290IENBghQ3yksY6003XwZ6WpPv6BvlNMRG1zAOBgNVHQ8BAf8EBAMCBaAwEwYD
21VR0lBAwwCgYIKwYBBQUHAwEwCgYIKoZIzj0EAwQDaAAwZQIwEwNmLeDtForhC2WY
22JCcijzNBlKLGvKRP0KXGh3Uhfl+ZZOhmTYM5lnbZ1XDrZG2YAjEA9oU5b7AEqtIO
235uYkFrKJ49qA8crVH84thHvfYrOMMJNO8v1fgDtiKayzHnQq+61V
24-----END CERTIFICATE-----
diff --git a/config_files/certificate-authority/intermediate/newcerts/74F214909A4F244A2352A2851BCC0F13109CB80F.pem b/config_files/certificate-authority/intermediate/newcerts/74F214909A4F244A2352A2851BCC0F13109CB80F.pem
new file mode 100644
index 0000000..7cd308b
--- /dev/null
+++ b/config_files/certificate-authority/intermediate/newcerts/74F214909A4F244A2352A2851BCC0F13109CB80F.pem
@@ -0,0 +1,23 @@
1-----BEGIN CERTIFICATE-----
2MIID5zCCA2ygAwIBAgIUdPIUkJpPJEojUqKFG8wPExCcuA8wCgYIKoZIzj0EAwQw
3gYExCzAJBgNVBAYTAlNHMRIwEAYDVQQIDAlzaW5nYXBvcmUxFTATBgNVBAoMDGNv
4bXBhbnkgbmFtZTEqMCgGA1UECwwhY29tcGFueW5hbWUgQ2VydGlmaWNhdGUgQXV0
5aG9yaXR5MRswGQYDVQQDDBJoaSBJbnRlcm1lZGlhdGUgQ0EwHhcNMjQxMTEyMjAw
6NDQ4WhcNMjUxMTIyMjAwNDQ4WjA7MQswCQYDVQQGEwJVUzEVMBMGA1UECgwMRXhh
7bXBsZSBDb3JwMRUwEwYDVQQDDAxoaWkgVXNlbmFtZXIwggEiMA0GCSqGSIb3DQEB
8AQUAA4IBDwAwggEKAoIBAQDJUjjRY+PpNWuR7Zt81ZLtAzTLSP0BwRhOtUB0JM2Y
9sYm/xaxHDvVORIrn58y7SLEo+k2mWdC5CfyelN7hQEw8BakW2n4ka3BMef7Cd+Hp
10ICTIBvRdecYd5Swl3BB22Pus+WuuY9AP1c1+sMUJ5fRp9TG6MdmyYXDbmNmIUvbU
111NYhaUS9BmE8+Tgcg5BQvvArofk9sR8GVmrfeWRdCIh+Ma+X08UoZLGtkJG3Z51c
12qTUoNBgU61CiRqAEH4PZ5V7zaXgYOpUrr8/ql2e7/WCpn4qmjWDd7DnUCC1VR58z
13lUjFYw9OPPmPZ30IB8fp48Z3tgwynLVX0/iw2o7nPRQtAgMBAAGjggE6MIIBNjAJ
14BgNVHRMEAjAAMBEGCWCGSAGG+EIBAQQEAwIHgDAzBglghkgBhvhCAQ0EJhYkT3Bl
15blNTTCBHZW5lcmF0ZWQgQ2xpZW50IENlcnRpZmljYXRlMB0GA1UdDgQWBBQiJrOh
16Pna4bxHGNpRqmaV/IC/jxzCBnAYDVR0jBIGUMIGRgBQSutLIyJsePNmzX9GhghKT
17R5XTw6FjpGEwXzELMAkGA1UEBhMCc2cxCzAJBgNVBAgMAmhpMQswCQYDVQQKDAJo
18aTEhMB8GA1UECwwYaGkgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MRMwEQYDVQQDDApo
19aSBSb290IENBghQ3yksY6003XwZ6WpPv6BvlNMRG1zAOBgNVHQ8BAf8EBAMCB4Aw
20EwYDVR0lBAwwCgYIKwYBBQUHAwIwCgYIKoZIzj0EAwQDaQAwZgIxAI0V54UBZJqA
21SWYihKikCdS6S6PB9F0OgibPPgWWSVztbImzZsFGAdVpwS8SDp8JMQIxAMVFxqBk
2229UXxX1SvENRXPKZO6a7iMh6E8VmOd/ZXDVkstuL6sUWTRVuiv3YoBPK3A==
23-----END CERTIFICATE-----
diff --git a/config_files/certificate-authority/intermediate/newcerts/74F214909A4F244A2352A2851BCC0F13109CB810.pem b/config_files/certificate-authority/intermediate/newcerts/74F214909A4F244A2352A2851BCC0F13109CB810.pem
new file mode 100644
index 0000000..e7bcb9a
--- /dev/null
+++ b/config_files/certificate-authority/intermediate/newcerts/74F214909A4F244A2352A2851BCC0F13109CB810.pem
@@ -0,0 +1,24 @@
1-----BEGIN CERTIFICATE-----
2MIIEBDCCA4mgAwIBAgIUdPIUkJpPJEojUqKFG8wPExCcuBAwCgYIKoZIzj0EAwQw
3gYExCzAJBgNVBAYTAlNHMRIwEAYDVQQIDAlzaW5nYXBvcmUxFTATBgNVBAoMDGNv
4bXBhbnkgbmFtZTEqMCgGA1UECwwhY29tcGFueW5hbWUgQ2VydGlmaWNhdGUgQXV0
5aG9yaXR5MRswGQYDVQQDDBJoaSBJbnRlcm1lZGlhdGUgQ0EwHhcNMjQxMTEyMjIw
6MjQ0WhcNMjUxMTIyMjIwMjQ0WjBYMQswCQYDVQQGEwJVUzESMBAGA1UECAwJWW91
7clN0YXRlMREwDwYDVQQHDAhZb3VyQ2l0eTEQMA4GA1UECgwHWW91ck9yZzEQMA4G
8A1UEAwwHY2xpZW50MjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANik
9xK/PaOCf2ewyWsZ2paKGWTBmu+72qDDIIJHYAT+7vp/n7m91K0+MhzOsDwdJH/vH
10oT1Wy30Q6eGRG6EgiL6oHbWWp+Rp6zDHAHXc+IYDWqs6ipUOYBbaXllHirnlkG3z
11XJ11d05gxWPsXjDw96O91CKJPtSIC0kyVU4E22SM0Qcv0IaHsBG1+bYOtOT0wNE5
12v/pvNJYP7Oe4H+8s6rZZr+S5AT+JdU7B4+tyzI40M+4cjrVi987C3Y1qZ80MN4L6
13IWSjSVOwe8I1Ktj7fJ11GBGsWrxeOu4G9KtpVTyI+TNyg6UMR805J6c+BR6t7C5Z
14aUdsAaqX66Nsw3pNDo8CAwEAAaOCATowggE2MAkGA1UdEwQCMAAwEQYJYIZIAYb4
15QgEBBAQDAgeAMDMGCWCGSAGG+EIBDQQmFiRPcGVuU1NMIEdlbmVyYXRlZCBDbGll
16bnQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFNh/IRK0n80go6/SriULim3nGAkKMIGc
17BgNVHSMEgZQwgZGAFBK60sjImx482bNf0aGCEpNHldPDoWOkYTBfMQswCQYDVQQG
18EwJzZzELMAkGA1UECAwCaGkxCzAJBgNVBAoMAmhpMSEwHwYDVQQLDBhoaSBDZXJ0
19aWZpY2F0ZSBBdXRob3JpdHkxEzARBgNVBAMMCmhpIFJvb3QgQ0GCFDfKSxjrTTdf
20Bnpak+/oG+U0xEbXMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcD
21AjAKBggqhkjOPQQDBANpADBmAjEA6gSZO2a0iijgvcYOm9fB8vIgwYDlrEytmIt4
22DWSRP7k9/a+CW6CfNf8IWNDmfNOmAjEAsbP8DRJ3Bb5iEwE3XAACAHANnMNWCJ05
231FLmX4pIQee05665Uao7HcTCPAGNJpRY
24-----END CERTIFICATE-----
diff --git a/config_files/certificate-authority/intermediate/serial b/config_files/certificate-authority/intermediate/serial
new file mode 100644
index 0000000..0d3c40b
--- /dev/null
+++ b/config_files/certificate-authority/intermediate/serial
@@ -0,0 +1 @@
74F214909A4F244A2352A2851BCC0F13109CB811
diff --git a/config_files/certificate-authority/intermediate/serial.old b/config_files/certificate-authority/intermediate/serial.old
new file mode 100644
index 0000000..85ab993
--- /dev/null
+++ b/config_files/certificate-authority/intermediate/serial.old
@@ -0,0 +1 @@
74F214909A4F244A2352A2851BCC0F13109CB810
diff --git a/config_files/certificate-authority/newcerts/37CA4B18EB4D375F067A5A93EFE81BE534C446D7.pem b/config_files/certificate-authority/newcerts/37CA4B18EB4D375F067A5A93EFE81BE534C446D7.pem
new file mode 100644
index 0000000..544c552
--- /dev/null
+++ b/config_files/certificate-authority/newcerts/37CA4B18EB4D375F067A5A93EFE81BE534C446D7.pem
@@ -0,0 +1,16 @@
1-----BEGIN CERTIFICATE-----
2MIIChjCCAgygAwIBAgIUN8pLGOtNN18GelqT7+gb5TTERtcwCgYIKoZIzj0EAwQw
3XzELMAkGA1UEBhMCc2cxCzAJBgNVBAgMAmhpMQswCQYDVQQKDAJoaTEhMB8GA1UE
4CwwYaGkgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MRMwEQYDVQQDDApoaSBSb290IENB
5MB4XDTI0MTExMjE5MzYwNVoXDTI5MTExMTE5MzYwNVowgYExCzAJBgNVBAYTAlNH
6MRIwEAYDVQQIDAlzaW5nYXBvcmUxFTATBgNVBAoMDGNvbXBhbnkgbmFtZTEqMCgG
7A1UECwwhY29tcGFueW5hbWUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MRswGQYDVQQD
8DBJoaSBJbnRlcm1lZGlhdGUgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQHjbSZ
9S/10AselloIpzwY56f1pntc622qiJ/lB3O9WDkSEt5UpdXumtehRVKHkTCK2U6Wc
10ldyBA5aVkj4DpSFgLgfWI/+23WzI5bzYtyEW7VuwsEwWTq6y2PpWVULZzUijZjBk
11MB0GA1UdDgQWBBQSutLIyJsePNmzX9GhghKTR5XTwzAfBgNVHSMEGDAWgBQ1I3hI
12xxMh1tp7g4SRVmjAgyEapTASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQE
13AwIBhjAKBggqhkjOPQQDBANoADBlAjBpqaP5p29kRuZrdmjTJq/laWpenSZiXK4m
14rJVaBV2V0ajCB4eqTnS4KJORjTfLVOMCMQCf6T3ZH5TN+f1QkHxDM9DUOkyOqOzv
15FXvgRTHcWckPqceCIgO4IWFS7WxgyvEmlr4=
16-----END CERTIFICATE-----
diff --git a/config_files/certificate-authority/serial b/config_files/certificate-authority/serial
new file mode 100644
index 0000000..0e25be1
--- /dev/null
+++ b/config_files/certificate-authority/serial
@@ -0,0 +1 @@
37CA4B18EB4D375F067A5A93EFE81BE534C446D8
diff --git a/config_files/nginx.conf b/config_files/nginx.conf
new file mode 100644
index 0000000..0f292af
--- /dev/null
+++ b/config_files/nginx.conf
@@ -0,0 +1,88 @@
1user nginx;
2worker_processes auto;
3
4error_log /var/log/nginx/error.log notice;
5pid /var/run/nginx.pid;
6
7events {
8 worker_connections 1024;
9}
10
11ssl_engine pkcs11;
12
13http {
14 types_hash_max_size 4096;
15 include /etc/nginx/mime.types;
16 default_type application/octet-stream;
17
18
19 sendfile on;
20 keepalive_timeout 65;
21
22 ssl_protocols TLSv1.2 TLSv1.3;
23 ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
24 ssl_prefer_server_ciphers off;
25
26 # Server block for non-SSL routes
27 server {
28 listen 80;
29 server_name localhost;
30
31 # Allow specific routes without SSL
32 location = / {
33 proxy_pass http://localhost:5000;
34 proxy_set_header Host $host;
35 proxy_set_header X-Real-IP $remote_addr;
36 }
37
38 location = /c {
39 proxy_pass http://localhost:5000;
40 proxy_set_header Host $host;
41 proxy_set_header X-Real-IP $remote_addr;
42 }
43
44 location ~ ^/v/ {
45 proxy_pass http://localhost:5000;
46 proxy_set_header Host $host;
47 proxy_set_header X-Real-IP $remote_addr;
48 }
49
50 # Redirect all other routes to HTTPS
51 location / {
52 return 301 https://$host$request_uri;
53 }
54 }
55
56 # Server block for SSL routes
57 server {
58 listen 443 ssl;
59 server_name localhost;
60
61# ssl_certificate /etc/nginx/certs/server.crt;
62# ssl_certificate_key /etc/nginx/certs/server.key;
63# ssl_client_certificate /etc/nginx/certs/ca.pem;
64# ssl_verify_client on;
65
66 ssl_certificate /etc/nginx/certs/hsm_server.crt;
67 ssl_certificate_key "engine:pkcs11:pkcs11:serial=DENK0104964;object=serverkey;type=private";
68 ssl_client_certificate /etc/nginx/certs/hsm_chain.crt;
69 ssl_verify_client on;
70 # Add these debugging settings temporarily
71 ssl_protocols TLSv1.2 TLSv1.3;
72 ssl_session_cache shared:SSL:10m;
73 ssl_session_timeout 10m;
74 ssl_verify_depth 3;
75 ssl_prefer_server_ciphers on;
76
77 # Add error logging for SSL
78 error_log /var/log/nginx/error.log debug;
79
80 location / {
81 proxy_pass http://localhost:5000;
82 proxy_set_header Host $host;
83 proxy_set_header X-Real-IP $remote_addr;
84 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
85 proxy_set_header X-Forwarded-Proto $scheme;
86 }
87 }
88}
diff --git a/config_files/nginx.service b/config_files/nginx.service
new file mode 100644
index 0000000..7b5a697
--- /dev/null
+++ b/config_files/nginx.service
@@ -0,0 +1,23 @@
1[Unit]
2Description=The nginx HTTP and reverse proxy server
3After=network-online.target remote-fs.target nss-lookup.target
4Wants=network-online.target
5
6[Service]
7Type=forking
8PIDFile=/run/nginx.pid
9# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
10# SELinux context. This might happen when running `nginx -t` from the cmdline.
11# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
12ExecStartPre=/usr/bin/rm -f /run/nginx.pid
13ExecStartPre=/usr/sbin/nginx -t
14ExecStart=/usr/sbin/nginx
15ExecReload=/usr/sbin/nginx -s reload
16KillSignal=SIGQUIT
17TimeoutStopSec=5
18KillMode=mixed
19PrivateTmp=true
20Environment="OPENSSL_CONF=/etc/pki/tls/openssl.pkcs11.cnf"
21
22[Install]
23WantedBy=multi-user.target
diff --git a/config_files/nitrohsm-ca-docs-complete-and-very-messy/nitrohsm-in-action b/config_files/nitrohsm-ca-docs-complete-and-very-messy/nitrohsm-in-action
new file mode 100644
index 0000000..562ebf5
--- /dev/null
+++ b/config_files/nitrohsm-ca-docs-complete-and-very-messy/nitrohsm-in-action
@@ -0,0 +1,147 @@
1
2sudo apt install pcscd pcsc-tools opensc openssl gnutls-bin
3sudo dnf install -y opensc openssl openssl-pkcs11 yubico-piv-tool yubikey-manager usbutils gnutls-utils #try this first. then sc-hsm-tool and pkcs11-tool.
4sudo dnf install -y pcsc-lite pcsc-lite-ccid
5sudo systemctl start pcscd
6sudo systemctl enable pcscd
7sudo opensc-tool -l
8
9so-pin 3537363231383830
10userpin 648219
11
127535439178124602
13
14pkcs11-tool --login --login-type so --so-pin 1234123412341234 --change-pin --new-pin 3537363231383830
15opensc-tool -l # to list devices
16sc-hsm-tool -X -r 1 # -r is device number. to reset the device, you need so pin and userpin
17sc-hsm-tool --initialize --so-pin 3537363231383830 --pin 648219 -r 1
18ykman piv reset #reset yubikey piv
19
20find / -name opensc-pkcs11.so
21
22TESTING BEFORE OPERATION
23 ubuntu ONLY UBUNTU PKCS11 WORKS TO DISPLAY ALL THE REQUIRED DATA AND PASSES ALL TESTS
24pkcs11-tool --module /usr/lib/x86_64-linux-gnu/pkcs11/opensc-pkcs11.so --login --pin 648219 --test
25/usr/lib64/opensc-pkcs11.so
26/usr/lib64/pkcs11/opensc-pkcs11.so on fedora
27pkcs11-tool --module /usr/lib/x86_64-linux-gnu/pkcs11/opensc-pkcs11.so --login --pin 648219 --list-objects
28OPENSSL_CONF=./hsm.conf openssl engine
29the following should be printed for openssl
30(dynamic) Dynamic engine loading support
31(pkcs11) pkcs11 engine
32
33
34DOCUMNETATION FOR CA + nginx
35
36pkcs11-tool --module /usr/lib/x86_64-linux-gnu/pkcs11/opensc-pkcs11.so --login --pin 648219 --keypairgen --key-type rsa:2048 --id 03 --label "serverkey"
37openssl req -engine pkcs11 -keyform engine -new -key "pkcs11:serial=DENK0302043;object=serverkey;type=private;pin-value=648219" -subj "/C=US/ST=YourState/L=YourCity/O=YourOrganization/CN=yourdomain.com" -out server.csr
38 openssl req -text -noout -verify -in server.csr # to verify the certificate
39openssl ca -config ../sign_server_and_client_csrs.ini -engine pkcs11 -keyform engine -extensions server_cert -days 375 -notext -md sha512 -create_serial -in server.csr -out server.crt
40openssl x509 -in server.crt -text -noout | grep -A 1 "Extended Key Usage" # output web server authentication
41
42010203040506070801020304050607080102030405060708 yubikey manageemnt, normal key 123456
43brew install gnutls
44yubico-piv-tool -a generate -s 9a -k -A RSA2048 -o yubi_pubkey.pem
45yubico-piv-tool -a verify-pin -a request-certificate -s 9a -i yubi_pubkey.pem -S '/CN=hii Usenamer/O=Example Corp/C=US/' -o yubi.csr
46openssl ca -config ../sign_server_and_client_csrs.ini -engine pkcs11 -keyform engine -extensions client_cert -days 375 -notext -md sha512 -create_serial -in yubi.csr -out yubi.crt
47openssl x509 -in yubi.crt -text -noout | grep -A 1 "Extended Key Usage" # output web client authentication
48cp yubi.crt yubi.crt.pem
49yubico-piv-tool -a import-certificate -s 9a -k -i yubi.crt.pem -K PEM
50p11tool --list-tokens
51curl -E 'pkcs11:model=PKCS%2315%20emulated;manufacturer=piv_II;serial=00000000;token=hii%20Usenamer' https://127.0.0.1 -k
52curl -E 'pkcs11:model=PKCS%2315%20emulated;manufacturer=piv_II;serial=00000000;token=hii%20Usenamer;pin-value=123456' https://127.0.0.1 -k
53can do curl -v xxxxxxxx as well for more verbose.
54
55openssl genrsa -out client.key 2048
56openssl req -new -key client.key -out client.csr -subj "/C=US/ST=YourState/L=YourCity/O=YourOrg/CN=client2"
57openssl ca -config ../sign_server_and_client_csrs.ini -engine pkcs11 -keyform engine -extensions client_cert -days 375 -notext -md sha512 -create_serial -in client.csr -out client.crt
58openssl x509 -in client.crt -text -noout | grep -A 1 "Extended Key Usage" # output web client authentication
59curl https://127.0.0.1 --cacert ../../intermediate/certs/chain.crt --cert client.crt --key client.key -k
60
61STILL WILL HAVE ERROR BECAUSE URL REQUEST IS 127.0.0.1, if this is a public domain, curl checks the url in the cert and the requested url and if they both match, there should be no error when curling without -k
62
63openssl version -d # to find the default config file dir
64copy hsm.conf to the directory
65sudo nano /lib/systemd/system/nginx.service
66 add this to under service
67Environment=LANG=C
68Environment="OPENSSL_CONF=/usr/lib/ssl/hsm.conf"
69sudo systemctl daemon-reload
70
71pkcs15-tool --list-info
72 to get the serial number value of the device for the key
73p11tool --list-all
74p11tool --login --list-all pkcs11:model=
75
76ssl_engine pkcs11; # put this after events section, before http.
77 ssl_certificate /home/x/auths2/config/signing_area/server_cert.crt;
78 ssl_certificate_key "engine:pkcs11:pkcs11:serial=DENK0302043;object=serverkey;type=private";
79 ssl_client_certificate /home/x/auths2/intermediate/certs/chain.crt;
80 ssl_verify_client on;
81
82cat server.crt ../intermediate/certs/intermediate.crt ../certs/root.crt > fullchain.crt
83
84curl -X POST http://127.0.0.1/generate_verification -k
85curl -X POST -d "verify=wrIFRSJZ" -E 'pkcs11:model=PKCS%2315%20emulated;manufacturer=piv_II;serial=00000000;token=hii%20Usenamer;pin-value=123456' https://127.0.0.1/verify -k
86curl -E 'pkcs11:model=PKCS%2315%20emulated;manufacturer=piv_II;serial=00000000;token=hii%20Usenamer;pin-value=123456' https://127.0.0.1/check?string=wrIFRSJZ -k
87
88#change the check to not require authentication
89
90https://www.entrust.com/sites/default/files/documentation/integration-guides/nginx-server-nhield-v12-60-11_ig.pdf
91https://docs.nitrokey.com/hsm/linux/certificate-authority
92https://github.com/OpenSC/libp11/blob/5c99a1467e624981181ada75f41315cd1cf13e37/src/eng_parse.c
93 ^ is the pkcs uri for openssl -key
94
95DOCUMNETATION FOR CA + nginx END
96
97
98 yubico
99yubico-piv-tool -a unblock-pin -P 12345678 -N 123456
100123456 pin default
10112345678 pin unlock key default
102010203040506070801020304050607080102030405060708 management key default
103ssh -I /usr/lib64/pkcs11/opensc-pkcs11.so user@ip #then enter the userpin for yubikey
104
105
106should work
107openssl dgst -engine pkcs11 -keyform engine -sha256 -sign "pkcs11:id=%01" -out signature.bin txt
108openssl dgst -engine pkcs11 -keyform engine -sha256 -verify "pkcs11:id=%01" -signature signature.bin txt
109openssl dgst -engine pkcs11 -keyform engine -sha256 -verify 01 -signature signature.bin txt #sign should work as well
110pkcs15-tool --read-public-key 01 > pubkey
111openssl dgst -sha256 -verify pubkey -signature signature.bin txt
112
113
114openssl genrsa -out rootCA.key 2048
115openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem -subj "/CN=Root CA"
116openssl genrsa -out client.key 2048
117openssl req -new -key client.key -out client.csr -subj "/CN=Client"
118openssl x509 -req -in client.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out client.crt -days 500 -sha256
119openssl verify -CAfile rootCA.pem client.crt
120#$client.crt: OK
121
122
123untested
124pkcs11-tool --module /usr/lib64/pkcs11/opensc-pkcs11.so -L #list
125yubico-piv-tool -astatus #list
126pkcs11-tool --module /usr/lib64/pkcs11/opensc-pkcs11.so --slot-index 1 --login --pin 648219 --list-objects
127
128
129 generate the key
130pkcs11-tool --module /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so --login --pin 648219 --keypairgen --key-type rsa:2048 --id 01 --label "foo"
131
132 sign the file and create an output
133pkcs11-tool --module /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so --login --pin 648219 --sign --id 01 --input-file <input-file> --output-file <signature-file>
134pkcs11-tool --module /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so --login --pin 648219 --sign --label "foo" --input-file <input-file> --output-file <signature-file>
135
136
137pkcs11-tool --module /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so --login --pin 648219 --verify --id 01 --input-file <input-file> --signature-file <signature-file>
138pkcs11-tool --module /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so --login --pin 648219 --verify --label "foo" --input-file <input-file> --signature-file <signature-file>
139
140# Example test command sequence
141echo "Test data" > testdata.txt
142pkcs11-tool --module /usr/lib/x86_64-linux-gnu/pkcs11/opensc-pkcs11.so --login --pin 648219 --id 01 --type privkey --sign -i testdata.txt -o signeddata.bin
143pkcs11-tool --module /usr/lib/x86_64-linux-gnu/pkcs11/opensc-pkcs11.so --login --pin 648219 --id 01 --type pubkey --verify -i testdata.txt -s signeddata.bin
144
145
146pkcs11-tool --module $MODULE --login --pin YOUR_PIN --list-objects
147
diff --git a/config_files/nitrohsm-ca-docs-complete-and-very-messy/nitrohsm-official-docs b/config_files/nitrohsm-ca-docs-complete-and-very-messy/nitrohsm-official-docs
new file mode 100644
index 0000000..a627ad9
--- /dev/null
+++ b/config_files/nitrohsm-ca-docs-complete-and-very-messy/nitrohsm-official-docs
@@ -0,0 +1,507 @@
1pkcs11-tool -l --keypairgen --key-type EC:secp384r1 --label root
2or
3pkcs11-tool -l --keypairgen --key-type EC:secp256r1 --label root
4pkcs11-tool -l --keypairgen --key-type rsa:4096 --label root
5
6pki_dir=/opt/certificate-authority
7mkdir $pki_dir
8cd $pki_dir
9mkdir certs config crl newcerts intermediate intermediate/certs intermediate/crl intermediate/csr intermediate/newcerts
10touch index.txt intermediate/index.txt
11cd config
12
13# Arch Linux
14pacman -S community/opensc community/libp11
15
16# Ubuntu
17sudo apt-get install opensc gnutls-bin
18
19# Generate private key on HSM
20$ pkcs11-tool -l --keypairgen --key-type EC:secp384r1 --label root
21Using slot 0 with a present token (0x0)
22Logging in to "SmartCard-HSM (UserPIN)".
23Please enter User PIN:
24Key pair generated:
25Private Key Object; EC
26 label: root
27 ID: e0161cc8b6f5d66ac6835ecdecb623fc0506a675
28 Usage: sign, derive
29 Access: none
30Public Key Object; EC EC_POINT 384 bits
31 EC_POINT: 046104c1e7b40e1ef9e5d47399aeeda695026c9eb626462059eb696e8f2b647b42d64ac3b7fc7a5b31aa3edf9bce46b2cdcf8e5d190b13601d3d14ffb119c8cf60033c6b78ba579b85113ca536eef1cf85ba418ff0110a56ec881b329e0562e090a3e7
32 EC_PARAMS: 06052b81040022
33 label: root
34 ID: e0161cc8b6f5d66ac6835ecdecb623fc0506a675
35 Usage: verify, derive
36 Access: none
37
38
39#to get the id
40pkcs11-tool -O
41
42vim create_root_cert.ini
43[ ca ]
44# `man ca`
45default_ca = CA_default
46
47[ CA_default ]
48# Directory and file locations.
49dir = /opt/certificate-authority
50certs = $dir/certs
51crl_dir = $dir/crl
52new_certs_dir = $dir/newcerts
53database = $dir/index.txt
54serial = $dir/serial
55
56# SHA-1 is deprecated, so use SHA-2 instead.
57default_md = sha512
58
59name_opt = ca_default
60cert_opt = ca_default
61default_days = 375
62preserve = no
63policy = policy_strict
64
65[ policy_strict ]
66# The root CA should only sign intermediate certificates that match.
67# See the POLICY FORMAT section of `man ca`.
68countryName = match
69stateOrProvinceName = match
70organizationName = match
71organizationalUnitName = optional
72commonName = supplied
73emailAddress = optional
74
75[ req ]
76# Options for the `req` tool (`man req`).
77default_bits = 4096
78distinguished_name = req_distinguished_name
79string_mask = utf8only
80prompt = no
81
82# SHA-1 is deprecated, so use SHA-2 instead.
83default_md = sha512
84
85[ req_distinguished_name ]
86C = <two lettter country>
87ST = <full state name>
88O = <your company>
89OU = <your company> Certificate Authority
90CN = <your company> Root CA
91
92[ v3_ca ]
93# Extensions for a typical CA (`man x509v3_config`).
94subjectKeyIdentifier = hash
95authorityKeyIdentifier = keyid:always,issuer
96basicConstraints = critical, CA:true
97keyUsage = critical, digitalSignature, cRLSign, keyCertSign
98
99
100#Generate the self-signed public certificate from the private key. Use the private key id value from earlier.
101$ openssl req -config create_root_cert.ini -engine pkcs11 -keyform engine -key e0161cc8b6f5d66ac6835ecdecb623fc0506a675 -new -x509 -days 3650 -sha512 -extensions v3_ca -out ../certs/root.crt
102engine "pkcs11" set.
103Enter PKCS#11 token PIN for SmartCard-HSM (UserPIN):
104
105#verify stuff matches
106$ openssl x509 -noout -text -in ../certs/root.crt
107Certificate:
108 Data:
109 Version: 3 (0x2)
110 Serial Number:
111 25:ac:e1:36:75:67:26:1d:bb:96:4b:84:c2:2d:83:25:7b:cc:e0:e5
112 Signature Algorithm: ecdsa-with-SHA512
113 Issuer: C = US, ST = My State, O = My Company, OU = My Company Certificate Authority, CN = My Company Root CA
114 Validity
115 Not Before: Aug 18 20:13:20 2020 GMT
116 Not After : Aug 16 20:13:20 2030 GMT
117 Subject: C = US, ST = My State, O = My Company, OU = My Company Certificate Authority, CN = My Company Root CA
118 Subject Public Key Info:
119 Public Key Algorithm: id-ecPublicKey
120 Public-Key: (384 bit)
121 pub:
122 04:c1:e7:b4:0e:1e:f9:e5:d4:73:99:ae:ed:a6:95:
123 02:6c:9e:b6:26:46:20:59:eb:69:6e:8f:2b:64:7b:
124 42:d6:4a:c3:b7:fc:7a:5b:31:aa:3e:df:9b:ce:46:
125 b2:cd:cf:8e:5d:19:0b:13:60:1d:3d:14:ff:b1:19:
126 c8:cf:60:03:3c:6b:78:ba:57:9b:85:11:3c:a5:36:
127 ee:f1:cf:85:ba:41:8f:f0:11:0a:56:ec:88:1b:32:
128 9e:05:62:e0:90:a3:e7
129 ASN1 OID: secp384r1
130 NIST CURVE: P-384
131 X509v3 extensions:
132 X509v3 Subject Key Identifier:
133 F1:FA:61:75:0B:AC:3C:95:97:EF:73:3C:3F:38:22:B1:DB:D9:BF:41
134 X509v3 Authority Key Identifier:
135 keyid:F1:FA:61:75:0B:AC:3C:95:97:EF:73:3C:3F:38:22:B1:DB:D9:BF:41
136
137 X509v3 Basic Constraints: critical
138 CA:TRUE
139 X509v3 Key Usage: critical
140 Digital Signature, Certificate Sign, CRL Sign
141 Signature Algorithm: ecdsa-with-SHA512
142 30:64:02:30:53:b8:b6:5a:41:4b:4f:6a:d1:a6:76:88:df:13:
143 d6:da:c7:48:aa:8b:aa:ff:13:6c:d1:00:53:90:92:b5:71:57:
144 eb:d0:bf:3e:5d:2e:62:c0:3e:40:0f:64:25:a5:92:0f:02:30:
145 15:0a:19:d5:a2:09:86:d8:9d:07:67:71:c3:84:f2:6b:90:20:
146 2d:29:10:9e:4c:73:7a:55:56:4b:dc:fe:8d:3f:f0:9c:20:e1:
147 5a:74:fb:41:86:ad:a4:66:61:74:d7:fd
148
149
150
151
152intermediate authority
153
154# Generate private key on HSM
155$ pkcs11-tool -l --keypairgen --key-type EC:secp384r1 --label intermediate
156Using slot 0 with a present token (0x0)
157Logging in to "SmartCard-HSM (UserPIN)".
158Please enter User PIN:
159Key pair generated:
160Private Key Object; EC
161 label: intermediate
162 ID: bcb48fe9b566ae61891aabbfde6a23d4ff3ab639
163 Usage: sign, derive
164 Access: none
165Public Key Object; EC EC_POINT 384 bits
166 EC_POINT: 046104d0fb5c0cd10c0b6e4d0f6986755824b624ec9fcd8ff9ae5f0109fe6ff3ad887ca760717da894f3ff84dc8c24fe8c93b0cd840a6aa941bb2866c061cef60e47b893d71852b50d6762af10c951426e55ec8925a6cd83aeae1730311108afdbcdee
167 EC_PARAMS: 06052b81040022
168 label: intermediate
169 ID: bcb48fe9b566ae61891aabbfde6a23d4ff3ab639
170 Usage: verify, derive
171 Access: none
172
173pkcs11-tool -O
174
175vim create_intermediate_csr.ini
176
177[ req ]
178# Options for the `req` tool (`man req`).
179default_bits = 4096
180distinguished_name = req_distinguished_name
181string_mask = utf8only
182prompt = no
183
184# SHA-1 is deprecated, so use SHA-2 instead.
185[ v3_ca ]
186# Extensions for a typical CA (`man x509v3_config`).
187subjectKeyIdentifier = hash
188authorityKeyIdentifier = keyid:always,issuer
189basicConstraints = critical, CA:true
190keyUsage = critical, digitalSignature, cRLSign, keyCertSign
191default_md = sha512
192
193[ req_distinguished_name ]
194C = <two lettter country>
195ST = <full state name>
196O = <your company>
197OU = <your company> Certificate Authority
198CN = <your company> Intermediate CA
199
200#generate csr
201$ openssl req -config create_intermediate_csr.ini -engine pkcs11 -keyform engine -key bcb48fe9b566ae61891aabbfde6a23d4ff3ab639 -new -sha512 -out ../intermediate/csr/intermediate.csr
202engine "pkcs11" set.
203Enter PKCS#11 token PIN for SmartCard-HSM (UserPIN):
204
205
206$ openssl req -text -noout -verify -in ../intermediate/csr/intermediate.csr
207verify OK
208Certificate Request:
209 Data:
210 Version: 1 (0x0)
211 Subject: C = US, ST = My State, O = My Company, OU = My Company Certificate Authority, CN = My Company Intermediate CA
212 Subject Public Key Info:
213 Public Key Algorithm: id-ecPublicKey
214 Public-Key: (384 bit)
215 pub:
216 04:d0:fb:5c:0c:d1:0c:0b:6e:4d:0f:69:86:75:58:
217 24:b6:24:ec:9f:cd:8f:f9:ae:5f:01:09:fe:6f:f3:
218 ad:88:7c:a7:60:71:7d:a8:94:f3:ff:84:dc:8c:24:
219 fe:8c:93:b0:cd:84:0a:6a:a9:41:bb:28:66:c0:61:
220 ce:f6:0e:47:b8:93:d7:18:52:b5:0d:67:62:af:10:
221 c9:51:42:6e:55:ec:89:25:a6:cd:83:ae:ae:17:30:
222 31:11:08:af:db:cd:ee
223 ASN1 OID: secp384r1
224 NIST CURVE: P-384
225 Attributes:
226 a0:00
227 Signature Algorithm: ecdsa-with-SHA512
228 30:64:02:30:6a:1d:75:8b:59:99:2c:a8:5d:a0:7f:02:7d:9a:
229 aa:40:74:7a:65:20:03:6b:bc:65:fb:7d:d1:7f:5b:24:ae:6f:
230 40:16:ac:82:0b:80:9b:81:f9:d9:64:ea:0f:41:4c:d7:02:30:
231 4d:28:7f:e3:76:52:c7:10:e1:bd:b7:2e:ea:65:78:41:0c:96:
232 50:5f:e9:1f:be:18:ac:14:ba:65:3f:b0:2a:f4:0f:d0:56:ab:
233 d0:8c:bf:d0:92:9e:f6:e5:f6:8a:af:a5
234
235
236find the fully qualified PKCS#11 URI for your private key, this is an example
237pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0104068;token=SmartCard-HSM%20%28UserPIN%29%00%00%00%00%00%00%00%00%00;id=%E0%16%1C%C8%B6%F5%D6%6A%C6%83%5E%CD%EC%B6%23%FC%05%06%A6%75;object=root;type=private
238
239$ p11tool --list-all
240warning: no token URL was provided for this operation; the available tokens are:
241
242pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0104068;token=SmartCard-HSM%20%28UserPIN%29%00%00%00%00%00%00%00%00%00
243
244$ p11tool --login --list-all pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0104068;token=SmartCard-HSM%20%28UserPIN%29%00%00%00%00%00%00%00%00%00
245Token 'SmartCard-HSM (UserPIN)' with URL 'pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0104068;token=SmartCard-HSM%20%28UserPIN%29%00%00%00%00%00%00%00%00%00' requires user PIN
246Enter PIN:
247Object 0:
248 URL: pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0104068;token=SmartCard-HSM%20%28UserPIN%29%00%00%00%00%00%00%00%00%00;id=%E0%16%1C%C8%B6%F5%D6%6A%C6%83%5E%CD%EC%B6%23%FC%05%06%A6%75;object=root;type=private
249 Type: Private key (EC/ECDSA-SECP384R1)
250 Label: root
251 Flags: CKA_PRIVATE; CKA_NEVER_EXTRACTABLE; CKA_SENSITIVE;
252 ID: e0:16:1c:c8:b6:f5:d6:6a:c6:83:5e:cd:ec:b6:23:fc:05:06:a6:75
253
254Object 1:
255 URL: pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0104068;token=SmartCard-HSM%20%28UserPIN%29%00%00%00%00%00%00%00%00%00;id=%E0%16%1C%C8%B6%F5%D6%6A%C6%83%5E%CD%EC%B6%23%FC%05%06%A6%75;object=root;type=public
256 Type: Public key (EC/ECDSA-SECP384R1)
257 Label: root
258 ID: e0:16:1c:c8:b6:f5:d6:6a:c6:83:5e:cd:ec:b6:23:fc:05:06:a6:75
259
260Object 2:
261 URL: pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0104068;token=SmartCard-HSM%20%28UserPIN%29%00%00%00%00%00%00%00%00%00;id=%BC%B4%8F%E9%B5%66%AE%61%89%1A%AB%BF%DE%6A%23%D4%FF%3A%B6%39;object=intermediate;type=private
262 Type: Private key (EC/ECDSA-SECP384R1)
263 Label: intermediate
264 Flags: CKA_PRIVATE; CKA_NEVER_EXTRACTABLE; CKA_SENSITIVE;
265 ID: bc:b4:8f:e9:b5:66:ae:61:89:1a:ab:bf:de:6a:23:d4:ff:3a:b6:39
266
267Object 3:
268 URL: pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0104068;token=SmartCard-HSM%20%28UserPIN%29%00%00%00%00%00%00%00%00%00;id=%BC%B4%8F%E9%B5%66%AE%61%89%1A%AB%BF%DE%6A%23%D4%FF%3A%B6%39;object=intermediate;type=public
269 Type: Public key (EC/ECDSA-SECP384R1)
270 Label: intermediate
271 ID: bc:b4:8f:e9:b5:66:ae:61:89:1a:ab:bf:de:6a:23:d4:ff:3a:b6:39
272
273
274vim sign_intermediate_csr.ini
275
276[ ca ]
277# `man ca`
278default_ca = CA_default
279
280[ CA_default ]
281# Directory and file locations.
282dir = /opt/certificate-authority
283certs = $dir/certs
284crl_dir = $dir/crl
285new_certs_dir = $dir/newcerts
286database = $dir/index.txt
287serial = $dir/serial
288
289# The root key and root certificate.
290private_key = pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0104068;token=SmartCard-HSM%20%28UserPIN%29%00%00%00%00%00%00%00%00%00;id=%E0%16%1C%C8%B6%F5%D6%6A%C6%83%5E%CD%EC%B6%23%FC%05%06%A6%75;object=root;type=private
291certificate = ../certs/root.crt
292
293# SHA-1 is deprecated, so use SHA-2 instead.
294default_md = sha512
295
296name_opt = ca_default
297cert_opt = ca_default
298default_days = 375
299preserve = no
300policy = policy_loose
301
302[ policy_loose ]
303# Allow the intermediate CA to sign a more diverse range of certificates.
304# See the POLICY FORMAT section of the `ca` man page.
305countryName = optional
306stateOrProvinceName = optional
307localityName = optional
308organizationName = optional
309organizationalUnitName = optional
310commonName = supplied
311emailAddress = optional
312
313[ v3_intermediate_ca ]
314# Extensions for a typical intermediate CA (`man x509v3_config`).
315subjectKeyIdentifier = hash
316authorityKeyIdentifier = keyid:always,issuer
317basicConstraints = critical, CA:true, pathlen:0
318keyUsage = critical, digitalSignature, cRLSign, keyCertSign
319
320
321sign intermediate with root
322$ openssl ca -config sign_intermediate_csr.ini -engine pkcs11 -keyform engine -extensions v3_intermediate_ca -days 1825 -notext -md sha512 -create_serial -in ../intermediate/csr/intermediate.csr -out ../intermediate/certs/intermediate.crt
323engine "pkcs11" set.
324Using configuration from sign_intermediate_csr.ini
325Enter PKCS#11 token PIN for SmartCard-HSM (UserPIN):
326Check that the request matches the signature
327Signature ok
328Certificate Details:
329 Serial Number:
330 35:47:4d:05:12:cc:e1:a8:b6:bf:dd:3e:c8:29:7b:18:c0:a1:5c:68
331 Validity
332 Not Before: Aug 18 20:44:17 2020 GMT
333 Not After : Aug 17 20:44:17 2025 GMT
334 Subject:
335 countryName = US
336 stateOrProvinceName = My State
337 organizationName = My Company
338 organizationalUnitName = My Company Certificate Authority
339 commonName = My Company Intermediate CA
340 X509v3 extensions:
341 X509v3 Subject Key Identifier:
342 1D:4F:E5:ED:11:42:9A:AC:25:E4:51:A3:42:67:97:39:A0:10:AE:82
343 X509v3 Authority Key Identifier:
344 keyid:F1:FA:61:75:0B:AC:3C:95:97:EF:73:3C:3F:38:22:B1:DB:D9:BF:41
345
346 X509v3 Basic Constraints: critical
347 CA:TRUE, pathlen:0
348 X509v3 Key Usage: critical
349 Digital Signature, Certificate Sign, CRL Sign
350Certificate is to be certified until Aug 17 20:44:17 2025 GMT (1825 days)
351Sign the certificate? [y/n]:y
352
353
3541 out of 1 certificate requests certified, commit? [y/n]y
355Write out database with 1 new entries
356Data Base Updated
357
358# to verify
359$ openssl x509 -noout -text -in ../intermediate/certs/intermediate.crt
360Certificate:
361 Data:
362 Version: 3 (0x2)
363 Serial Number:
364 35:47:4d:05:12:cc:e1:a8:b6:bf:dd:3e:c8:29:7b:18:c0:a1:5c:68
365 Signature Algorithm: ecdsa-with-SHA512
366 Issuer: C = US, ST = My State, O = My Company, OU = My Company Certificate Authority, CN = My Company Root CA
367 Validity
368 Not Before: Aug 18 20:44:17 2020 GMT
369 Not After : Aug 17 20:44:17 2025 GMT
370 Subject: C = US, ST = My State, O = My Company, OU = My Company Certificate Authority, CN = My Company Intermediate CA
371 Subject Public Key Info:
372 Public Key Algorithm: id-ecPublicKey
373 Public-Key: (384 bit)
374 pub:
375 04:d0:fb:5c:0c:d1:0c:0b:6e:4d:0f:69:86:75:58:
376 24:b6:24:ec:9f:cd:8f:f9:ae:5f:01:09:fe:6f:f3:
377 ad:88:7c:a7:60:71:7d:a8:94:f3:ff:84:dc:8c:24:
378 fe:8c:93:b0:cd:84:0a:6a:a9:41:bb:28:66:c0:61:
379 ce:f6:0e:47:b8:93:d7:18:52:b5:0d:67:62:af:10:
380 c9:51:42:6e:55:ec:89:25:a6:cd:83:ae:ae:17:30:
381 31:11:08:af:db:cd:ee
382 ASN1 OID: secp384r1
383 NIST CURVE: P-384
384 X509v3 extensions:
385 X509v3 Subject Key Identifier:
386 1D:4F:E5:ED:11:42:9A:AC:25:E4:51:A3:42:67:97:39:A0:10:AE:82
387 X509v3 Authority Key Identifier:
388 keyid:F1:FA:61:75:0B:AC:3C:95:97:EF:73:3C:3F:38:22:B1:DB:D9:BF:41
389
390 X509v3 Basic Constraints: critical
391 CA:TRUE, pathlen:0
392 X509v3 Key Usage: critical
393 Digital Signature, Certificate Sign, CRL Sign
394 Signature Algorithm: ecdsa-with-SHA512
395 30:66:02:31:00:9a:6e:08:d2:d6:3a:29:f6:ba:0c:4c:3a:f4:
396 af:40:5e:e0:71:f2:bc:e4:47:f5:b4:ee:10:d7:27:b1:25:0b:
397 4b:09:78:a1:b8:f2:b8:71:c5:4e:41:33:8e:64:db:ec:eb:02:
398 31:00:fc:39:26:c2:ad:7b:3c:ab:75:06:34:02:47:79:40:31:
399 1d:eb:17:ad:32:10:67:97:37:6f:7f:3c:ce:3e:12:3c:e9:7c:
400 fa:43:3e:34:5d:5e:f4:f3:2f:fd:6a:2f:14:da
401
402
403$ openssl verify -CAfile ../certs/root.crt ../intermediate/certs/intermediate.crt
404../intermediate/certs/intermediate.crt: OK
405
406#certificate chain
407cat ../intermediate/certs/intermediate.crt ../certs/root.crt > ../intermediate/certs/chain.crt
408
409####################setup ca done, to use the private key of the intermediate certificate to sign the CSRs of your servers
410
411vim sign_server_csrs.ini
412
413[ ca ]
414# `man ca`
415default_ca = CA_default
416
417[ CA_default ]
418# Directory and file locations.
419dir = /opt/certificate-authority/intermediate
420certs = $dir/certs
421crl_dir = $dir/crl
422new_certs_dir = $dir/newcerts
423database = $dir/index.txt
424serial = $dir/serial
425
426# The root key and root certificate.
427private_key = pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0104068;token=SmartCard-HSM%20%28UserPIN%29%00%00%00%00%00%00%00%00%00;id=%BC%B4%8F%E9%B5%66%AE%61%89%1A%AB%BF%DE%6A%23%D4%FF%3A%B6%39;object=intermediate;type=private
428certificate = $dir/certs/intermediate.crt
429
430# SHA-1 is deprecated, so use SHA-2 instead.
431default_md = sha512
432
433name_opt = ca_default
434cert_opt = ca_default
435default_days = 375
436preserve = no
437policy = policy_loose
438
439[ policy_loose ]
440# Allow the intermediate CA to sign a more diverse range of certificates.
441# See the POLICY FORMAT section of the `ca` man page.
442countryName = optional
443stateOrProvinceName = optional
444localityName = optional
445organizationName = optional
446organizationalUnitName = optional
447commonName = supplied
448emailAddress = optional
449
450[ server_cert ]
451# Extensions for server certificates (`man x509v3_config`).
452basicConstraints = CA:FALSE
453nsCertType = server
454nsComment = "OpenSSL Generated Server Certificate"
455subjectKeyIdentifier = hash
456authorityKeyIdentifier = keyid,issuer:always
457keyUsage = critical, digitalSignature, keyEncipherment
458extendedKeyUsage = serverAuth
459
460
461$ openssl ca -config sign_server_csrs.ini -engine pkcs11 -keyform engine -extensions server_cert -days 375 -notext -md sha512 -create_serial -in server_cert.csr -out server_cert.crt
462engine "pkcs11" set.
463Using configuration from sign_server_csrs.ini
464Enter PKCS#11 token PIN for SmartCard-HSM (UserPIN):
465Check that the request matches the signature
466Signature ok
467Certificate Details:
468 Serial Number:
469 40:7f:dc:90:b0:3a:1b:fb:d3:e2:74:8d:40:28:a8:12:f7:7e:c3:74
470 Validity
471 Not Before: Aug 18 21:32:42 2020 GMT
472 Not After : Aug 28 21:32:42 2021 GMT
473 Subject:
474 countryName = US
475 stateOrProvinceName = My State
476 organizationName = My Company
477 organizationalUnitName = media
478 commonName = media
479 X509v3 extensions:
480 X509v3 Basic Constraints:
481 CA:FALSE
482 Netscape Cert Type:
483 SSL Server
484 Netscape Comment:
485 OpenSSL Generated Server Certificate
486 X509v3 Subject Key Identifier:
487 26:89:19:95:6C:93:8C:DD:6E:AA:61:D5:C0:E6:78:CC:F1:47:64:FC
488 X509v3 Authority Key Identifier:
489 keyid:1D:4F:E5:ED:11:42:9A:AC:25:E4:51:A3:42:67:97:39:A0:10:AE:82
490 DirName:/C=US/ST=My State/O=My Company/OU=My Company Certificate Authority/CN=My Company Root CA
491 serial:35:47:4D:05:12:CC:E1:A8:B6:BF:DD:3E:C8:29:7B:18:C0:A1:5C:68
492
493 X509v3 Key Usage: critical
494 Digital Signature, Key Encipherment
495 X509v3 Extended Key Usage:
496 TLS Web Server Authentication
497Certificate is to be certified until Aug 28 21:32:42 2021 GMT (375 days)
498Sign the certificate? [y/n]:y
499
500
5011 out of 1 certificate requests certified, commit? [y/n]y
502Write out database with 1 new entries
503Data Base Updated
504
505
506https://docs.nitrokey.com/nitrokeys/features/openpgp-card/certificate-authority
507there is older document that may not be the same but it looks the same
diff --git a/hsm.conf b/config_files/openssl.pkcs11.cnf
index af27cf0..403c7ae 100644
--- a/hsm.conf
+++ b/config_files/openssl.pkcs11.cnf
@@ -15,8 +15,8 @@ pkcs11 = pkcs11_section
15 15
16[pkcs11_section] 16[pkcs11_section]
17engine_id = pkcs11 17engine_id = pkcs11
18dynamic_path = /usr/lib/x86_64-linux-gnu/engines-1.1/libpkcs11.so 18dynamic_path = /usr/lib64/engines-3/libpkcs11.so
19MODULE_PATH = /usr/lib/x86_64-linux-gnu/pkcs11/opensc-pkcs11.so #ubuntu 19#MODULE_PATH = /usr/lib/x86_64-linux-gnu/pkcs11/opensc-pkcs11.so #ubuntu
20#MODULE_PATH = /usr/lib64/pkcs11/opensc-pkcs11.so #fedora/rocky 20MODULE_PATH = /usr/lib64/pkcs11/opensc-pkcs11.so #fedora/rocky
21PIN = 648219 21PIN = 648219
22init = 0 22init = 0
diff --git a/config_files/org.debian.pcsc-lite.policy b/config_files/org.debian.pcsc-lite.policy
new file mode 100644
index 0000000..fc24b62
--- /dev/null
+++ b/config_files/org.debian.pcsc-lite.policy
@@ -0,0 +1,30 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE policyconfig PUBLIC
3 "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
4 "http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">
5<policyconfig>
6 <vendor>The PCSC-lite Project</vendor>
7 <vendor_url>https://pcsclite.apdu.fr/</vendor_url>
8<!-- <icon_name>smart-card</icon_name> -->
9
10 <action id="org.debian.pcsc-lite.access_pcsc">
11 <description>Access to the PC/SC daemon</description>
12 <message>Authentication is required to access the PC/SC daemon</message>
13 <defaults>
14 <allow_any>yes</allow_any>
15 <allow_inactive>yes</allow_inactive>
16 <allow_active>yes</allow_active>
17 </defaults>
18 </action>
19
20 <action id="org.debian.pcsc-lite.access_card">
21 <description>Access to the smart card</description>
22 <message>Authentication is required to access the smart card</message>
23 <defaults>
24 <allow_any>yes</allow_any>
25 <allow_inactive>yes</allow_inactive>
26 <allow_active>yes</allow_active>
27 </defaults>
28 </action>
29
30</policyconfig>
diff --git a/docs b/docs
index 68ced06..6cd4500 100644
--- a/docs
+++ b/docs
@@ -1,31 +1,10 @@
1 1
2nginx handles mtls, and allows connection to local gunicorn instance. If mTLS fails, connection fails and event is logged 2
3 3
4
5 ubuntu
6sudo pip install Flask gunicorn # to install for all users, especially www-data so that the service runs
7 nginx
8install nginx
9sudo systemctl enable --now nginx
10 # cat /var/log/nginx/access.log
11 # /etc/nginx/nginx.conf
12 gunicorn
13gunicorn --bind localhost:5000 app:app # for testing
14sudo nano /etc/systemd/system/gunicorn1.service # as a service
15sudo systemctl enable --now gunicorn1 # as a service
16 python
17app1.py
18sudo mkdir /var/www
19sudo chown -R www-data:www-data /var/www
20sudo cp app1.py /var/www
21
22
23 test
24# private key 4# private key
25openssl genrsa -out ca.key 2048 5openssl genrsa -out ca.key 2048
26# public certificate 6# public certificate
27openssl req -x509 -new -nodes -key ca.key -sha256 -days 1024 -out ca.pem -subj "/C=US/ST=YourState/L=YourCity/O=YourOrg/CN=YourCA" 7openssl req -x509 -new -nodes -key ca.key -sha256 -days 1024 -out ca.pem -subj "/C=US/ST=YourState/L=YourCity/O=YourOrg/CN=YourCA"
28
29# server private key 8# server private key
30openssl genrsa -out server.key 2048 9openssl genrsa -out server.key 2048
31# generate certificate signing request 10# generate certificate signing request
@@ -39,46 +18,56 @@ openssl x509 -req -in client.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out c
39 18
40openssl genrsa -out wrong_client.key 2048 19openssl genrsa -out wrong_client.key 2048
41openssl req -new -x509 -key wrong_client.key -out wrong_client.crt -days 365 -subj "/C=US/ST=State/L=City/O=Organization/CN=incorrectclient" 20openssl req -new -x509 -key wrong_client.key -out wrong_client.crt -days 365 -subj "/C=US/ST=State/L=City/O=Organization/CN=incorrectclient"
42
43curl https://127.0.0.1 --cacert ca.pem --cert wrong_client.crt --key wrong_client.key -k 21curl https://127.0.0.1 --cacert ca.pem --cert wrong_client.crt --key wrong_client.key -k
44curl https://127.0.0.1 --cacert ca.pem --cert client.crt --key client.key -k 22curl https://127.0.0.1 --cacert ca.pem --cert client.crt --key client.key -k
45 23
46 24
47 untested 25# Allow nginx to connect to any network port for nginx to go through selinux
48sudo cp /path/to/ca.pem /usr/local/share/ca-certificates/your-ca.crt 26also turn off selinux permanently
49sudo update-ca-certificates 27sudo setsebool -P httpd_can_network_connect 1
50 nginx configuration 28sudo mkdir -p /etc/nginx/certs
51 ocsp server to check that the server is valid 29sudo cp /flask/v1/keys/* /etc/nginx/certs/
52 crl to check if a client is revoked 30sudo chown -R nginx:nginx /etc/nginx/certs
53server { 31
54 listen 443 ssl; 32# no yubikey verification
55 server_name yourdomain.com; 33curl https://127.0.0.1/v/0ty2 --cacert ca.pem --cert client.crt --key client.key -k
34
35# to activate hsm, move these over
36cat server.crt ../intermediate/certs/intermediate.crt ../certs/root.crt > fullchain.crt
37cp fullchain.crt /etc/nginx/certs/hsm_chain.crt
38cp server.crt /etc/nginx/certs/hsm_server.crt
39sudo pkcs11-tool -L # for denk serial number
40
41
42openssl version -d
43
44edit the openssl.conf file
45/etc/nginx/nginx.conf
46
47then edit the nginx service file
48Environment="OPENSSL_CONF=/etc/pki/tls/openssl.pkcs11.cnf"
49
50add under service
51 systemctl daemon-reload
52 sudo systemctl restart nginx
53
54
55 openssl s_client -connect localhost:443 -cert client.crt -key client.key -CAfile /etc/nginx/certs/hsm_chain.crt
56
57 curl --cert client.crt --key client.key --cacert /etc/nginx/certs/hsm_chain.crt https://localhost:443/ -k
58
56 59
57 ssl_certificate /path/to/your/server.crt; 60 sudo -u nginx pkcs11-tool --module /usr/lib64/opensc-pkcs11.so --list-objects --login
58 ssl_certificate_key /path/to/your/server.key;
59 61
60 # Client certificate verification 62tail -f /var/log/nginx/error.log # to see ssl errors
61 ssl_client_certificate /path/to/your/ca.pem;
62 ssl_verify_client on;
63 63
64 # Enable OCSP stapling and strict verification 64/usr/share/polkit-1/actions/org.debian.pcsc-lite.policy
65 ssl_stapling on; 65change all to yes then restart systemctl pcscd
66 ssl_stapling_verify on; 66if nginx cannot access pcscd(can also prove this by doing a pkcs11-tool list), systemctl pcscd will have error logs)
67 ssl_trusted_certificate /path/to/your/ca.pem;
68 67
69 # Specify resolver for OCSP stapling
70 resolver 8.8.8.8 8.8.4.4 valid=300s;
71 resolver_timeout 10s;
72 68
73 # Enforce OCSP response checking strictly
74 ssl_ocsp on;
75 ssl_ocsp_fail closed;
76 69
77 # Specify CRL file for client certificate revocation checking 70 https://www.redhat.com/en/blog/controlling-access-smart-cards
78 ssl_crl /etc/nginx/ssl/crl.pem;
79 71
80 location / {
81 try_files $uri $uri/ =404;
82 }
83}
84 72
73sudo curl -vvv -E 'pkcs11:model=PKCS%2315%20emulated;manufacturer=piv_II;serial=00000000;token=user2;pin-value=123456' --cacert fullchain2.crt https://p.0nom.ch/c
diff --git a/flask1.py b/flask1.py
new file mode 100644
index 0000000..eb9ff28
--- /dev/null
+++ b/flask1.py
@@ -0,0 +1,38 @@
1from flask import Flask
2from flask import Flask, request, jsonify
3from tfa import *
4
5app = Flask(__name__)
6store = customstore()
7
8@app.route('/')
9def hello_world():
10 return """Hello, World!
11This is an authentication server
12Available directories are:
13/c to create a key
14/a to authorise a key
15/v to verify that a key is authorised
16
17"""
18
19@app.route('/c', methods=['GET'])
20def create():
21 return store.create()
22
23@app.route('/a/<code>', methods=['GET'])
24def authenticate(code):
25 if store.authenticate(code):
26 return "True"
27 else:
28 return "False"
29
30@app.route('/v/<code>', methods=['GET'])
31def verify(code):
32 if store.check(code):
33 return "True"
34 else:
35 return "False"
36
37if __name__ == '__main__':
38 app.run(host='0.0.0.0', port=5000, debug=True)
diff --git a/gunicorn1.service b/gunicorn1.service
deleted file mode 100644
index 425c453..0000000
--- a/gunicorn1.service
+++ /dev/null
@@ -1,14 +0,0 @@
1
2[Unit]
3Description=gunicorn1
4After=network.target
5
6[Service]
7User=www-data
8Group=www-data
9WorkingDirectory=/var/www
10ExecStart=/usr/local/bin/gunicorn --workers 3 --bind 0.0.0.0:5000 app1:app
11
12[Install]
13WantedBy=multi-user.target
14
diff --git a/keys/ca.key b/keys/ca.key
new file mode 100644
index 0000000..7c3e69b
--- /dev/null
+++ b/keys/ca.key
@@ -0,0 +1,28 @@
1-----BEGIN PRIVATE KEY-----
2MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDj9RaVE/qG2WMx
36FGzLkdiUtVxHY7Fv2kBQ7CYLdW3DQZDMQlV+a51yBcQ+p/mnrruj6PBKjsNdBla
4gTIyeuDysN2Ikw32ifL6c/sfwsZDDyik8tfHMBSWmFJ9K2Ra0nHsfLl58282C1wd
5ti03qb4Hrg8oj9NHd9eJIZSD8sZZCFwbZ3zwh7ZhIGQSwk6LDOCrK7VMeV3bmoYO
6swBWc3hG/sV/jSsUBSYRw+slyluPLappfNvWk9FrvEsNTBWEJz6pSkaBJXQB8now
78nbFrjTXfTOznxZpUXq5/FvxC1P0cmGsBQxeOJUlQu/asZ7Oyn5xWA6qLdfOtDfm
8kGCby3a9AgMBAAECggEAPkL2xAkM6D//4+W8SuBdBvHw8lBMap55I6tFVItQUAry
9pu+ByUXE7M6V3kFV4zt/eyEobN4H+wi21A1tlHQTdLXyDBd+PNQ41UdQU8BzPmWp
10iEP7w5/SP7+i6CUt59CK5Ti7wB9JRM2df0/+0bE/AgH8ieuenWqSKBZP5iotGqu1
111rcidAZ2a5fFzaYF2ezK24m0jPKDTiQeAEu258yT4xofwlro2p9EJUFIyMdbbOLZ
12uF8lQx3b7zT1stmV0e/h6qpxTF2O0D5qjFHDPyt/t//UmYPUZd9A5+pKIyOj7sQ4
13m6je2RrGKaT3i2+2budpcWdAs57dlKnuElmPTRMS0QKBgQD5AbiKF5u38NVFf2Jd
14PsPPSjUOs6VkWCAtUo+TUeOp6KWWS0SGLPQNcjATBfMF140OEZVQXvTZ8fcG+bq4
15tu0hBgihtSth5HCp31OjVDub+R4Rng+eMAo/uInUdClTa323DoftFZdo6HD1rSJa
16/RdJ8BFGsJE+q2lFAcBxnSEwtwKBgQDqXAd85i5C8WCqmO0iyFQ2RbmcJb3VAaCA
17X42rjTxnOryu4ft7zmiygH5rdZeL43jt38INELf6x0XaiGTnP6xcEizSLcJrnjRf
18hnmXMO+5XoVlVw5TpPI9IlpNLHti9Ati79hjY35YKpVvgM5WURKtmZRSxk2xZnXf
19Ne/GKzH4KwKBgQCb9Rb27rhqKZ36TEF4c3JCp5C5p4zEX2mv2VDxjU2RQpRLoNLH
20Uup8bXNsxsIie5HuKNcjIoYq5yC4LrtjK7czgsrvNUB5rJFf4+9Hkd9P3mSV1jCj
21/CS/Kj6xYRvtEpsHh0NdG7PcUhFF3m1xHalzdrfrVXVzEfr57JHy1t5N2wKBgGkT
22qifN7KAHKZhTyL73owpSaM4h/eMrP5NPRG3OfW6rXz3qBJ+WBEtEYWo85x3Jd8bv
23tEm3XUYLYr6AuP0WB2mgnIgADFPEMydBW/L19gXe42B0j+/g3NucM3C2qPvM/+30
24K8kkKtnM/gNodRsubnl3ipEyaFNJ5T+XJ1Jqu5TRAoGAP5Qlo5mS15z4ZauIfBnS
25DAjFIGGsE8SG5mRpRumDuQUqKHjhjJeSLMMk50s7e0csSZZkcKucjJC+Kzz3NnTi
26vbVI9wK+RKAOVaxZC/TVy/e581CE0ucIY3hmLnHNSVWC2Dd2uQ724kzSh6/BaKd7
27/3duDwAZloiYguwb4WOFWug=
28-----END PRIVATE KEY-----
diff --git a/keys/ca.pem b/keys/ca.pem
new file mode 100644
index 0000000..e1512e4
--- /dev/null
+++ b/keys/ca.pem
@@ -0,0 +1,22 @@
1-----BEGIN CERTIFICATE-----
2MIIDjzCCAnegAwIBAgIUZYpUQVHNHS4qmeYqjIndm0qfL6QwDQYJKoZIhvcNAQEL
3BQAwVzELMAkGA1UEBhMCVVMxEjAQBgNVBAgMCVlvdXJTdGF0ZTERMA8GA1UEBwwI
4WW91ckNpdHkxEDAOBgNVBAoMB1lvdXJPcmcxDzANBgNVBAMMBllvdXJDQTAeFw0y
5NDExMTIwNzQ5MDVaFw0yNzA5MDIwNzQ5MDVaMFcxCzAJBgNVBAYTAlVTMRIwEAYD
6VQQIDAlZb3VyU3RhdGUxETAPBgNVBAcMCFlvdXJDaXR5MRAwDgYDVQQKDAdZb3Vy
7T3JnMQ8wDQYDVQQDDAZZb3VyQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
8AoIBAQDj9RaVE/qG2WMx6FGzLkdiUtVxHY7Fv2kBQ7CYLdW3DQZDMQlV+a51yBcQ
9+p/mnrruj6PBKjsNdBlagTIyeuDysN2Ikw32ifL6c/sfwsZDDyik8tfHMBSWmFJ9
10K2Ra0nHsfLl58282C1wdti03qb4Hrg8oj9NHd9eJIZSD8sZZCFwbZ3zwh7ZhIGQS
11wk6LDOCrK7VMeV3bmoYOswBWc3hG/sV/jSsUBSYRw+slyluPLappfNvWk9FrvEsN
12TBWEJz6pSkaBJXQB8now8nbFrjTXfTOznxZpUXq5/FvxC1P0cmGsBQxeOJUlQu/a
13sZ7Oyn5xWA6qLdfOtDfmkGCby3a9AgMBAAGjUzBRMB0GA1UdDgQWBBTbW+YSpuO7
14G1gTQqIyqUhPvKl7CDAfBgNVHSMEGDAWgBTbW+YSpuO7G1gTQqIyqUhPvKl7CDAP
15BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCfInNclCK6wBmAK4yz
16X6rWzcTPu1diEpdK73BLKyeHBHKyiNwQMOrzB7c7XO/h8lwcxFYNl7YpFPbbCr//
17sLH0PmwM40At++zVtMl1VTCTeEHeEP+DTXWn8fZZ7ayg2+mSC5wr35V86rTODys3
186GqWPOKacGIPlUJoByjIH/Z/Z8tezhtlOlLSp69ge2BMKAcGFl/OCT7WE4XUf3Nq
19o1mwjxlss9TQgeN+oDEM7RTyJebYxiCW6Q9LcAefMSOjfoHyeKKHaMK51aA4ezKW
20bM7AbUv4sNd3o8Wk0kEDjVNfqQeDqiKHir468UVqZuckXToeDgqMQiJ+bAtb+kwQ
21vA0T
22-----END CERTIFICATE-----
diff --git a/keys/ca.srl b/keys/ca.srl
new file mode 100644
index 0000000..9c39350
--- /dev/null
+++ b/keys/ca.srl
@@ -0,0 +1 @@
5D7525ED04BB4002114F8199CB0C6C6C2DAFC0B9
diff --git a/keys/client.crt b/keys/client.crt
new file mode 100644
index 0000000..1998c53
--- /dev/null
+++ b/keys/client.crt
@@ -0,0 +1,21 @@
1-----BEGIN CERTIFICATE-----
2MIIDfjCCAmagAwIBAgIUXXUl7QS7QAIRT4GZywxsbC2vwLkwDQYJKoZIhvcNAQEL
3BQAwVzELMAkGA1UEBhMCVVMxEjAQBgNVBAgMCVlvdXJTdGF0ZTERMA8GA1UEBwwI
4WW91ckNpdHkxEDAOBgNVBAoMB1lvdXJPcmcxDzANBgNVBAMMBllvdXJDQTAeFw0y
5NDExMTIwNzQ5MDZaFw0yNTExMTIwNzQ5MDZaMFcxCzAJBgNVBAYTAlVTMRIwEAYD
6VQQIDAlZb3VyU3RhdGUxETAPBgNVBAcMCFlvdXJDaXR5MRAwDgYDVQQKDAdZb3Vy
7T3JnMQ8wDQYDVQQDDAZjbGllbnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
8AoIBAQC8QJ6jSkHaHA13txsZokZxd/h0ITuOWeTCwTsETUT6f4qPdEYovWrSpUzH
9Zf8O1DvPkJNpRClKn577kKqD3MPlTo6lbFYdiEU/fB1OOVOTQDrp+RHkJxWGUjIf
10iR6p5XgB7dGe+F40vXvcYacxE1VqkxkCkE8KwPRMG4HDXyG7l0DMWg3UmqyH+Xrt
11wQkO4/CKQB8wjoIGUvbKmmCy7oybogyj79wRXJ/87WWJlIUx04J9r7Sv10ld7O1o
124e+T7FuTs0e4MIdcbAC/WyIUONnBatVrTdVLxcWF4o49kkJsAyAt+Znz5n7w7O1H
13qPmXi8mFQgOLVjd00e/EmJfCw2HHAgMBAAGjQjBAMB0GA1UdDgQWBBRuzoPzreMR
14pQZcPLcVNbFT0q+tVDAfBgNVHSMEGDAWgBTbW+YSpuO7G1gTQqIyqUhPvKl7CDAN
15BgkqhkiG9w0BAQsFAAOCAQEAhJN1+zYuceZxbPUeN3b8NtYALarLY+hXDVRANo33
16ZpjOocaR/P9EyCpYCgtMM6pmB1iSkMCgyD4tnZ1i1hrYYkwcx89X3IuEum9U3BJF
17P74eW+UO6PtHfxeAPCpzPrWyPkvv1A7yL4mwP2LjYq7MyvMrTcQpFRQNfUY+nKsa
18I4i68gERLRj5aYNg/QgkXD28rMnTXj9p33St1F5b9wiU9XW18hz4lR4s78FTkNMS
19+oEHdmSzjyrIAXRcJkGicdi8n0ckYwe7VuTpDVg6qQUomMZMA0ktV4DsCMd42UU9
20NW2dNm27ny+U3DI6U4TPWOv4+/a37le9eIpwvOx0q+xjvQ==
21-----END CERTIFICATE-----
diff --git a/keys/client.csr b/keys/client.csr
new file mode 100644
index 0000000..51939ec
--- /dev/null
+++ b/keys/client.csr
@@ -0,0 +1,16 @@
1-----BEGIN CERTIFICATE REQUEST-----
2MIICnDCCAYQCAQAwVzELMAkGA1UEBhMCVVMxEjAQBgNVBAgMCVlvdXJTdGF0ZTER
3MA8GA1UEBwwIWW91ckNpdHkxEDAOBgNVBAoMB1lvdXJPcmcxDzANBgNVBAMMBmNs
4aWVudDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALxAnqNKQdocDXe3
5GxmiRnF3+HQhO45Z5MLBOwRNRPp/io90Rii9atKlTMdl/w7UO8+Qk2lEKUqfnvuQ
6qoPcw+VOjqVsVh2IRT98HU45U5NAOun5EeQnFYZSMh+JHqnleAHt0Z74XjS9e9xh
7pzETVWqTGQKQTwrA9EwbgcNfIbuXQMxaDdSarIf5eu3BCQ7j8IpAHzCOggZS9sqa
8YLLujJuiDKPv3BFcn/ztZYmUhTHTgn2vtK/XSV3s7Wjh75PsW5OzR7gwh1xsAL9b
9IhQ42cFq1WtN1UvFxYXijj2SQmwDIC35mfPmfvDs7Ueo+ZeLyYVCA4tWN3TR78SY
10l8LDYccCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQAM146JcUP3Yz3mApBFPKE2
1194EjzIA0GU9kU4+75D7oR1rpOQ4OVZW2myNKhetPEtwwMaB9grxwxlODR3rTw0jq
12iLzIhJw5eOx8Hjdnv7BnpU4HAU2Z+OKN6IlbetbBfga0WNvfNn9efZWrSiavTE5C
13tN/oUrqoJFWp2m/5XuwmxSFSoFF47yREP3wNN9+7ciGne77SHxDG1347lXTCsMYU
144COcvpjHLDJkOq6DXdlXKpdCD/X16eE/n6UNTIkp3ops2Yj6KYrohsWMNQvzwKlB
15TGMib7DwXADNC9aVHaGc3sW7Ngt5W6MibNaWGnLdtZu/o+xhuyBEjZoofDrV3o/X
16-----END CERTIFICATE REQUEST-----
diff --git a/keys/client.key b/keys/client.key
new file mode 100644
index 0000000..6743847
--- /dev/null
+++ b/keys/client.key
@@ -0,0 +1,28 @@
1-----BEGIN PRIVATE KEY-----
2MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC8QJ6jSkHaHA13
3txsZokZxd/h0ITuOWeTCwTsETUT6f4qPdEYovWrSpUzHZf8O1DvPkJNpRClKn577
4kKqD3MPlTo6lbFYdiEU/fB1OOVOTQDrp+RHkJxWGUjIfiR6p5XgB7dGe+F40vXvc
5YacxE1VqkxkCkE8KwPRMG4HDXyG7l0DMWg3UmqyH+XrtwQkO4/CKQB8wjoIGUvbK
6mmCy7oybogyj79wRXJ/87WWJlIUx04J9r7Sv10ld7O1o4e+T7FuTs0e4MIdcbAC/
7WyIUONnBatVrTdVLxcWF4o49kkJsAyAt+Znz5n7w7O1HqPmXi8mFQgOLVjd00e/E
8mJfCw2HHAgMBAAECggEAQ+o+MSPbkQ/4zd1J0hwotMv23xKUNV15+ccTfxBPV94G
9g42LuCvp63fGNNO3ykZIE7CRdfMowGrIxPIiijLtm38VWFm20a21adthiTSGUcPk
103T9FtJ1jFxP1UEo8PUfzXSLKssLg3b8UfePfGQXkFXBfH/0m/vawy/pKfM0H0vB2
11e1nyc265mswgvMIWP7e/jkQIzJiG8loE5T8T7oG/DyXyVClXCLG00VtUUIXAoeYP
12yiTOegnE6MF8G6+lwjCvVpNHdzLF/az3QzgKgoaPJLN11trbjldbhMeCIMmTwIAQ
13NsQio6u5bdE8bqLf3zrhPKqE5n//6+MFgw6w1yu0HQKBgQDfsjjb7opq5JuSKzCp
14CXi1Yzr2WQbbyuUJ2YND+KU/QNTB2aanxKtQ4BDiPLx4VFGCFc3qBYuRDgEv5Hrb
15UQk+E1qE9RpnC/A73BehzAvZozrgjdleyE7WVv/t8alrnlyECxv+RdeY5y99hyED
16L+oxK7s60CxR7Bqwy42MKYtvdQKBgQDXcBWk5LlyTrnKf5ZCfycJWIRgZXr0IcTC
17afPZvK1irNjk4W2LcF3bH1mg0q0xfjlFby2+ygSHnB149KNDr/8aoRZ61G3zkf7o
18MxuYCAWoKzII8lgutteOFgfK5OT7603OS+MkWiWEIqWY2so14qPFlMLPoMXQP5fI
19SUy/aCoAywKBgQDVnCS7sAAxrvf4DpI6+LZxz74gPEdWX1tzmmfE4o0557jDHAoO
20rrlBU5YL1B/NcAcdh6DIVl8+NvdfOnkvMST4SBbqW/vIZxgSsUtHz8eJHlw8znfC
21ENlnyFBAccJs6B5EYS9sElmcwzcQUZduqbSjG7WApgWMfT/Hj7ktHQbveQKBgCgW
22mEB1uzhVA+d1dF1tUbNAgGl7mLSC8B0JIDIdFNputXFprTusLhrPK5tseIPkK/4K
23oSWGa+9cEnPmedbnkf2/ifJTQx52xUsp73GL1JmlaAsYJWaT6WpsGQkdLKrf7zt7
24DYo/KAn9dHkMBWKfiMAEXXfLP+PvYWwIj7pyRJafAoGAVK38BToOMnGJKiToLsnQ
25xV6RMnF/lkoCWt+CBhQ6j4S4SZV/qBuJ75bWcXlJkj2JePsAHDkzTl40hR66dB03
26ShVyMafj+4CJlLv52snhoonWnZB62PyHAdFjahYpEPXxEqMhk8+cYhEo7wjbYzv+
27hwq9+NrsKo0Le+TSKfx0qpw=
28-----END PRIVATE KEY-----
diff --git a/keys/server.crt b/keys/server.crt
new file mode 100644
index 0000000..e52661c
--- /dev/null
+++ b/keys/server.crt
@@ -0,0 +1,21 @@
1-----BEGIN CERTIFICATE-----
2MIIDgTCCAmmgAwIBAgIUXXUl7QS7QAIRT4GZywxsbC2vwLgwDQYJKoZIhvcNAQEL
3BQAwVzELMAkGA1UEBhMCVVMxEjAQBgNVBAgMCVlvdXJTdGF0ZTERMA8GA1UEBwwI
4WW91ckNpdHkxEDAOBgNVBAoMB1lvdXJPcmcxDzANBgNVBAMMBllvdXJDQTAeFw0y
5NDExMTIwNzQ5MDZaFw0yNTExMTIwNzQ5MDZaMFoxCzAJBgNVBAYTAlVTMRIwEAYD
6VQQIDAlZb3VyU3RhdGUxETAPBgNVBAcMCFlvdXJDaXR5MRAwDgYDVQQKDAdZb3Vy
7T3JnMRIwEAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
8ggEKAoIBAQDHEVL5OtqgU5zy1cS8Ppbmb5x18flXIDHkViDUmcvckhtedr+NoZ7X
9G04PzU8s0oA9nz/DsPGRDE1QkLIKt3UX2h4UjfSeoZHkTf+nNwLgmMLr6eJ2iq/M
10+4l9A3gq8nMXVAgFeHwAiT7KK/S/NMl7mQE9K2i6xhyVhtKkNiHUM99RwIYorMlj
11/oQ/XAgJRUheqidOMxpGi2REAfLUkVjU1HhD3+1FOfo+VGc4Tk7W93QOysrgcDcc
12xuJSSLevlwn9N1SdDGYzHNPyAwRJwp2VtmBt7ef9TCJirp1I/r3bn9rG5KiIkH7c
13IezNVD7S89E8+/DAUFG8qynWcjCh9Hv3AgMBAAGjQjBAMB0GA1UdDgQWBBRB5rzo
14M3A4qowzysRedTT/FPaaXzAfBgNVHSMEGDAWgBTbW+YSpuO7G1gTQqIyqUhPvKl7
15CDANBgkqhkiG9w0BAQsFAAOCAQEAotcKajxy8Q4v5KZLx0Nk1kq+s885ZLwEWXIU
16P4YDbddTCWKkhrJPpZmgUVbX3ghaihbkoUBIGyRmlSS8TAhbLmkZnEeGYp9xYCKY
17BfBuYvaBqoy2/XoaW6dD5sQhOEG0tKySWiZwwy8QUGaaeGS+XKmN7OVQRpynI3d/
18AvnYxP7jZobzKWzMBYPMXmAuGj5U+RxyZYA+92oNTIJ849E8GXzY9pN2jiBN723E
19Ng3L+93DhhGG0J4HtIwM9K7J39CErq9kOmdPvWc0FTV2nhIMVX6tLxxBrMpDrfTP
20cjVGe3F3j9/7gWzTeTbWmX9ctl72VHNK5KQgNw9KJ6y25IzuEA==
21-----END CERTIFICATE-----
diff --git a/keys/server.csr b/keys/server.csr
new file mode 100644
index 0000000..f360791
--- /dev/null
+++ b/keys/server.csr
@@ -0,0 +1,17 @@
1-----BEGIN CERTIFICATE REQUEST-----
2MIICnzCCAYcCAQAwWjELMAkGA1UEBhMCVVMxEjAQBgNVBAgMCVlvdXJTdGF0ZTER
3MA8GA1UEBwwIWW91ckNpdHkxEDAOBgNVBAoMB1lvdXJPcmcxEjAQBgNVBAMMCWxv
4Y2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMcRUvk62qBT
5nPLVxLw+luZvnHXx+VcgMeRWINSZy9ySG152v42hntcbTg/NTyzSgD2fP8Ow8ZEM
6TVCQsgq3dRfaHhSN9J6hkeRN/6c3AuCYwuvp4naKr8z7iX0DeCrycxdUCAV4fACJ
7Psor9L80yXuZAT0raLrGHJWG0qQ2IdQz31HAhiisyWP+hD9cCAlFSF6qJ04zGkaL
8ZEQB8tSRWNTUeEPf7UU5+j5UZzhOTtb3dA7KyuBwNxzG4lJIt6+XCf03VJ0MZjMc
90/IDBEnCnZW2YG3t5/1MImKunUj+vduf2sbkqIiQftwh7M1UPtLz0Tz78MBQUbyr
10KdZyMKH0e/cCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQCHq5i2D3EvMXH1dEei
11Lin++lTSj9GKY3cD6ig42C4pHepkHM3dGDmGP0MI7eh3BDTXYt2xvyVW25Q/nj4V
12HQoXcY8WlTvdXYc8ZzmyJIMSOWQCIGP9lPIairEJiigi3Wbg5MZr1k/wDV0bDgTY
13iaA+OYedAkVUzNYdcUVSG70frMj542C6dXR/oe8OOb7FjD2hkrb+L1yY2hkoMGc/
14MdCy5vX7RA4xlzku1PM10iQTyBpVwAhcuoe2BF5xSTEBkawVLNiYX1ypfGaQVFjo
15QCducJcNNIfZXKHTQVsDhO34hVQSpD4EM3eDx9NIeH4qjXBr9o55/LopfXKi9zmN
16R9fb
17-----END CERTIFICATE REQUEST-----
diff --git a/keys/server.key b/keys/server.key
new file mode 100644
index 0000000..c4a0abf
--- /dev/null
+++ b/keys/server.key
@@ -0,0 +1,28 @@
1-----BEGIN PRIVATE KEY-----
2MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDHEVL5OtqgU5zy
31cS8Ppbmb5x18flXIDHkViDUmcvckhtedr+NoZ7XG04PzU8s0oA9nz/DsPGRDE1Q
4kLIKt3UX2h4UjfSeoZHkTf+nNwLgmMLr6eJ2iq/M+4l9A3gq8nMXVAgFeHwAiT7K
5K/S/NMl7mQE9K2i6xhyVhtKkNiHUM99RwIYorMlj/oQ/XAgJRUheqidOMxpGi2RE
6AfLUkVjU1HhD3+1FOfo+VGc4Tk7W93QOysrgcDccxuJSSLevlwn9N1SdDGYzHNPy
7AwRJwp2VtmBt7ef9TCJirp1I/r3bn9rG5KiIkH7cIezNVD7S89E8+/DAUFG8qynW
8cjCh9Hv3AgMBAAECggEAHKjAAdVOdr44PnZhNwVpyIOGtSz2Npa80sCa7xC0mqzx
9l3AlfsNRxhU5GqmhEvURSmMxamqAigneiFFJ7foLN7kKve8mqb8ywk7VFg1OSD3Q
10njyTV86lUFphqRJaoWWQr+nvUl5ODUO1EE/eEg22+NOGgU3NFkqsVdNNuHTPT6iQ
110dULUDVRzlOG/eqvb73K5gZ9Mf3Q6+GB4QHDzMt+LPpxcBCw6tmas5DlstsUwC0s
12kOfWTRyezYPAmJb0jhAkzxmaeMlFPfzOygxA+F2GRv2aZlwLBAyQH3iFktqUYYnI
13EUqeK5VXxwq1hzBpSOJC2A/QbpRbhF/C/zL6UuOZhQKBgQD50xaVU4+RAqlEireI
141Jq1Nmd2bH2K/XYN2tvSSRuz2CgF1nhJoKVPuzkSy669WV/B84aARnu1SbNr99Tb
15MT/DSlHP5RrdL3Zi4mlUSzpfX8269U42RcynzsOv/mV4+qCMa1tp0NOuErmcVU1Y
16JsXxinRsBoI7BvrEXcf004dAlQKBgQDL/Qq1otDcHwDEgLljbtwAgscXe+BAJxHz
171n05KVFXibgI7BnrJkqwFCeU/QUEvPQe40JAOFWZRJQ3fdT/Eszc7fiSk8PFWZrM
18fhG9Sl4m7QneXVbNL5yPa1B/EaARhLFImn38bEbwAX/1XE29hKC0wqs/ZolWNi+J
191aPLJYmrWwKBgDNY3YVnnVRytZOu5zYqbHnearl+ZvdQTRlf6Fp6SEVYojFA+Yw4
20hoGyu3JPhuTIH9RfVz+6PObv9P61+3vpzW84MUSHlFPt02lTm86Ff8PmjwRkMuUY
21x42eA76CjRymdqUl064WC8v1cUzeg30gywJwMKmbVN0I/DWsCNMbPutZAoGBALdy
2214DF7cMn9o7BnPe5KQ0kj1ulQeUvvctmJ7OSXt60sdcETcLV6vEzDu3EJhE+xORK
23SLhscT6nGAxXk4fZJnfBY3yeer8ueDJTZiyvhsDHB8r8ciWRHeE1B21fMm7OwIik
24t4yc66bIEoVb/2XisowdTdh0pCnuDQ6OHQGCvq5lAoGBAJxi8gJ8roDgj3wQVN5R
25gwTCXae+aYAsVl7+FX4YTjIzryNDvCdNH/9+0fO6pFWQRcKbcT+zspb5DVkH++vT
26rNEGwzoJ+Z0Q/6CtqQbYOAG2eWYqhJ1WBV2n/yjLSk62n8iEZ3kIM7QETpd4Ti5f
271uHlMIURqgpCfg1/PUmSbaQO
28-----END PRIVATE KEY-----
diff --git a/nginx.conf b/nginx.conf
deleted file mode 100644
index fc11627..0000000
--- a/nginx.conf
+++ /dev/null
@@ -1,63 +0,0 @@
1
2user nginx;
3worker_processes auto;
4
5error_log /var/log/nginx/error.log notice;
6pid /var/run/nginx.pid;
7
8
9events {
10 worker_connections 1024;
11}
12
13
14http {
15 include /etc/nginx/mime.types;
16 default_type application/octet-stream;
17
18
19 log_format main '$remote_addr - $remote_user [$time_local] "$request" '
20 '$status $body_bytes_sent "$http_referer" '
21 '"$http_user_agent" "$http_x_forwarded_for" '
22 'ssl_protocol:$ssl_protocol ssl_cipher:$ssl_cipher '
23 'ssl_client_verify:$ssl_client_verify '
24 'ssl_client_s_dn:$ssl_client_s_dn';
25 access_log /var/log/nginx/access.log main;
26
27 sendfile on;
28 #tcp_nopush on;
29
30 keepalive_timeout 65;
31
32 #gzip on;
33
34# include /etc/nginx/conf.d/*.conf;
35
36 server {
37 location / {
38 return 301 https://$host$request_uri;
39 #root /data/www;
40 #autoindex on;
41 #autoindex_exact_size off;
42 }
43 }
44 server {
45 listen 443 ssl;
46 server_name localhost;
47
48 ssl_certificate /home/x/auths1/server.crt;
49 ssl_certificate_key /home/x/auths1/server.key;
50 ssl_client_certificate /home/x/auths1/ca.pem;
51 ssl_verify_client on;
52
53 location / {
54 proxy_pass http://localhost:5000;
55 proxy_set_header Host $host;
56 proxy_set_header X-Real-IP $remote_addr;
57 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
58 proxy_set_header X-Forwarded-Proto $scheme;
59
60 }
61 }
62
63}
diff --git a/tfa.py b/tfa.py
new file mode 100644
index 0000000..2cd37f4
--- /dev/null
+++ b/tfa.py
@@ -0,0 +1,71 @@
1import time
2from typing import Dict, List
3import random
4import string
5
6class customstore:
7 def __init__(self, ttl=300, maxsize=200):
8 self.store: Dict[str, List] = {} # key -> [expiry_time, verified_status]
9 self.ttl = ttl
10 #self.maxsize = maxsize, now dont need this
11
12 def create(self):
13 self.clean()
14 keylength = 4
15 key_added = False
16 while not key_added:
17 current_time = int(time.time())
18 key = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(keylength))
19 if key not in self.store:
20 self.store[key] = [current_time + self.ttl, False]
21 key_added = True
22 return key
23
24 def authenticate(self, key):
25 current_time = int(time.time())
26 if key in self.store and current_time <= self.store[key][0]:
27 self.store[key][1] = True
28 return True
29 else:
30 return False
31
32 def check(self, key):
33 current_time = int(time.time())
34 if key in self.store and current_time <= self.store[key][0] and self.store[key][1] == True:
35 return True
36 else:
37 return False
38
39 def clean(self):
40 current_time = int(time.time())
41 expired_keys = [k for k, [expiry_time, _] in self.store.items() if current_time > expiry_time]
42 for key in expired_keys:
43 self.store.pop(key, None)
44 return
45
46if __name__ == "__main__":
47 s1 = customstore(ttl=7)
48
49 # Create and verify first key
50 k = s1.create()
51 print("Store state:", s1.store)
52 print("Created key:", k)
53 print("First verification:", "yeppy" if s1.authenticate(k) else "nopey")
54 print("Second verification:", "yeppy" if s1.check(k) else "nopey")
55 # Wait and try again
56 time.sleep(5)
57 k2 = s1.create()
58 print("\nStore state after 5 seconds:", s1.store)
59 print("First key:", k)
60 print("First key verification:", "yeppy" if s1.check(k) else "nopey")
61
62 # Wait and try again
63 time.sleep(5)
64 print("\nStore state after 5 seconds:", s1.store)
65 print("First key:", k)
66 print("First key verification:", "yeppy" if s1.check(k) else "nopey")
67 k = s1.create()
68 print("Store state:", s1.store)
69 print("Created key:", k)
70 print("First verification:", "yeppy" if s1.authenticate(k) else "nopey")
71 print("Second verification:", "yeppy" if s1.check(k) else "nopey")
diff --git a/untested-docs/gunicorn1.service b/untested-docs/gunicorn1.service
new file mode 100644
index 0000000..f0b1b60
--- /dev/null
+++ b/untested-docs/gunicorn1.service
@@ -0,0 +1,71 @@
1<!DOCTYPE html>
2<html lang='en'>
3<head>
4<title>gunicorn1.service - authserver - 2fa server using pkcs11 on nitrokey hsm2 and yubikey
5</title>
6<meta name='generator' content='cgit v1.2.3'/>
7<meta name='robots' content='index, nofollow'/>
8<link rel='stylesheet' type='text/css' href='/assets/cgit.css'/>
9<link rel='shortcut icon' href='/favicon.ico'/>
10<link rel='alternate' title='Atom feed' href='https://git.0nom.ch/authserver/atom/gunicorn1.service?h=main' type='application/atom+xml'/>
11<link rel='vcs-git' href='https://git.0nom.ch/authserver' title='authserver Git repository'/>
12</head>
13<body>
14<div id='cgit'><table id='header'>
15<tr>
16<td class='logo' rowspan='2'><a href='/'><img src='/assets/cgit.png' alt='cgit logo'/></a></td>
17<td class='main'><a href='/'>index</a> : <a title='authserver' href='/authserver/'>authserver</a></td><td class='form'><form method='get'>
18<select name='h' onchange='this.form.submit();'>
19<option value='main' selected='selected'>main</option>
20</select> <input type='submit' value='switch'/></form></td></tr>
21<tr><td class='sub'>2fa server using pkcs11 on nitrokey hsm2 and yubikey
22</td><td class='sub right'>root</td></tr></table>
23<table class='tabs'><tr><td>
24<a href='/authserver/'>summary</a><a href='/authserver/refs/'>refs</a><a href='/authserver/log/gunicorn1.service'>log</a><a class='active' href='/authserver/tree/gunicorn1.service'>tree</a><a href='/authserver/commit/gunicorn1.service'>commit</a><a href='/authserver/diff/gunicorn1.service'>diff</a></td><td class='form'><form class='right' method='get' action='/authserver/log/gunicorn1.service'>
25<select name='qt'>
26<option value='grep'>log msg</option>
27<option value='author'>author</option>
28<option value='committer'>committer</option>
29<option value='range'>range</option>
30</select>
31<input class='txt' type='search' size='10' name='q' value=''/>
32<input type='submit' value='search'/>
33</form>
34</td></tr></table>
35<div class='path'>path: <a href='/authserver/tree/'>root</a>/<a href='/authserver/tree/gunicorn1.service'>gunicorn1.service</a></div><div class='content'>blob: 425c45395070686ed7654b9ccb9b677e5c1eb60d (<a href='/authserver/plain/gunicorn1.service'>plain</a>)
36<table summary='blob content' class='blob'>
37<tr><td class='linenumbers'><pre><a id='n1' href='#n1'>1</a>
38<a id='n2' href='#n2'>2</a>
39<a id='n3' href='#n3'>3</a>
40<a id='n4' href='#n4'>4</a>
41<a id='n5' href='#n5'>5</a>
42<a id='n6' href='#n6'>6</a>
43<a id='n7' href='#n7'>7</a>
44<a id='n8' href='#n8'>8</a>
45<a id='n9' href='#n9'>9</a>
46<a id='n10' href='#n10'>10</a>
47<a id='n11' href='#n11'>11</a>
48<a id='n12' href='#n12'>12</a>
49<a id='n13' href='#n13'>13</a>
50<a id='n14' href='#n14'>14</a>
51</pre></td>
52<td class='lines'><pre><code>
53[Unit]
54Description=gunicorn1
55After=network.target
56
57[Service]
58User=www-data
59Group=www-data
60WorkingDirectory=/var/www
61ExecStart=/usr/local/bin/gunicorn --workers 3 --bind 0.0.0.0:5000 app1:app
62
63[Install]
64WantedBy=multi-user.target
65
66</code></pre></td></tr></table>
67</div> <!-- class=content -->
68<div class='footer'>generated by <a href='https://git.zx2c4.com/cgit/about/'>cgit v1.2.3</a> (<a href='https://git-scm.com/'>git 2.25.1</a>) at 2024-11-12 08:12:47 +0000</div>
69</div> <!-- id=cgit -->
70</body>
71</html>