Güvenli Yuva Katmanı (SSL), şifreli veriler ve sertifika tabanlı kimlik doğrulaması uygulayarak istemci ve sunucu arasındaki iletişim için güvenlik sağlayan bir protokoldür. Teknik olarak, "SSL" terimi artık orijinal SSL spesifikasyonuna dayanan Aktarım Katmanı ouSecurity (TLS) protokolünü ifade etmektedir.
SSL, internetteki güvenli iletişimi entegre etmenin en yaygın yollarından biridir, çünkü her büyük tarayıcı tarafından iyi desteklenen olgun bir protokoldür ve saygın bir takım üçüncü taraf SSL kimlik doğrulama hizmetleri sağlar.
Apache Tomcat kullanıyorsanız, işlediğiniz verilerin en azından bir kısmının hassas olması ve SSL'nin kullanıcılarınıza güvenlik sağlamanın kolay bir yolu olmasıdır. İyi haber şu ki Tomcat SSL protokolünü tam olarak destekliyor. Kötü haber şu ki, yapılandırma işlemi ve SSL'nin kendisi ilk kez kullananlar için biraz kafa karıştırıcı olabilir.
Endişelenme! SSL'nin Tomcat sunucularınızla çalışmasını sağlamak için, Tomcat ile SSL kullanımı için basit, kapsamlı ve adım adım bir kılavuz hazırladık. Protokolün gerçekte nasıl çalıştığına genel bakıştan, açık ve basit yapılandırma talimatlarına kadar, bu kılavuz sunucunuzda SSL'nin hızlı bir şekilde çalışmasına yardımcı olacaktır.
SSL Nasıl Çalışır
Tomcat'i SSL kullanacak şekilde yapılandırmaya başlamadan önce, SSL protokolünün neden oluşturulduğunu ve nasıl çalıştığını anlamanıza yardımcı olacaktır. Tüm bunları zaten biliyorsanız ve SSL'nin Apache Tomcat ile çalışmasını istiyorsanız, adım adım yapılandırma kılavuzuna atlamak için burayı tıklayın.
SSL ile İlgili Temel Bilgiler
SSL protokolü, iki basit güvenlik sorununa çözüm sağlamayı amaçlamaktadır:
İki taraf arasında verileri yalnızca iki tarafın okuyabileceği şekilde güvenli bir şekilde nasıl iletebiliriz?
İlgili taraflardan biri (veya daha fazlası), aslında şifreli iletimimizin şifresini çözme yeteneği vermek istediğimiz varlık olduklarını nasıl kanıtlayabilir?
SSL'nin ilk soruya cevabı şifrelemedir. Herhangi bir veri iletmeden önce, gönderen mesajını şifreler ve alıcının işlemden önce mesajın şifresini çözmesi gerekir. Şifreleme ve şifre çözme, "ortak anahtar şifrelemesi" adı verilen bir yöntemle gerçekleştirilir.
SSL'nin ikinci soruya yanıtı da ilk sorunun cevabının bir parçasıdır. Açık anahtarlı şifrelemenin güvenli iletişim sağlayabilmesi için, iletişim kuran taraflardan bir tanesinin daha fazlasının, gerçekte kim olduklarını iddia ettikleri diğerlerini kanıtlamaları gerekir. SSL, bu kanıtı, taraflardan birinin veya daha fazlasının şifrelenmiş verilerin iletilmesinden önce bağlantının ilk görüşmesine dijital bir sertifika sunmasını zorunlu kılarak sağlanır. Bu işleme "el sıkışma" denir.
Sertifikanın geçerli bir kimlik kanıtı olduğundan emin olmak için SSL, sertifikada belirtilen ve Sertifika Yetkilisi (CA) adı verilen güvenilir bir üçüncü taraf sunucuyla bağlantı kurar. Sertifika Yetkilisi, genellikle ücret karşılığında bir sitenin kimliğine kefil olmayı kabul eden güvenilir bir şirkettir. Genel olarak, CA saygın bir kuruluş olarak bilinirse, sitenizin kimliğini doğrulamak için sizden yılda daha fazla ücret alırlar. Saygın CA'lara örnek olarak Verisign ve Digicert verilebilir .
HTTPS ve HTTP
SSL'nin İnternet iletişimine entegre edilmesinin en yaygın yolu HTTPS protokolüdür. HTTPS'yi "protokol" olarak adlandırmak, HTTP ve SSL protokollerinin bir kombinasyonu olduğu için tamamen doğru değildir. HTTPS kullanılarak bir mesaj gönderildiğini söylediğimizde, aslında söylediğimiz, mesajın önce SSL kullanılarak şifrelenmiş, normal HTTP protokolü kullanılarak iletilmiş ve alınmış, daha sonra da alıcı tarafından da SSL ile şifresinin çözülmüş olmasıdır.
Yani bu SSL (çok temel) bir özetle. Sonuç olarak:
SSL, şifreleme yoluyla güvenlik sunar
şifreleme işlemi, üçüncü taraf Sertifika Yetkilisi tarafından doğrulanan dijital sertifikaların kullanılmasıyla mümkün olur
bu işlemin en yaygın uygulaması HTTPS kombinasyon protokolüdür.
İyi görünüyor! Şimdi SSL'nin Tomcat Sunucunuzla çalışmasını sağlayalım.
Tomcat ile SSL Kullanımı
Tomcat'i SSL bağlantılarını kullanacak şekilde yapılandırmak ilk seferinde biraz zor olabilir, ancak bu adım adım kılavuzu izlerseniz, hemen çalışmaya başlamalısınız.
Tomcat ile SSL Ne Zaman Kullanılmalı
SSL'yi kurma ve çalıştırma sorununu yaşamadan önce, bu yapılandırmayı gerçekten kullanmanız gerekip gerekmediğini belirlemek iyi bir fikir olabilir. SSL bağlantılarını işlemek için Tomcat'i kullanmanızın en yaygın nedeni, Tomcat'i tek başına bir web sunucusu olarak çalıştırmanız olabilir.
Başka bir deyişle, Tomcat'i bir web sunucusuyla sınırlandırıyorsanız ve yalnızca bir uygulama sunucusu veya Tomcat sunucu uygulaması kapsayıcısı olarak kullanıyorsanız, çoğu durumda web sunucusunun tüm SSL istekleri için proxy olarak işlev görmesine izin vermelisiniz.
Neden? Çünkü tüm bu şifre çözme, şifreleme ve el sıkışma ücretsiz değil - aslında, sadece "özgür değil", oldukça CPU-yoğun ve iletim hızını önemli ölçüde yavaşlatıyor. Başka bir deyişle, statik içeriğinizi sunmak için zaten bir web sunucusu kullanıyorsanız, Tomcat sunucunuzu özelliğine odaklanmak için serbest bırakmak - hızlı bir şekilde dinamik içerik oluşturmak ve bu verileri web sunucunuza olabildiğince çabuk, açık bir şekilde aktarın.
Ancak, siteniz ek bir web sunucusuyla uğraşmanıza gerek kalmayacak kadar küçükse, Tomcat SSL ihtiyaçlarınızı memnuniyetle karşılayacaktır. Nasıl çalıştıracağınız aşağıda açıklanmıştır.
Tomcat'i SSL Kullanacak Şekilde Yapılandırma
Tomcat için SSL kurulumu iki ana göreve ayrılabilir: fonksiyonel bir anahtar deposu oluşturma ve Tomcat konektörlerini ve uygulamalarını yapılandırma. Onları teker teker ele alalım.
BÖLÜM I - Anahtar Deposu
Adım 1 - Anahtar Deposunu Oluşturma
Tomcat'in SSL işlemleri için kullanacağı anahtarlar, yaratıcı bir şekilde "anahtar deposu" adlı şifre korumalı bir dosyada saklanır. Sunucunuzda SSL'yi etkinleştirmenin ilk adımı bu dosyayı oluşturmak ve düzenlemek. Bu dosyayı iki yoldan biriyle oluşturabilirsiniz - varolan bir anahtarı anahtar deposuna içe aktararak veya tamamen yeni bir anahtar oluşturarak
Basitlik açısından, bu kılavuz sadece ikincisini kapsayacaktır (ancak Apache'nin Tomcat Dokümantasyon sitesinde anahtarları içe aktarma talimatlarını bulabilirsiniz )
JDK'nızla birlikte gelen keytool adlı bir program, yeni anahtar deponuzu oluşturma işini gerçekleştirecektir. Bu programı kullanarak yeni bir anahtar deposu oluşturmak için, komut satırınıza işletim sisteminize uygun sözdizimini kullanarak aşağıdaki komutu girin:
$JAVA_HOME/bin/keytool -genkey -alias [youralias] -keyalg RSA -keystore [/preferred/keystore/path]
Seçtiğiniz bir [takma ad] ve [yol] kullanın
Ardından, keytool sizden anahtar deposu için kullanmak istediğiniz şifreyi girmenizi isteyecektir. Yine, ne istersen seç (ama unutma)
Anahtar deposu şifresini seçtikten sonra, Sertifika için şirketiniz ve adınız gibi gerekli bilgileri gireceksiniz. Sertifika almak için bu dosyayı seçtiğiniz Sertifika Yetkilisine göndermeniz gerekeceğinden bu bilgilerin doğru olduğundan emin olun
Tuş aracının sizden belirtmenizi isteyeceği son şey, bu belirli sertifikalara özgü şifre olan anahtar parolasıdır. Bu istemde herhangi bir şey girmek yerine ENTER tuşuna basmanız yeterlidir
Bu, tuş takımının anahtar parolasını anahtar deposu parolasına eşdeğer bir değere ayarlamasına neden olur. Tomcat'in sertifikaya erişmesi için eşleşen şifreler GEREKİR. İki farklı parola seçerseniz, anahtar deposuna erişme girişimleri kilitlenmeye neden olur (bu yüzden bunu yapmayın)
Tebrikler - yönergeleri doğru bir şekilde izlediyseniz, artık seçtiğiniz dizinde [youralias] adında kullanılabilir bir anahtar deposu dosyanız olmalıdır.
Adım 2 - Sertifika İmzalama İsteğini Oluşturma
Artık anahtar deponuzu oluşturduğunuza göre, Sertifika İmzalama İsteği veya CSR adlı bir dosya oluşturmanın zamanı geldi; bu sertifika, el sıkışma sırasında diğer taraflara sunulacak Sertifika SSL'yi oluşturmak için seçtiğiniz Sertifika Yetkilisi tarafından kullanılacak
Bu dosyayı oluşturmak için tuş takımını da kullanabilirsiniz. Bunu yapmak için, komut satırına aşağıdakileri girin:
$JAVA_HOME/bin/keytool -certreq -keyalg RSA -alias [youralias] -file [yourcertificatname].csr -keystore [path/to/your/keystore]
[Yer tutucular] için daha önce seçtiğiniz değerleri kullanın
Talimatları doğru bir şekilde uygularsanız, keytool, web sitenizde sağladıkları işlem aracılığıyla seçtiğiniz CA'ya gönderebileceğiniz, sertifikanızadı.csr adlı bir dosya oluşturur. Bu dosyayı kullanarak, sunucunuz için web sitelerinde sağladıkları talimatlara göre indirebileceğiniz özel bir sertifika oluştururlar.
Adım 3 - Yeni Sertifikanızı Yükleme
Henüz yorulmadınız mı? Endişelenme - tünelin sonunda ışık var. Bu, Tomcat'in kullanması için bir anahtar deposu oluşturmak için yapmanız gereken son şey. Son iki şey kaldı. Sakın Pes etme!
SSL, "güven zinciri" adı verilen bir siteyi kullanarak bir sitenin sertifikasının gerçekliğini doğrular, bu da temel olarak el sıkışma sırasında SSL'nin sitenizin sertifikasında belirtilen Sertifika Yetkilisi ile ek bir el sıkışma başlattığını, kendi CA'nızı oluşturdu
Sertifikanızın güven zincirini "sabitlemek" için, CA'nızdan "Kök Sertifika" adlı ek bir sertifika indirmeniz ve ardından bu sertifikayı ve sitenizin yeni sertifikasını anahtar deponuza almanız gerekir. CA'nız web sitelerinde Kök Sertifika alma hakkında bilgi sağlamalıdır
Hem kendi Sertifikanızı hem de CA'nız tarafından sağlanan Kök sertifikayı indirdikten sonra, bunları [komut sahipleri] yerine aşağıdaki komutlarla anahtar deponuza alın:
Kök Sertifikayı içe aktarmak için -
keytool -import -alias root -keystore [path/to/your/keystore] -trustcacerts -file [path/to/the/root_certificate]
Yeni Sertifikanızı içe aktarmak için -
keytool -import -alias [youralias] -keystore [path/to/your/keystore] -file [path/to/your_keystore]
Herşey yolunda mı? Öyleyse kendinizi arkada patlayın - artık işlevsel, sertifikalı bir anahtar deposunun gurur sahibisiniz.
BÖLÜM II - Tomcat'i SSL kullanacak şekilde yapılandırma
Artık geçerli sertifikalarla dolu işlevsel bir anahtar depomuz olduğuna göre, Tomcat'i SSL kullanacak şekilde yapılandırma zamanı geldi. İlk olarak, Tomcat'in SSL bağlayıcılarını yapılandıracağız ve ardından varsayılan olarak hangi web uygulamalarını SSL kullanmak istediğimizi belirleyeceğiz.
Adım 1 - Tomcat'in SSL Konektörlerini Yapılandırma
Tomcat'in global Bağlayıcı seçenekleri Tomcat'in "$ CATALINA_BASE / conf / server.xml" ana yapılandırma dosyasında yapılandırıldığından, bu dosyayı şimdi açmalısınız. Aradığımız Bağlayıcılar varsayılan olarak 8443 numaralı bağlantı noktasına bağlanır, bu nedenle aşağıdaki gibi bir girişle karşılaşana kadar bu bağlantı noktasını arayın:
<!-- Define a SSL HTTP/1.1 Connector on port 8443
This connector uses the JSSE configuration, when using APR, the
connector should be using the OpenSSL style configuration
described in the APR documentation -->
<!--
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"/>
--
Bu bağlayıcıyı kapsayan yorumun APR ve JSSE yapılandırmaları arasında bir seçimden bahsettiğini göreceksiniz. Bu, kullanmak istediğiniz SSL'nin uygulanmasını ifade eder. Tomcat'in varsayılan yapılandırması olan JSSE, varsayılan olarak desteklenir ve 1.4 sürümünden sonra tüm JDK'larda bulunur. Dolayısıyla, APR'nin ne olduğunu bile bilmiyorsanız, yalnızca bu girişi açmanız ve Tomcat'in anahtar deponuzu bulmasına izin vermek için bazı ek bilgiler eklemeniz gerekir
<Connector port = "8443" maxThreads = "150" scheme = "https" secure = "true" SSLEnabled = "true" keystoreFile = "yol / / / anahtar deponuza" keystorePass = "YourKeystorePassword" clientAuth = "false" keyAlias = "yourAlias" sslProtocol = "TLS" />
Öte yandan, Tomcat'in "yerel kütüphanesi" olarak da bilinen Apache Taşınabilir Çalışma Zamanı'nı (APR) kullanmanın, özellikle de Tomcat'i bağımsız bir web sunucusu olarak (muhtemelen ) ve sunucunuza zaten yüklediyseniz, Tomcat'in JSSE yerine APR'nin OpenSSL uygulamasını kullanmasına izin vermek için bu girişi aşağıdaki gibi değiştirmeniz gerekir veya SSL kullanmaya çalışmak bir hata oluşturur:
<Connector port = "8443" scheme = "https" secure = "true" SSLEnabled = "true" SSLCertificateFile = "/ path / to / your / certificate.crt" SSLCertificateKeyFile = "/ path / to / your / keyfile" SSLPassword = "YourKeystorePassword" SSLCertificateChainFile = "/ root / sertifikanız / sertifikanızın yolu /" keyAlias = "yourAlias" SSLProtocol = "TLSv1" />
APR kullanıyorsanız, keystoreFile özniteliği yerine "SSLCertificateFile" ve "SSLCertificateKey" tipi özniteliklerin kullanıldığına dikkat edin. JSSE yerine APR kullanma arasındaki farklar hakkında daha fazla bilgi için Apache'nin Tomcat APR Dokümantasyonuna başvurun .
Tomcat'i yeniden başlatın. Tekrar çalışmaya başladıktan sonra, https: // [yourhost]: 8443 gibi bir URL kullanarak güvenli bir sayfaya bağlanarak yapılandırmanızı test edin. Yönergeleri doğru bir şekilde izlediyseniz, sayfayı güvenli bir HTTPS bağlantısı üzerinden görüntüleyebilmeniz gerekir!
Adım 2 - SSL Kullanımını Sınırlama
Tomcat'in server.xml dosyasında SSL'nin etkinleştirilmesi, tüm dosyaların hem güvenli hem de güvenli olmayan sayfalar olarak çalışmasına neden olarak gereksiz sunucu yüklenmesine neden olabilir. Uygulamanın WEB-INF / web.xml dosyasına aşağıdaki <security-constraint> öğesini ekleyerek hangi uygulamaların uygulama başına SSL bağlantısı sunacağını seçebilirsiniz:
<security-constraint>
<web-resource-collection>
<web-resource-name>YourAppsName</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
Bu yapılandırma, bir uygulamanın tüm sayfaları için SSL seçeneklerini tek bir yerde ayarlamanızı sağlar. Örneğin, uygulamanızın tüm sayfaları için SSL'yi devre dışı bırakmak için "GİZLİ" seçeneğini "YOK" olarak değiştirin.
Dikkat Edilecek Diğer Noktalar
Basitlik açısından, bu kılavuz SSL yapılandırmasının tüm öğelerini kapsamaz (her ne kadar Apache'nin Tomcat SSL Belgeleri'nde kapsamlı olarak ele alınsalar da). Bununla birlikte, SSL yapılandırmanızı değiştirirken dikkate almanız gereken diğer seçeneklerin ve önemli not alanlarının kısa bir listesini sunacağız.
Uygulamanın Belirlenmesi
Hem APR hem de JSSE için bağlayıcılar yapılandırdıysanız, yerel kütüphaneleri yüklediyseniz Tomcat varsayılan olarak APR'yi kullanır. Bir Bağlayıcının "protokol" özniteliğini aşağıdaki gibi değiştirerek JSSE kullanmaya zorlayabilirsiniz:
<Connector protocol="org.apache.coyote.http11.HTTP11NioProtocol"
APR'yi zorlamak istiyorsanız, bunu benzer bir düzenleme ile yapabilirsiniz:
<Connector protocol="org.apache.coyote.http11.Http11AprProtocol">
Takma Ad ve Parolaların Neden Olduğu Sık Karşılaşılan Hatalar
SSL yapılandırmanızla ilgili herhangi bir hatayla karşılaşırsanız, anahtar deposu şifreleri ve takma adlar gibi ayarları doğru girdiğinizden emin olun. Bu değerler, desteklenen bazı anahtar deposu biçimleri için büyük / küçük harfe duyarlıdır.