Quantcast
Channel: ÇözümPark
Viewing all articles
Browse latest Browse all 4130

Java Uygulamalarında SSL Sertifika Yönetimi

$
0
0

En değerli varlığımız olan verinin güvenli yöntemlerle işlenmesini sağlamak dikkat etmemiz gereken en önemli noktalardan biridir. Çoğu kurumda, veritabanlarında depolanan bilgiye erişim uygulama sunucuları üzerinde çalışan uygulamalar üzerinden yapılmaktadır.

 

 

Bu makalemizde, Java tabanlı uygulamalarda kullanılan SSL Sertifikaların yönetilmesinden bahsedeceğiz. Öncelikle, ssl sertifikalar ile ilgili temel kavramları açıklayarak başlayalım:

 

Bu ve benzeri tüm tanımlar için ÇözümPark Bilişim Sözlüğünü Kullanabilirsiniz.

 

http://sozluk.cozumpark.com

 

 

 

CA – Certification Authority : Sertifika Otoritesi, sertifika vermeye yetkili kurum

 

 

RA – Registration Authority:  Sertifika talebinde bulunan kişi/kurumun kimlik bilgilerini doğrulayan yerel kurum

 

CRL - Certificate Revocation List: Sertifikaların geçerlilik sürelerinin takip edildiği liste

 

 

Private Key: Kişiye/Kuruma özel, kesinlikle başkalarıyla paylaşılmaması gereken şifreleme anahtarı

 

 

Public Key: Kişiye/Kuruma özel, başkalarının da erişebildiği şifreleme anahtarı

 

 

Sertifika: Public Key + Dijital İmza

 

 

Root ve Intermediate Sertifikalar: Kişi/kurum sertifikasını doğrulamak için kullanılan CA sertifikaları

 

 

Dijital İmza: Sertifika talebinde bulunan kişi/kurumun Public Key Hashi’nin CA’in Private Keyi ile şifrelenmesi (imzalanması) işlemi.

 

 

CSR – Certificate Signing Request: Private kullanılarak oluşturulacak public key’in CA tarafından imzalanması için gönderilen sertifika imzalama isteği (*.csr)

 

 

KeyStore: Private key ve sertifikaları içeren Java’ya özel dosya (*.jks)

 

 

TrustStore: Kişi/kurum sertifikalarını doğrulamak için kullanılacak genellikle CA’in root ve intermediate sertifikalarını içeren Java’ya özel dosya(*.jks) .(Internal root CA sertifikalarını da içerebilir)

 

 

 

Java uygulama kodunda kullanılacak SSL sertifikalar, Keystore (*.jks) adı verilen dosyalarda tutulur. Bu sertifikaları doğrulamak için kullanılan CA’in root ve intermediate sertifikalarının uygulama sunucusunda (AS – Application Server) olması gerekir. Bunun için iki yöntem vardır;

 

 

 

  1. Manuel olarak oluşturacağımız TrustStore’da
  2. Uygulama sunucusunun Default Trustore’unda

 

 

 

Bu makalede, (a.) yöntemi seçilmiştir. Java uygulama kodunda, kullanacağımız sertifikanın KeyStore’da, sertifikamızı doğrulamak için kullanılacak CA root ve intermediate sertifikalarının da manuel yarattığımız TrustStore içinde olduğunu belirteceğiz. (Bknz “İlgili Kod Parçacığı” bölümü).

 

 

 

(b.) yöntemi kullanıldığında, CA’in root ve intermediate sertifikaların uygulama sunucusu yönetim ara yüzünden Default TrustStore’a yüklenmesi gerekir.

 

 

Gerçekleştireceğimiz işlemler:

 

 

 

1.)    Keystore ve keystore içinde bir Private Key oluşturulması

2.)    Private key kullanılarak CSR oluşturulması, CSR’ın kontrol edilmesi ve imzalanmak üzere CA’ya gönderilmesi

3.)    CA’dan gelen sertifikanın Keystore import edilmesi

4.)    CA’in root ve intermediate sertifikalarının import edilmesi için TrustStore oluşturulması ve CA sertifikalarının import edilmesi (sertifikamız bu CA sertifikaları ile doğrulanır)

5.)    TrustStore içindeki kullanılmayacak private key’in silinmesi

6.)    Store içindeki nesneleri export edilmesi

7.)    Java kod parçacığı ve/veya uygulama sunucusu üzerinde yapılması gereken değişiklikler

 

 

 

