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

Linux

İş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