Tomcat ve HTTPS
Bu gün ÅŸirkette, beklenmedik zamanda beklenmedik iÅŸlerle uÄŸraÅŸtım durdum. Tabi çalışma arkadaÅŸlarımda saÄŸ olsunlar benimle birlikte uÄŸraşıp duruyorlardı. Bu gün planladığımızdan daha erken bir zamanda projemizi yayınlamamız gerekti. Yazılım yazmak iyi hoÅŸta projeyi production ortamına taşımak baÅŸlı başına sıkıcı bir iÅŸ. Hele birde programınızı hem server’ınızda hem de Facebook üzerinde Tuval olarak yayınlamak zorundaysanız iÅŸ daha fazla sıkıcı bir hal alıyor.
Hatalı Varsayımlar
Yanlış anlaşılmasın iÅŸten sıkıldığımdan falan deÄŸil. Sadece bu tip ÅŸeylerin bana bir ÅŸeyler öğretmediÄŸini düşündüğümden canım sıkılıyor. Tabi sistemi tam olarak server’a taşıdığımda ne kadar yanlış düşündüğümü anlamış oldum. Bir ton sorunla karşılaÅŸmama raÄŸmen, bir ton sorunu göz ardı etmeme raÄŸmen server’a taşıma iÅŸi neredeyse tüm günümü aldı. En çok zamanı türkçe karakter problemlerinde harcamamız ise durumu biraz daha komik bir hale sokuyor.
Günün sonuna kadar sistemi çalıştırıp ayağa kaldırmış olmama rağmen göz ardı ettiğim fakat içimin rahat etmediği bir kısım mevcuttu. Buda facebook kullanıcılarının büyük bölümünün HTTPS bağlantıları kullanmasından kaynaklanıyor. Bu durumda benim production serverımda HTTPS desteği yoktu. Bu sebepten güvenli gezinmeyi seçen facebook kullanıcısı uygulamaya erişemiyordu. Bu sorunu çözerken HTTPS desteğinin nasıl ekleneceğinide öğrenmiş oldum
Kurulum
Herşeyden önce kurulu Tomcat serverınızın çalışır vaziyette olduğundan emin olun. Ayrıca JAVA_HOME tanımlı olduğunu ya da en azından sistemde nereye denk geldiğini öğrenin.
Ön bilgi olarak belirtmeliyim ki Tomcat için iki farklı SSL uyarlaması mevcut.
- JSSE, Java tarafından 1.4 versiyonundan itibaren sağlanan SSL uyarlaması
- APR, Doğrudan OpenSSL yapısını kullanan bir SSL uyarlaması
Biz daha basit olduğundan ve başka bir araç gerektirmediğinden JSSE(Java Secure Socket Extension) uyarlamasını kullanacağız. JSSE, RSA kullanarak JKS (Java KeyStore) formatında anahtarlar üretiyor. Serverımız ise SSL ile HTTPS bağlantıları sağlamak için bu tip bir anahtara ihtiyaç duyuyor.
JDK ile gelen keytool programını kullanarak bu tip bir anahtar yapısı oluÅŸturmak mümkün. Hatta Maven projesi kullanıyorsanız, test/resources klasörünüzde keystore isimli bir anahtar görmüşsünüzdür. İşte bu keytool ile üretilen ve Jetty’e entegre edilen bir anahtar. Biz ÅŸimdi bu anahtarı tomcat serverımız için oluÅŸturacağız.
Windows
1 %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA
Linux
1 $JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA
İşletim sisteminize göre yukarıdaki komutlardan birini çalıştırdığınızda, kullanıcı klasörünüzün altında .keystore isminde anahtarınızın oluşturulduğunu göreceksiniz. Eğer Linux altında çalışıyorsanız ve root kullanıcısıyla işlem yapıyorsanız keystore dosyanız root klasörünün altına oluşacaktır. Sistemi çalıştıranda root kullanıcısı ise sorunla karşılaşmayacaksınızdır. Anahtar üretme aşamasında, size ad soyad, firma, şehir bilgileri gibi bir çok şey sorulacaktır. Bu bilgiler daha sonra sitenize HTTPS üzerinden bağlanıldığında, sertifika içerisinde gösterilecektir. Bu sebepten bu bilgileri doğru girmeniz önemlidir.
Bunların dışında işlem sırasında size şifre sorulacaktır. Ben bu örnek içerisinde şifre olarak 123456 kullanacağım. Şifrenin nerelerde kullanıldığına dikkat ederseniz sizin için daha iyi olur. Aksi halde hata alabilirsiniz.
Tomcat Ayarları
Åžifremizi oluÅŸturduktan sonra sıra Tomcat’in ayarlanmasına geliyor. BaÅŸta belirtmekte fayda var, tomcat bize APR ayarlanmış ÅŸekilde geliyor. Yani gidip server.xml içerisinde ki yorum satırını kaldırarak JSSE kullanmaya baÅŸlayamazsınız.
Tomcat’i JSSE ile ayarlamak için aÅŸağıdaki Connector bilgisini tomcat ana klasöründeki conf klasörünün altında bulunan server.xml dosyasına giriyoruz.
server.xml
<Connector port="8443" maxThreads="200" scheme="https" secure="true" SSLEnabled="true" keystoreFile="${user.home}/.keystore" keystorePass="123456" clientAuth="false" sslProtocol="TLS"/>
Burada ${user.home} kısmı sizi korkutmasın. Bu ifade tomcat için tanımlı olup hem Windows hem Linux ortamlarında kullanıcı klasörünü başarıyla bulmaktadır.
Son olarak server.xml içerisindeki <Listener className=”org.apache.catalina.core.AprLifecycleListener” SSLEngine=”on” /> satırını yoruma almanız ya da silmeniz gerekmektedir. Bu satır tomcat’inizi APR ile ayarlayacaksanız iÅŸinize yaramaktadır. Aksi halde size engel olacak ve hata almanıza sebep olacaktır.
Son
Eğer herşey başarılı şekilde ayarlandıysa, https://localhost:8443 ile serverınıza HTTPS üzerinden erişebileceksiniz. Tabi bu erişim sırasında internet tarayıcınız sizin sertifikanızı bilmediğinden sizi uyaracaktır.
Kaynaklar
End Of Line