diff --git a/pom.xml b/pom.xml
index e82b964900..5a327770a4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -98,6 +98,7 @@
spring-security-rest-custom
spring-security-rest-digest-auth
spring-security-rest-full
+ spring-security-x509
spring-thymeleaf
spring-zuul
jsf
diff --git a/spring-security-x509/basic-secured-server/pom.xml b/spring-security-x509/basic-secured-server/pom.xml
index ce35990b21..87fdd64727 100644
--- a/spring-security-x509/basic-secured-server/pom.xml
+++ b/spring-security-x509/basic-secured-server/pom.xml
@@ -3,7 +3,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- com.baeldung.spring.security
basic-secured-server
0.0.1-SNAPSHOT
jar
@@ -12,39 +11,11 @@
Spring x.509 Authentication Demo
- org.springframework.boot
- spring-boot-starter-parent
- 1.4.0.RELEASE
-
+ com.baeldung
+ spring-security-x509
+ 0.0.1-SNAPSHOT
-
- UTF-8
- UTF-8
- 1.8
-
-
-
-
- org.springframework.boot
- spring-boot-starter-security
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
- org.springframework.boot
- spring-boot-starter-thymeleaf
-
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
-
diff --git a/spring-security-x509/basic-secured-server/src/main/resources/application.properties b/spring-security-x509/basic-secured-server/src/main/resources/application.properties
index 1eed9cbbb0..439e2071b9 100644
--- a/spring-security-x509/basic-secured-server/src/main/resources/application.properties
+++ b/spring-security-x509/basic-secured-server/src/main/resources/application.properties
@@ -1,7 +1,7 @@
-server.ssl.key-store=../keystore/keystore.jks
-server.ssl.key-store-password=${PASSWORD}
-server.ssl.key-alias=${HOSTNAME}
-server.ssl.key-password=${PASSWORD}
+server.ssl.key-store=classpath:keystore.jks
+server.ssl.key-store-password=changeit
+server.ssl.key-alias=localhost
+server.ssl.key-password=changeit
server.ssl.enabled=true
server.port=8443
security.user.name=Admin
diff --git a/spring-security-x509/basic-secured-server/src/main/resources/keystore.jks b/spring-security-x509/basic-secured-server/src/main/resources/keystore.jks
new file mode 100644
index 0000000000..044a820c39
Binary files /dev/null and b/spring-security-x509/basic-secured-server/src/main/resources/keystore.jks differ
diff --git a/spring-security-x509/client-auth-server/pom.xml b/spring-security-x509/client-auth-server/pom.xml
index 5cdf1f8859..56cef8ea07 100644
--- a/spring-security-x509/client-auth-server/pom.xml
+++ b/spring-security-x509/client-auth-server/pom.xml
@@ -1,9 +1,8 @@
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- com.baeldung.spring.security
client-auth-server
0.0.1-SNAPSHOT
jar
@@ -12,39 +11,11 @@
Spring x.509 Client Authentication Demo
- org.springframework.boot
- spring-boot-starter-parent
- 1.4.0.RELEASE
-
+ com.baeldung
+ spring-security-x509
+ 0.0.1-SNAPSHOT
-
- UTF-8
- UTF-8
- 1.8
-
-
-
-
- org.springframework.boot
- spring-boot-starter-security
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
- org.springframework.boot
- spring-boot-starter-thymeleaf
-
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
-
diff --git a/spring-security-x509/client-auth-server/src/main/resources/application.properties b/spring-security-x509/client-auth-server/src/main/resources/application.properties
index 294c7d9c6b..174eba9f98 100644
--- a/spring-security-x509/client-auth-server/src/main/resources/application.properties
+++ b/spring-security-x509/client-auth-server/src/main/resources/application.properties
@@ -1,11 +1,11 @@
server.ssl.key-store=../keystore/keystore.jks
-server.ssl.key-store-password=${PASSWORD}
-server.ssl.key-alias=${HOSTNAME}
-server.ssl.key-password=${PASSWORD}
+server.ssl.key-store-password=changeit
+server.ssl.key-alias=localhost
+server.ssl.key-password=changeit
server.ssl.enabled=true
server.port=8443
security.user.name=Admin
security.user.password=admin
server.ssl.trust-store=../keystore/truststore.jks
-server.ssl.trust-store-password=${PASSWORD}
+server.ssl.trust-store-password=changeit
server.ssl.client-auth=need
\ No newline at end of file
diff --git a/spring-security-x509/client-auth-server/src/main/resources/keystore.jks b/spring-security-x509/client-auth-server/src/main/resources/keystore.jks
new file mode 100644
index 0000000000..044a820c39
Binary files /dev/null and b/spring-security-x509/client-auth-server/src/main/resources/keystore.jks differ
diff --git a/spring-security-x509/keystore/ca.crt b/spring-security-x509/keystore/ca.crt
new file mode 100644
index 0000000000..c700fee182
--- /dev/null
+++ b/spring-security-x509/keystore/ca.crt
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIFlTCCA32gAwIBAgIEAMem9DANBgkqhkiG9w0BAQ0FADB0MQswCQYDVQQGEwJDQzESMBAGA1UE
+CBMJU29tZVN0YXRlMREwDwYDVQQHEwhTb21lQ2l0eTERMA8GA1UEChMIQmFlbGR1bmcxFTATBgNV
+BAsTDGJhZWxkdW5nLmNvbTEUMBIGA1UEAxMLQmFlbGR1bmcgQ0EwHhcNMTYwODExMDUwNzE1WhcN
+MjYwODA5MDUwNzE1WjB0MQswCQYDVQQGEwJDQzESMBAGA1UECBMJU29tZVN0YXRlMREwDwYDVQQH
+EwhTb21lQ2l0eTERMA8GA1UEChMIQmFlbGR1bmcxFTATBgNVBAsTDGJhZWxkdW5nLmNvbTEUMBIG
+A1UEAxMLQmFlbGR1bmcgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCAOKgJkTPS
+5sk5dFMQmJZEipBwOD/+znOsEz8ZeieMCE8FkQWYJkYrvxl597arzJyLbvOmwVO4tkAluQuPclZz
+c5lt/Ji1iiF2h+w6ncc+gsae4l7LOR2ssn+hAvdbpzMdGdaELImG1/9ib7vJQQ1eLRydiT3qQI1r
+0n75WNGbm59QNixxq8TWp3iEPToj1dgwswuggxlDVY1hJvXytFG/DVTImlzhsfifu3C9t5C3xrXt
+MczYfciUoNPsNEe3mXqoVeV5CxbyKk5JLQBWJ17E0V1+BgAip3dWvEKF+eo0DIS6mt3s9+mRANH1
+ifOiXEIbCs3DZDouIVxBpHJj+rFpMH7jEazF8SGJ49BS1ZJyjrIn5b2ZVsFIUb3BlrcLiJd1+1LO
+yVa0nw4Fu3OugRT7m9tlWT4N3kmh93UuOkuL9pQSc8bMsSU5xiGfOy9Eav79JNHSaFHvDz4AACtP
+cgPRKw/5qDCsapNOWygNkNGXzh8DjrxhpUfvDxvoKUEVuSpNrm6/Yg1qBtu9MAD1S1pWBPjzaeGj
+f5PFZXdnbxso4pm1P21IiwZmQrOWcFnxJG35jafvTW4wTpRX28clwiJaPCxnB7j3Yz0EJTIgfcYl
+TcwdGWJ6MIqgT4d4IV4QD/P80yVa/c7DuwAj+vPv/gB5N33KKzXPjzXTsWI2yzg7OQIDAQABoy8w
+LTAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBQVrfyce3nN/IDaDIpeXBWJyY9nqzANBgkqhkiG9w0B
+AQ0FAAOCAgEAByUvnZ/ouTgObjA9Pu29zSoeZ3eWg3ha0PPBWLSFgwlj7IihUWJlPlXyDtoKw5tq
+Mcw8/bXyqhMCY8wpqXWmAsOkkZnrrLFo9K0rBRcAs17xnLtHvPW5AQ2RANf61u/19N4VK4pW1JZp
+kdWri6siN3rM9NnvcXQY3qHTM7rr25aL+mymEl20H1KK/yhRJ0xliA+U3fRDS2ktJaBc65D3FCho
+3lZa/VXs+l85bPk3eQdNh63tuLATMWOTMuhUPVZ5UARSPFA0er/mlGfyKx3OrQHciLW8sm4l9j+x
+uUR6Yg4SwVX3d9+UEPAA6N0QxYlxuIlenvNWVNcFiJpc4N+zRqZjhcBRsZfRpK1goJzerHg9W9CC
+REdQaoFX5XVDc8YoOBbNHEeAfzaBJpfHxzpWb1etIytWkFUAOXmVy0lVHdYYo42XSjkrQejF3qDM
+2R0A5oX04hYlCTFdemSzdkf8ff14oF9ToVQ7tmxS4Lm8Tok9J0rjMZ9MKyEgl5G3wDH1470xREeb
+L7mdUeGFsEzlA3kuVkZmXQ8SOL+SCv+Y+GDu0ZJ+/r5NTXgp54dVUYjLOZJisqVvfiDZHcQE+pGP
+UIuF0MGx+3l/WI/vFNrGKmsT0vhwQhqzbBpV7vawZm0ViQp+4KpiEuHrSrJX/tj/XDgUvOfHmGmj
+kj3QlKyWfEU=
+-----END CERTIFICATE-----
diff --git a/spring-security-x509/keystore/cid.crt b/spring-security-x509/keystore/cid.crt
new file mode 100644
index 0000000000..df5dd2d5a0
--- /dev/null
+++ b/spring-security-x509/keystore/cid.crt
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIFoDCCA4igAwIBAgIEGKkVGTANBgkqhkiG9w0BAQ0FADB0MQswCQYDVQQGEwJDQzESMBAGA1UE
+CBMJU29tZVN0YXRlMREwDwYDVQQHEwhTb21lQ2l0eTERMA8GA1UEChMIQmFlbGR1bmcxFTATBgNV
+BAsTDGJhZWxkdW5nLmNvbTEUMBIGA1UEAxMLQmFlbGR1bmcgQ0EwHhcNMTYwODExMDUwOTA3WhcN
+MjYwODA5MDUwOTA3WjBsMQswCQYDVQQGEwJDQzESMBAGA1UECBMJU29tZVN0YXRlMREwDwYDVQQH
+EwhTb21lQ2l0eTERMA8GA1UEChMIQmFlbGR1bmcxFTATBgNVBAsTDGJhZWxkdW5nLmNvbTEMMAoG
+A1UEAxMDY2lkMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjlSWBNnCdPjZAU15rIWi
+rId/Oop9cizRSUKc9ZLe/dRhfBBRVVD0IGhBIV+9yIIrcXicU0Ighp7yJP3gvRHma2KxwyGWYRwm
+uqLfBzrFj9HuBIXuozPIKjSDEPhWtm2DrE/WtPJ5/srZQ92BLgtHqIB75beE39ry9i9HpobL+eLm
+6MR9tGyfYpKaPeS8IfDT+3VpdBpIu+IGptPpegjGTSsVkiCyHTTXQKTM+QxdhERewzBJM69W2t/3
+A/WhqEVPC9/GhKvnPXcCw3zvvTntkQFnB/ArsJ/um6PfOkeI1WCu5QVJerQWVJXKwtGduhlxTPQ0
+UofwaZMTtGMiTi3zCciyOF0KrbFklDp+2cYDPc/AhQGy1/h8PCheP6Rh/T3acd8DRl3zpjA4zzdz
+BIwFLF2+T2NySFUBXJFOrj96wFLh3lLlp9T3oP1aiLzGUC71aZIntc9JTri3pCP35UXe0hzuy3m7
+nJw7yh59W2+6sQgy66mSeD+DjNdIFNxsmu9bQ5mH97tWU9pAb32zAfq3S2syC2FnFU9qLYj4bdTd
+sT9cUfZ/V1AdsaHsfyKerpU51d17csggtCQo4PrH8gr99CSX1Iq4oKy5gnom5v0Tcwe1K1eJW2JN
+WIYJM1wuibTELF9yPsuNydhuRZdgT+cYaGaYtY+BnqYWro9PcmR+HdMCAwEAAaNCMEAwHwYDVR0j
+BBgwFoAUFa38nHt5zfyA2gyKXlwVicmPZ6swHQYDVR0OBBYEFNUmq/xlPIaDQ42tKfmnZejN1gA0
+MA0GCSqGSIb3DQEBDQUAA4ICAQB1aAOdLB3/fgYAQfke4SUsiVkU91JRL3ec/kb92y0JNULrgEBH
+wBJ71vwmNn/bzIzk7Iwa3mcoRCXtziYA9vbfzFDoDSOUt1cPc8W8Kn0BzbeHPYNnqgyIsmilCnd4
+dvrP5QtuG/ajy03Rj57M4XL5+S4uKwqFO9B3cTE1VjNLKkDThKL4rKf3gvR7wtx24dvOrRuD1C/D
+u6QN/SfnYKXSb8fTMGwGuZLn6IYtGzrgfhQiZDZd/g7rSzne6tMHF3oMXVmeAU+etviN9A5Untat
+cs9snOT/Ju0AKnUaOKvesIjdXpeuLl21ucdlTfsKQ+TZGwAPrDzjT4RLPA7lUk2hZ66DWg6mFfTn
+JMzFdz2A5ea3mmPCErDdoxAfA9tjdaZRgQR/RUfmhU1DL2r3RNgCjQ5I9Bw2WjVWS+TepMd+u/6Q
+Dujpi+LGArABavWYluOvd7p961lLYDxSPRmI4FTBEd+T1Iqz+uOu62MWWWxPm7NbBwjW71BQehuQ
+JiWCRMYM6CyPrb8tQDljYj18t2I8H74qXWwOtGQUfmv+kqtlvDY4NesoHtavacTaDWy5a2pKF3rb
+nhKpU1BKjHyjxvVG3V/aT2qhx6iwNWbKQM9BJDYCNwubBh0ydEzlRkC82OWjavkLBYk/uLqFhQt1
+Kr0YIYpOQiIb0RGxipCUWUjYbg==
+-----END CERTIFICATE-----
diff --git a/spring-security-x509/keystore/cid.csr b/spring-security-x509/keystore/cid.csr
new file mode 100644
index 0000000000..24231f03e3
--- /dev/null
+++ b/spring-security-x509/keystore/cid.csr
@@ -0,0 +1,25 @@
+-----BEGIN NEW CERTIFICATE REQUEST-----
+MIIE7zCCAtcCAQAwbDELMAkGA1UEBhMCQ0MxEjAQBgNVBAgTCVNvbWVTdGF0ZTERMA8GA1UEBxMI
+U29tZUNpdHkxETAPBgNVBAoTCEJhZWxkdW5nMRUwEwYDVQQLEwxiYWVsZHVuZy5jb20xDDAKBgNV
+BAMTA2NpZDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAI5UlgTZwnT42QFNeayFoqyH
+fzqKfXIs0UlCnPWS3v3UYXwQUVVQ9CBoQSFfvciCK3F4nFNCIIae8iT94L0R5mtiscMhlmEcJrqi
+3wc6xY/R7gSF7qMzyCo0gxD4VrZtg6xP1rTyef7K2UPdgS4LR6iAe+W3hN/a8vYvR6aGy/ni5ujE
+fbRsn2KSmj3kvCHw0/t1aXQaSLviBqbT6XoIxk0rFZIgsh0010CkzPkMXYREXsMwSTOvVtrf9wP1
+oahFTwvfxoSr5z13AsN877057ZEBZwfwK7Cf7puj3zpHiNVgruUFSXq0FlSVysLRnboZcUz0NFKH
+8GmTE7RjIk4t8wnIsjhdCq2xZJQ6ftnGAz3PwIUBstf4fDwoXj+kYf092nHfA0Zd86YwOM83cwSM
+BSxdvk9jckhVAVyRTq4/esBS4d5S5afU96D9Woi8xlAu9WmSJ7XPSU64t6Qj9+VF3tIc7st5u5yc
+O8oefVtvurEIMuupkng/g4zXSBTcbJrvW0OZh/e7VlPaQG99swH6t0trMgthZxVPai2I+G3U3bE/
+XFH2f1dQHbGh7H8inq6VOdXde3LIILQkKOD6x/IK/fQkl9SKuKCsuYJ6Jub9E3MHtStXiVtiTViG
+CTNcLom0xCxfcj7LjcnYbkWXYE/nGGhmmLWPgZ6mFq6PT3Jkfh3TAgMBAAGgPjA8BgkqhkiG9w0B
+CQ4xLzAtMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFNUmq/xlPIaDQ42tKfmnZejN1gA0MA0GCSqG
+SIb3DQEBDQUAA4ICAQBRXQEVq/29w0iyGCmxqeGzxoBx3nprZJhgfGk1zFx8G4aEoDw6P/1Xs8fS
+6ceIPIakUHOVuS2OQqLQ6Un9UNaOoE8vAk0T19Rfkb5cQSRb2GHnnxOefETCF9oaAN8mHO1Tt3wq
+9+lzU0y428hI6APWYf2x/xJL3fo3YOFcHVD2AfY8os2kHDnyq4Aj0Rp0eHYR4OdYzPVGl6UEV0a3
+f24ypH9t2pXM/mLcaDBNeGTi5peFUGZYceGPOe6dGqWPJ4gpyRXMOWWNk6bSZgRfJzzk3IBnb53v
+2B/AFR2OhYDVzy0xG4gwzap+v/RzeKofDr4pAnGgaB3h+oGfcIwvU6Wag66qEhIzsbpCK8ZPKqDq
+G+4+JeWp8KKBgkecO5NgjZOn2Up9dAvKukBRWWIUA6nCsKN5wrTbzjeYCmE6oG19BHo9+fkskPMg
+25X7vRu+xG0MNf0kkZGR1/boY6hX4l7EVpB/LYwDulhhAF/Ar48/HH/muGRJixOjhey7/yWaGQlv
+T3XqOb06mJTMmmyKttjtBvnSY81gGhuwk76F07ihtF2VdXFUGMS5qurid16KiirhVtnDMyD1LxBc
+R4miwwXxLyDfthKUk8y0I0BYr52ciqhfkNUPLKogD9TT1Jc1DgySHmYEAwhRqCEvl4o6HX9/KNdU
+AU/i7WkKbXr4g4s8Dg==
+-----END NEW CERTIFICATE REQUEST-----
diff --git a/spring-security-x509/keystore/cid.p12 b/spring-security-x509/keystore/cid.p12
new file mode 100644
index 0000000000..1fde57bc6a
Binary files /dev/null and b/spring-security-x509/keystore/cid.p12 differ
diff --git a/spring-security-x509/keystore/create-keystore.bat b/spring-security-x509/keystore/create-keystore.bat
new file mode 100644
index 0000000000..3c0293c04c
--- /dev/null
+++ b/spring-security-x509/keystore/create-keystore.bat
@@ -0,0 +1,24 @@
+PASSWORD=changeit
+KEYSTORE=keystore.jks
+HOSTNAME=localhost
+CLIENTNAME=cid
+
+# CN = Common Name
+# OU = Organization Unit
+# O = Organization Name
+# L = Locality Name
+# ST = State Name
+# C = Country (2-letter Country Code)
+# E = Email
+DNAME_CA='CN=Baeldung CA,OU=baeldung.com,O=Baeldung,L=SomeCity,ST=SomeState,C=CC'
+# For server certificates, the Common Name (CN) must be the hostname
+DNAME_HOST='CN=$(HOSTNAME),OU=baeldung.com,O=Baeldung,L=SomeCity,ST=SomeState,C=CC'
+DNAME_CLIENT='CN=$(CLIENTNAME),OU=baeldung.com,O=Baeldung,L=SomeCity,ST=SomeState,C=CC'
+TRUSTSTORE=truststore.jks
+
+ # Generate a certificate authority (CA)
+ keytool -genkey -alias ca -ext BC=ca:true \
+ -keyalg RSA -keysize 4096 -sigalg SHA512withRSA -keypass $(PASSWORD) \
+ -validity 3650 -dname $(DNAME_CA) \
+ -keystore $(KEYSTORE) -storepass $(PASSWORD)
+
diff --git a/spring-security-x509/keystore/keystore.jks b/spring-security-x509/keystore/keystore.jks
new file mode 100644
index 0000000000..044a820c39
Binary files /dev/null and b/spring-security-x509/keystore/keystore.jks differ
diff --git a/spring-security-x509/keystore/localhost.crt b/spring-security-x509/keystore/localhost.crt
new file mode 100644
index 0000000000..318deff26d
--- /dev/null
+++ b/spring-security-x509/keystore/localhost.crt
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIFpjCCA46gAwIBAgIEODZ8OjANBgkqhkiG9w0BAQ0FADB0MQswCQYDVQQGEwJDQzESMBAGA1UE
+CBMJU29tZVN0YXRlMREwDwYDVQQHEwhTb21lQ2l0eTERMA8GA1UEChMIQmFlbGR1bmcxFTATBgNV
+BAsTDGJhZWxkdW5nLmNvbTEUMBIGA1UEAxMLQmFlbGR1bmcgQ0EwHhcNMTYwODExMDUwODEyWhcN
+MjYwODA5MDUwODEyWjByMQswCQYDVQQGEwJDQzESMBAGA1UECBMJU29tZVN0YXRlMREwDwYDVQQH
+EwhTb21lQ2l0eTERMA8GA1UEChMIQmFlbGR1bmcxFTATBgNVBAsTDGJhZWxkdW5nLmNvbTESMBAG
+A1UEAxMJbG9jYWxob3N0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAhDGBomd3CmNf
+ahbnsaYaA1IQbXsGd+heb1e8c+diWggSg7r6xH90o43or+nQPk1g9VB8C/o79Ldhe+RI68aACWqC
+iWTM72Z3mR9Cunyku8Xz9w1TUrLr394rWTXMglddBt1H9jzz5t0mXS/xv49aUhp7d/XGYEidK5Sd
+YXWylMjv3K7a9KQVgcy3WH7mWiIJoytkMVRlSy/1Y43CVrgMiBSm2Vkp5CQBOWEsh9wEPl9yiu8N
+SkqaW0cnfZFxwx6Wk+d07+Fu2dD2hpiFX0abyJj+1m1SE50ihHzvdV8jOAjrQwFsOOJOtGWZ3dZo
+YGRQqStu06ytCUjikR1xyHyBBl3lcPqd1NBABYQ8ErL5EnqmN64hw75flKPGvnRIAqtSNeqVdJxO
+yT3dZEVA2iHQq9rgPj6AnRmV+978OppVP4HAjJr/a3WqjpydpB0ztRhqf0Sv5aEkym36DKcp75Fd
+01XT3Owo6AvAlrTeuT/lj6hqDo1VkWB7Gsh1vdHtEvApXE/cKtDPbC6tPFwBLQCdP7AUZoI56+mO
+N7aHgmcWH8NZSl+PAvVMBeyn4lrNwDAH/ji/YVQCpShbiqSMa5pZbp+xlsmmZHgF6OCLSNO8Iw+d
+mMvy7Il2PEsIHwNe5jbtMc2qrM9NaPch6iMbqlz6hr1lruWCVx+ay3cuR8v4IRUCAwEAAaNCMEAw
+HwYDVR0jBBgwFoAUFa38nHt5zfyA2gyKXlwVicmPZ6swHQYDVR0OBBYEFNO0BwOkFM8qxa5sTugu
+ciCr7O58MA0GCSqGSIb3DQEBDQUAA4ICAQAjRfbR75Trkvvr9JX7KZbauNji6CkVb7H7WQAwrulG
+fMqyn5xhugq/QhAX6hN1hD1v+FM2hIX5aqI9Ic6ZUl+YyjzL4QnDXD8PZjH4z/wTZxWrnR7Z8nVJ
+yw1rDB6CSyT8Fok944UXCIDDVk7xeHbXvW2jyURZFqLI34V6jGwN2tH9hJ9CycpBaRD1JkmvWPDm
+atP9Br+GwStHpV2D7gchuzvwujwfil9ORte/+I8E6NyDteFdxbayid3IDOMbzvEw9NCqPbpOmga5
+8i2s6SYpIFYro4kWys3U900d8w6UwmZRA5cnWZR3h+BCu2lpUNPcVzYqRNrqKVd0Y9bvDTNx41SY
+cOE57g2lMGNnHEvyW3Kzt+MXfcuyzcfoIb+kLHvOp+Q39GyE2oaHIWlcwmWDsn3o4Kod9iEoC931
+QQdsCi68CEfR2HzX7hzVFTUzJqfIjLNewjlMOXaInxVTuWLe5zE+1p/6AU7Iq2lhI+bgDFymGYyb
+gtIgn+5X3djLZYyQG7M6HLMSx2ppB4i1kViQVq05+7mCBPcfHNLVafMJiMZR8L6xic77ZsAACHmQ
+zITP1VkXnD+Zd3Mb5Vw+i90ZvC0RUiUz3wWbqfb6gke1TltEq4D25ptRtyoftgghYTgdCM9cBiNQ
+4oYCEJdNyJjWiVWN92mnIXoACw3vMPPLtQ==
+-----END CERTIFICATE-----
diff --git a/spring-security-x509/keystore/localhost.csr b/spring-security-x509/keystore/localhost.csr
new file mode 100644
index 0000000000..f267e931d1
--- /dev/null
+++ b/spring-security-x509/keystore/localhost.csr
@@ -0,0 +1,25 @@
+-----BEGIN NEW CERTIFICATE REQUEST-----
+MIIE9TCCAt0CAQAwcjELMAkGA1UEBhMCQ0MxEjAQBgNVBAgTCVNvbWVTdGF0ZTERMA8GA1UEBxMI
+U29tZUNpdHkxETAPBgNVBAoTCEJhZWxkdW5nMRUwEwYDVQQLEwxiYWVsZHVuZy5jb20xEjAQBgNV
+BAMTCWxvY2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIQxgaJndwpjX2oW
+57GmGgNSEG17BnfoXm9XvHPnYloIEoO6+sR/dKON6K/p0D5NYPVQfAv6O/S3YXvkSOvGgAlqgolk
+zO9md5kfQrp8pLvF8/cNU1Ky69/eK1k1zIJXXQbdR/Y88+bdJl0v8b+PWlIae3f1xmBInSuUnWF1
+spTI79yu2vSkFYHMt1h+5loiCaMrZDFUZUsv9WONwla4DIgUptlZKeQkATlhLIfcBD5fcorvDUpK
+mltHJ32RccMelpPndO/hbtnQ9oaYhV9Gm8iY/tZtUhOdIoR873VfIzgI60MBbDjiTrRlmd3WaGBk
+UKkrbtOsrQlI4pEdcch8gQZd5XD6ndTQQAWEPBKy+RJ6pjeuIcO+X5Sjxr50SAKrUjXqlXScTsk9
+3WRFQNoh0Kva4D4+gJ0Zlfve/DqaVT+BwIya/2t1qo6cnaQdM7UYan9Er+WhJMpt+gynKe+RXdNV
+09zsKOgLwJa03rk/5Y+oag6NVZFgexrIdb3R7RLwKVxP3CrQz2wurTxcAS0AnT+wFGaCOevpjje2
+h4JnFh/DWUpfjwL1TAXsp+JazcAwB/44v2FUAqUoW4qkjGuaWW6fsZbJpmR4Bejgi0jTvCMPnZjL
+8uyJdjxLCB8DXuY27THNqqzPTWj3IeojG6pc+oa9Za7lglcfmst3LkfL+CEVAgMBAAGgPjA8Bgkq
+hkiG9w0BCQ4xLzAtMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFNO0BwOkFM8qxa5sTuguciCr7O58
+MA0GCSqGSIb3DQEBDQUAA4ICAQAWlQsaz2lN5uUU26QrlSWc9J1MjqRL4/XCT0lVkDFua7JOmTCJ
+wowwLNFng2IKrrMmigEn/W2XnOMZBtBsKFp6WB8f9irCLrqfVRELKuHV7udNi1YlfCeQns0FgjI8
+Y/6uB43+rsqbpUkO86romTZSivc9szi8TDsJ84xutNNn8rS77Fzid4NQ4pZ/G5swn+PFVKBNWANL
+J9rWkv8ld4hviRH0VS3ZuTOTL/8zfQlWFUGC7/FEH+1P1qWhHrFfj72E839226hIE/T96qnhbvBi
+5W1dIjwux4JEpKN45+97boyPZitS/0T0URuKcJp+SILZjmOOrZfSnCWC5FkZmYjKIPUFg81lzWD7
+AxFRbjFF0XI6frbXLNVDAbpnhtCi88zT9rFWKKCwRnbZ4GfjmEWW2ITa+1Og9owY4iwW27zkhpTF
+l/o5K7H4JrXCpoZcGVCu6MJFsQmSmsoTclgSljbQMVmJ53Bqq9pCtx18S8XvB+OXJpeDWlj9zvzv
+WmuqCf9JNQb1UUOxpYfuyTRFCUODUV7kVWn3NLaAlJGtLJEUvw0H16JB6/u6JpXRPas/aOZXFRr7
+pW+PausdfGcniHKC//JvV/en/1OMHtrKZl1P8Ow2Uz4vy7H/Z1qIhXqm/qg1EkEUkEKmMG44fSne
+LTyjagA8pzozPCfEg2v3w8vlAQ==
+-----END NEW CERTIFICATE REQUEST-----
diff --git a/spring-security-x509/keystore/truststore.jks b/spring-security-x509/keystore/truststore.jks
new file mode 100644
index 0000000000..aaae3a6a20
Binary files /dev/null and b/spring-security-x509/keystore/truststore.jks differ
diff --git a/spring-security-x509/pom.xml b/spring-security-x509/pom.xml
new file mode 100644
index 0000000000..8a9fd200a8
--- /dev/null
+++ b/spring-security-x509/pom.xml
@@ -0,0 +1,49 @@
+
+
+ 4.0.0
+
+ com.baeldung
+ spring-security-x509
+ 0.0.1-SNAPSHOT
+ pom
+
+
+ basic-secured-server
+ client-auth-server
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 1.4.0.RELEASE
+
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-thymeleaf
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+