Skip to content

Commit ec9b252

Browse files
committed
#16 Generate TLS keystore
1 parent 665a9e2 commit ec9b252

File tree

8 files changed

+95
-7
lines changed

8 files changed

+95
-7
lines changed

backend/.gitignore

+5-2
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,16 @@
1818
*.zip
1919
*.tar.gz
2020
*.rar
21-
*.pem
2221

23-
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
22+
# Virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
2423
hs_err_pid*
2524
replay_pid*
2625

2726
# Gradle
2827
build/
2928
.gradle/
3029
.kotlin
30+
31+
# Secrets
32+
*.pem
33+
*.p12

backend/authik/src/test/kotlin/ru/ifmo/se/dating/authik/AuthikTestSuite.kt

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import org.springframework.test.context.ContextConfiguration
77
import org.springframework.test.context.junit4.SpringRunner
88
import ru.ifmo.se.dating.Application
99
import ru.ifmo.se.dating.PostgresInitializer
10+
import ru.ifmo.se.dating.SecurityInitializer
1011

1112
@RunWith(SpringRunner::class)
1213
@ActiveProfiles(profiles = ["test"])
@@ -18,6 +19,7 @@ import ru.ifmo.se.dating.PostgresInitializer
1819
@ContextConfiguration(
1920
initializers = [
2021
PostgresInitializer::class,
22+
SecurityInitializer::class,
2123
],
2224
)
2325
abstract class AuthikTestSuite

backend/config/crypto/keys.bash

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
set -e
2+
3+
cd "$(dirname "$0")" || exit
4+
5+
MODE="$1"
6+
ENV="$2"
7+
8+
ALIAS="itmo-dating"
9+
KEYSTORE="keystore.p12"
10+
INSTALL_PATH="foundation/src/main/resources/keystore"
11+
PASSWORD="$ITMO_DATING_KEY_STORE_PASSWORD"
12+
13+
function copy() {
14+
cp "$1" "../../$INSTALL_PATH/$1"
15+
}
16+
17+
function remove() {
18+
rm -f "$1" "../../$INSTALL_PATH/$1"
19+
}
20+
21+
function generate() {
22+
keytool \
23+
-genkeypair \
24+
-alias "$ALIAS" \
25+
-keyalg RSA \
26+
-keysize 4096 \
27+
-validity 1 \
28+
-dname "CN=localhost" \
29+
-keypass "$PASSWORD" \
30+
-keystore "$KEYSTORE" \
31+
-storeType PKCS12 \
32+
-storepass "$PASSWORD"
33+
34+
openssl pkcs12 -in "$KEYSTORE" -nocerts -out "$ALIAS-private.pem"
35+
openssl pkcs12 -in "$KEYSTORE" -nokeys -out "$ALIAS-public.pem"
36+
37+
copy "$KEYSTORE"
38+
copy "$ALIAS-private.pem"
39+
copy "$ALIAS-public.pem"
40+
}
41+
42+
function clear() {
43+
remove "$KEYSTORE"
44+
remove "$ALIAS-private.pem"
45+
remove "$ALIAS-public.pem"
46+
}
47+
48+
if [ "$ENV" = "test" ]; then
49+
PASSWORD="testing-keystore-password"
50+
fi
51+
52+
if [ "$MODE" = "generate" ]; then
53+
generate
54+
elif [ "$MODE" = "clear" ]; then
55+
clear
56+
else
57+
echo "Error: Invalid argument '$MODE'."
58+
echo "Usage: $0 <generate|clear>"
59+
exit 1
60+
fi