Java SSL Sertifika işlemleri için “keytool” uygulamasını kullanıyoruz. Varsayılan olarak aşağıdaki path’de olan uygulamayı (işletim sistemine ve kurulum ayarlarınıza göre değişebilir), işletim sisteminizde path variable olarak eklerseniz istediğiniz dizinde bu işlemleri gerçekleştirebilirsiniz.

 

 

 

C:\Program Files\Java\jre6\bin

 

 

 

Store içindeki nesnelere erişim “alias” adı verilen parametreler ile gerçekleştirilir.

 

 

1.)    JKS + Private Key Oluşturma

 

 

 

2048 bitlik, RSA algoritması kullanan, KeyStore şifresi “ikaru55@”, Private key şifresi “5uraki@”, Common Name: Elma olan Makale.jks keystore’u oluşturmak için aşağıdaki komutu kullanıyoruz:

 

Burada, elma vb örnek olarak kullanılmıştır. Uygulama.kurum.com.tr vb olarak gerçek ortamlarda kullanılabilir.

 

 

 

keytool.exe -genkey -keystore "C:\Cagatay\Makale.jks" -alias Makale -storepass ikaru5@ -keypass 5uraki@ -keyalg RSA -keysize 2048 -dname "CN=Elma, OU=Bank AS, O=Cagatay"

 

 

 

image001

 

 

 

2.)    CSR oluşturma + Kontrol Etme + CA’ya gönderme

 

KeyStore içindeki Private Key’imizi kullanarak CA’ya sertifika imzalama isteği (makale.csr) gönderiyoruz. Aslında CA yerine, RA’ya gönderiyoruz. RA, bizim gerçekten o sertifikayı almaya yetkili olup olmadığımızı imza sirküleri, ticaret sicil gazetesi vb kontroller ile gerçekleştirir. Uygun bulunursa sertifikamız gönderilir.

 

 

keytool -certreq -alias Makale -file Makale.csr -keystore Makele.jks -storepass ikaru5@ -keypass 5uraki@

 

 

 

image002

 

 

 

Oluşturduğumuz CSR’ı kontrol etmek için metin editörü ile açıp http://www.sslshopper.com/csr-decoder.html linkindeki uygulamayı kullarak kontrol ediyoruz:

 

 

 

 

image003

 

 

 

 

 

 

image004

 

 

 

 

Doğrulama işlemi için internette farklı kaynaklar da mevcuttur.

 

3.)    CA’den Gelen Sertifikayı KeyStore’a Import Etme

 

 

Store içindeki key ve sertifikalara erişim “alias” kullanılarak gerçekleştirilir.

 

CA tarafından imzalanan sertifika (Makale_Sertifika.cer) tarafımıza ulaştığında, KeyStore’a import ediyoruz:

 

 

keytool –import –trustcacerts –alias Makale_Sertifika -file Makale_Sertifika.cer -keystore "C:\Cagatay\Makale.jks" -storepass ikaru5@

 

 

image005

 

 

 

image006

 

 

 

 

Sertifikamızla beraber, CA’in root ve intermediate sertifikalarını edinmemiz gerekir. Bu sertifikaları da makalemizin ilerleyen bölümlerinde TrustStore’a import edeceğiz. Sertifikamız, CA sertifikaları ile doğrulanacak. Makalemizde, CA olarak COMODO seçilmiştir.

 

 

 

image007

 

 

 

image008

 

 

 

 

CA’in Root ve Intermediate Sertifikaları:

 

 

comodo-root.cer ve comodo-intermediate.cer

 

 

image009

 

 

 

 

image010

 

 

 

Yüklü key ve sertifikaları listeleme

 

 

Sertifikamızı Makale.jks keystore’umuza import etmiştik. Şimdi, Makale.jks içeriğini cagatay.txt’ye yazdırıp kontrol edelim:

 

 

keytool -list -v -keystore Makale.jks -storepass ikaru5@ > cagatay.txt

 

 

Dosyaya yazdırmadığımız durumda (>cagatay.txt olmadan),  sonucu ekrana basacağından çok sayıda sertfika ve key olduğunda kontrol daha zor olacaktır.

 

 

image011

 

 

 

Alias=makale nesnesi, entry type değerinden de görüleceği üzere Privata Key’imiz, makale_sertifika ise CA’in (Comodo) imzaladığı sertifikamızdır.

 

 

4.)    TrustStore Oluşturarak CA Sertifikalarının Import Edilmesi

 

Sertifikamızı doğrulamak için kullanacağımız CA root ve intermediate sertifikalarını içeren TrustStore oluşturmak için aşağıdaki komutu kullanıyoruz:

 

 

keytool.exe -genkey -keystore "C:\Cagatay\TrustedMakale.jks" -alias TrustedMakale -storepass ikaru5@ -keypass 5uraki@ -keyalg RSA -keysize 2048 -dname "CN=Elma, OU=Bank AS, O=Cagatay"

 

 

 

image012

 

 

 

Root CA sertifikalarını TrustStore’a import etme

 

 

CA root ve intermediate sertifikalarını TrustStore’a import ediyoruz:

 

 

keytool –import –trustcacerts –alias comodo-root  -file comodo-root.cer -keystore "C:\Cagatay\TrustedMakale.jks" -storepass ikaru5@

 

 

 

image013

 

 

 

keytool –import –trustcacerts –alias comodo-intermediate -file comodo-intermediate.cer -keystore "C:\Cagatay\TrustedMakale.jks" -storepass ikaru5@

 

 

image014

 

 

 

Yüklü sertifikaları listeleme

 

 

TrustStore içeriğini kontrol ediyoruz:

 

 

keytool -list -v -keystore TrustedMakale.jks -storepass ikaru5@ > cagatayTrusted.txt

 

 

 

image015

 

 

 

image016

 

 

 

TrustStore içinde (trustedmakale.jks) üç nesne bulunuyor. Alias=Trustedmakale nesnesi örnek amaçlı yaratılmış private key. Kullanmayacağımız için silmemiz gerekiyor.

 

5.)    Private key’i silme

 

 

 

Alias=Trustedmakale private key nesnesini aşağıdaki komut ile siliyoruz:

 

 

keytool -delete -alias TrustedMakale -keystore Trustedmakale.jks -storepass ikaru5@

 

 

 

image017

 

 

 

İşlem sonrası TrustedMakale.jks içeriğine bakalım:

 

 

keytool -list -v -keystore TrustedMakale.jks -storepass ikaru5@ > cagatayTrusted.txt

 

 

 

image018

 

 

 

 

TrustStore oluştururken –genkey parametresini kullanmasaydık private key oluşturulmayacaktı. Jks içinden nesne silmeyi (alias kullanarak) göstermek için bu şekilde oluşturulmuştur.

 

 

Son Durum

 

 

image019

 

 

 

6.)    Store İçindeki Key/Certificate Nesnelerinin Export Edilmesi

 

 

Store içindeki key ve sertifikaları export etmek için –export switchini kullanabiliriz:

 

 

keytool -export -alias makale_sertifika -file makale_sertifika.cer -keystore Makale.jks -storepass ikaru5@

 

7.)    İlgili Kod Parçacığı

 

 

Artık, java uygulama kodumuz içinde aşağıdaki tanımlamaları yaparak uygulamamızın CA tarafından imzalanmış SSL sertifikası kullanmasını sağlayabiliriz.

 

 

 

props.setProperty("javax.net.ssl.keyStore"          , local path of jks file that holds private key);

props.setProperty("javax.net.ssl.keyStorePassword"   , private keystore file storepassword);

props.setProperty("javax.net.ssl.keyStoreType"       ,”JKS”);

 

props.setProperty("javax.net.ssl.trustStore"          , local path of jks file that holds private key);

props.setProperty("javax.net.ssl.trustStorePassword"   , private keystore file storepassword);

props.setProperty("javax.net.ssl.trustStoreType"       ,”JKS”);

 

 

 

Makalemizin başında belirttiğimiz gibi, TrustStore kullanmak zorunda değildik. Uygulama sunucusunun default TrustStore’una CA’in root ve intermediate sertifikalarını yönetim arayüzünden import edip java uygulama kodu içindeki trustStoreType içeren satırları silerek de kullanabilirdik. Her iki yöntemi de anlatmak için bu şekilde uyguladık.


Viewing all articles
Browse latest Browse all 4130

Trending Articles


Mide ağrısı için


Alessandra Torre - Karanlık Yalanlar


Şekilli süslü hazır floodlar


Flatcast Güneş ve Ay Flood Şekilleri


Gone Are the Days (2018) (ENG) (1080p)


Yildiz yükseltme


yc82


!!!!!!!!!! Amın !!!!!!!!!


Celp At Nalı (Sahih Tılsım)


SCCM 2012 Client Installation issue