25 Ağustos 2020 Salı

SpringBoot application.properties SSL Ayarları

Giriş
SSL/TLS kullanabilmek için önce bir key-store ve içinde sertifikaya ihtiyaç var.  Deneme için sertifika oluşturmak istersek, keytool genkeypair/genkey Seçeneği - Self Signed Sertifika Oluşturma yazısına bakabilirsiniz.

Daha application.properties dosyasına temel bazı bilgileri girmek gerekiyor. Bu alanlarla spring boot sunucusu karşı tarafa sertifikamızı gönderir.

key-store : dosyanın yolunu belirtir. Bazen "classpath:..." şeklinde kullanılır. Eğer classpath içindeyse örneğin projede "src/main/resources" altına yerleştirilebilir.
key-store-type : JKS, PKCS12 gibi değerler olabilir.
key-store-password : Dosyaya erişmek için şifre
key-alias : Sertifika için kullanılan alias
key-password : Sertifikaya erişmek için şifre

certificate Alanı
Örnek
Şöyle yaparız
server.port=3000
server.ssl.certificate=/Users/mayankc/Work/source/certs/cert.pem
server.ssl.certificate-private-key=/Users/mayankc/Work/source/certs/key.pem

enabled-protocols Alanı
Örnek
Şöyle yaparız
server.ssl.enabled-protocols=TLSv1.3,TLSv1.2
server.ssl.enabled-ciphers=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,\
  TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

port Alanı
Ayrıca sunucumuzun kullanacağı port belirtilir. SSL için varsayılan port 8443'tür.

Örnek - classpath içindeki  JKS dosyası
Şöyle yaparız.
server:
  port: 8443
  ssl:
    enabled: true
    key-store: classpath:identity.jks
    key-password: secret
    key-store-password: secret
Port numarası ile ilgili açıklama şöyle.
You will probably ask yourself why the port is set to 8443. The port convention for a tomcat server with https is 8443, and for http, it is 8080. So, we could use port 8080 for https connections, but it is a bad practice.
key-store Alanı
Örnek - classpath içindeki PKCS12 dosyası
Sunucuya kendi keystore dosyamızı belirterek şöyle yaparız.
server.ssl:
  key-store: classpath:keystore/keystore.p12
  key-store-password: password
  key-store-type: PKCS12
Örnek
Şöyle yaparız
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=secret
server.ssl.keyStoreType=PKCS12
server.ssl.keyAlias=myalias

Örnek
Şöyle yaparız
security.require-ssl=true
server.ssl.key-store-password=12345678
server.ssl.key-store=src/main/resources/localhost-ssl.p12
server.ssl.key-store-type=PKCS12

key-alias Alanı
Örnek - classpath içindeki PKCS12 dosyası
Kendi jar dosyamızdaki keystore.p12 dosyasını kullanır. Sertifikanın ismi tomcat'tir. Https için şöyle yaparız.
server.port: 8443
server.ssl.key-store: classpath:keystore.p12
server.ssl.key-store-password: password
server.ssl.keyStoreType: PKCS12
server.ssl.keyAlias: tomcat
Örnek - Diskte Olan PKCS12 dosyası
Sunucuya kendi keystore dosyamızı belirterek şöyle yaparız.
server:
  port: 443
  ssl:
    key-store-type: PKCS12
    key-store: D:\store\config\ssl\key.p12
    key-store-password: password
    key-alias: thekey
trust-store Alanı
Çift yönlü SSL (2 way TLS) içindir. Her iki taraf ta birbirlerine sertifikalarını gönderirler.
Örnek
Şöyle yaparız
server:
  ssl:
    key-store-type: PKCS12
    key-store: classpath:server-dev-keystore.p12
    key-store-password: changeit
    key-alias: ads-manager-dev
    trust-store: classpath:root_CA_truststore.jks
    trust-store-password: changeit
    trust-store-type: JKS
    client-auth: need
Örnek
Şöyle yaparız
server.ssl.enabled=true
#KeyStore
server.ssl.key-alias=1
server.ssl.key-store=classpath:clientKeystore.p12
server.ssl.key-store-password=whatever

#TrustStore
server.ssl.trust-store=classpath:clientTrustStore.p12
server.ssl.trust-store-password=possiblyAnything
server.ssl.client-auth=need

Hiç yorum yok:

Yorum Gönder