backend/config/env/.env

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
ITMO_DATING_TOKEN_SIGN_KEY_PUBLIC="RSA:MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEArnKw3YcR3WJeLW64J6gc+8dT/ptl4Oi1kdfgib1EQBJmiNVmzgx6hnmf60MhTCbPHeKhbBKzozyFlboO32Aqx5Nfb0UAU2ssl99tuNi8R2VsYby6wkog58GgFidffKohdhWjOZaa3rBNI1D8CQXckk5WW4eFbonB6Vo84OLsebW5CX9ob8bCsJBX2iZYwS+WNCluUMFgxRyaLuyhtyKp0YRa7oje7iu3EXiLnaXTAFhGSP+iK6GxMUPORvGZYfJ7z+tpj6OYQId5cwYD/+5EXFM4wCkq82VDbj99mJqClpHs+1DhPP7sO/aSDM9SONXjAsMTtq27jJgdvEADpd6pHtwv/tHv1PsRS6DiQYFQSx5egc48JEiVDsBkMy3TzOmvf2dAU1KLWImNSwCybnwQiBhoRr2xPuUB6gNwyrUM8gSiX5HfK9pPX2LueberFzBYnzi8yR1phkLlqfvMZn9q6uRp9ysrtsw2tGf+Wn8BlbAoq3W8hD8ufr5pR03zHGvnAgMBAAE="
2+
ITMO_DATING_KEY_STORE_PASSWORD="testing-keystore-password"
23

34
ITMO_DATING_AUTHIK_POSTGRES_DB="postgres"
45
ITMO_DATING_AUTHIK_POSTGRES_USER="postgres"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package ru.ifmo.se.dating
2+
3+
import org.springframework.boot.test.util.TestPropertyValues
4+
import org.springframework.context.ApplicationContextInitializer
5+
import org.springframework.context.ConfigurableApplicationContext
6+
7+
class SecurityInitializer :
8+
ApplicationContextInitializer<ConfigurableApplicationContext> {
9+
10+
private val keyStorePassword: String = "testing-keystore-password"
11+
12+
override fun initialize(ctx: ConfigurableApplicationContext) {
13+
TestPropertyValues.of(
14+
"server.ssl.key-store-password=$keyStorePassword",
15+
).applyTo(ctx.environment)
16+
}
17+
}

backend/foundation/src/main/resources/application-foundation.yml

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
server:
2-
port: 8080
32
ssl:
4-
certificate: "classpath:cert.pem"
5-
certificate-private-key: "classpath:privkey.pem"
6-
trust-certificate: "classpath:chain.pem"
3+
enabled: true
4+
key-store-type: PKCS12
5+
key-store: classpath:keystore/keystore.p12
6+
protocol: TLS
7+
enabled-protocols: TLSv1.3
78
spring:
89
datasource:
910
driver-class-name: org.postgresql.Driver
1011
liquibase:
11-
change-log: classpath:database/changelog.sql
12+
change-log: database/changelog.sql
1213
springdoc:
1314
api-docs:
1415
path: /openapi

backend/matchmaker/src/test/kotlin/ru/ifmo/se/dating/matchmaker/MatchmakerTestSuite.kt

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import org.springframework.test.context.ContextConfiguration
77
import org.springframework.test.context.junit4.SpringRunner
88
import ru.ifmo.se.dating.Application
99
import ru.ifmo.se.dating.PostgresInitializer
10+
import ru.ifmo.se.dating.SecurityInitializer
1011

1112
@RunWith(SpringRunner::class)
1213
@ActiveProfiles(profiles = ["test"])
@@ -18,6 +19,7 @@ import ru.ifmo.se.dating.PostgresInitializer
1819
@ContextConfiguration(
1920
initializers = [
2021
PostgresInitializer::class,
22+
SecurityInitializer::class,
2123
],
2224
)
2325
abstract class MatchmakerTestSuite

backend/people/src/test/kotlin/ru/ifmo/se/dating/people/PeopleTestSuite.kt

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import org.springframework.test.context.ContextConfiguration
77
import org.springframework.test.context.junit4.SpringRunner
88
import ru.ifmo.se.dating.Application
99
import ru.ifmo.se.dating.PostgresInitializer
10+
import ru.ifmo.se.dating.SecurityInitializer
1011

1112
@RunWith(SpringRunner::class)
1213
@ActiveProfiles(profiles = ["test"])
@@ -18,6 +19,7 @@ import ru.ifmo.se.dating.PostgresInitializer
1819
@ContextConfiguration(
1920
initializers = [
2021
PostgresInitializer::class,
22+
SecurityInitializer::class,
2123
],
2224
)
2325
abstract class PeopleTestSuite

0 commit comments

Comments
 (0)