2012年3月6日 星期二

Disabling Weak Ciphers in Tomcat

一般tomcat的ssl設定中,如下範例所示:
http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html

<-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->

可透過設定server.xml中的connector參數,指定SSLEnabled="true" sslProtocol="TLS" scheme="https"以及keystore的檔案路徑與密碼即可運作
而client(如瀏覽器)於連線建立時,可選用server提供的cipher演算法來進行ssl連線
然而最近剛好碰到需要排除server ssl使用強度較弱的演算法的資安威脅,故整理處理過程
首先可先檢驗系統JRE中SSLSocketFactory所提供的Cipher


SSLSocketFactory sslsfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
String[] ciphers = sslsfactory.getDefaultCipherSuites();
Arrays.sort(ciphers);
for (String cipher : ciphers) {
System.out.println(cipher);
}

例如我桌機的cipher詳列如下,其中可發現一些強度較弱的演算法

SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA(weak)
SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA
SSL_DHE_DSS_WITH_DES_CBC_SHA
SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA(weak)
SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA
SSL_DHE_RSA_WITH_DES_CBC_SHA
SSL_RSA_EXPORT_WITH_DES40_CBC_SHA(weak)
SSL_RSA_EXPORT_WITH_RC4_40_MD5(weak)
SSL_RSA_WITH_3DES_EDE_CBC_SHA
SSL_RSA_WITH_DES_CBC_SHA(weak)
SSL_RSA_WITH_RC4_128_MD5
SSL_RSA_WITH_RC4_128_SHA
TLS_DHE_DSS_WITH_AES_128_CBC_SHA
TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA

排除強度較弱之演算法後可加上
ciphers="
SSL_RSA_WITH_RC4_128_MD5,
SSL_RSA_WITH_RC4_128_SHA,
TLS_RSA_WITH_AES_128_CBC_SHA,
TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
SSL_RSA_WITH_3DES_EDE_CBC_SHA,
SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,
SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA"

來指定tomcat server可使用的演算法

沒有留言: