Güvenlik

Java Uygulamalarında SSL Sertifika Yönetimi


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.

Related Articles

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Back to top button