2002年10月21日

Apache與Tomcat整合方法

  • Install mod_JK
    將mod_jk.so(http://jakarta.apache.org/tomcat/)複製到/www/modules/mod_jk.so
    如果找不到已經編譯好的檔案,請下載原始碼來編譯,方法如下:
    將下載的檔案jakarta-tomcat-connectors-jk-1.2-src-current.tar.gz放到一各暫存資料夾(/usr/local/src/)解壓縮
    cd /usr/local/src/jakarta-tomcat-connectors-jk2-2.0.2-src/jk/native
    ./buildconf.sh
    ./configure --with-apxs=/www/bin/apxs
    make ; make install
    再把產生的mod_jk.so拷貝到/www/modules/
    請注意mod_jk.so的屬性是否為可執行以及擁有人屬性應該跟執行apache的人一樣
  • 在/www/conf/下建立一個workers.properties的檔案,內容如下,基本上不需要修改內容:
    # In Unix, we use forward slashes:
    ps=/
    # list the workers by name
    worker.list=tomcat
    worker.tomcat.port=8009
    worker.tomcat.host=localhost
    worker.tomcat.type=ajp13
  • 變更檔案擁有者屬性,改成可執行apache的人chown apache.users workers.properties
  • 修改/www/conf/httpd.conf
  • 在LoadModule那一大串宣告裡加上一段
    LoadModule jk_module modules/mod_jk.so
    JkWorkersFile /www/conf/workers.properties
    JkLogFile /www/logs/mod_jk.log
    JkLogLevel info
  • 在"DocumentRoot"附近加上
    JkMount /servlets/* tomcat
    JkMount /*/servlets/* tomcat
    JkMount /*.jsq tomcat
    JkMount /*.jsp tomcat
    主要是在宣告要mount進去的目錄,例如JkMount /*.jsp表示會將Tomcat的ROOT目錄底下的所有.jsp檔案都看成跟apache的文件目錄下一樣,類似IIS的虛擬路徑。
  • 修改/www/tomcat/conf/server.xml
    尋找

    把註解取消掉
  • 啟動tomcat和apache
    /www/tomcat/bin/startup.sh
    Using CATALINA_BASE: /www/tomcat
    Using CATALINA_HOME: /www/tomcat
    Using CATALINA_TMPDIR: /www/tomcat/temp
    Using JAVA_HOME: /usr/local/jdk
    /www/bin/apachectl startssl
    httpd (pid 729) already running

在Apache上安裝SSL支援

前言:

要讓 Apache可以支援SSL有兩個做法,分別是是安裝Apache-SSL及安裝mod_ssl模組,其中Apache-SSL專案使用的是舊版的 apache,目前只有進行到1.3.27這個版本,2.0以上的Apache目前(2004/7/1)還無法使用,檔案可以到www.apache-ssl.org及www.apache.org 下載。而mod_ssl則必須到http://www.modssl.org下載mod_ssl模組,並重新編譯apache讓他可以支援mod_ssl 模組。目前我在使用apache-ssl並讓他和tomcat整合時,發現無法載入模組,也許是我編譯apache時沒有加上參數,這個會再有空時在測 試。

安裝:

不管是哪一種解決方案,SSL加解密的部分都需要openssl軟體來協助,www.openssl.org,在RedHat的套件裡,預設應該都是有安裝的。在安裝前建議先執行以下指令

ln -s /usr/kerberos/include/com_err.h /usr/include/

ln -s /usr/kerberos/include/profile.h /usr/include/

ln -s /usr/kerberos/include/krb5.h /usr/include/

不然當我們編譯ssl的時候有可能會出現問題

一、 Apache-SSL解決方案:
  • 先 到http://www.apache-ssl.org下載最新的apache-ssl軟體,下載後由最新版本的序號為準,再到 www.apache.org找相對應的版本,例如在www.apache-ssl.org找到apache_1.3.27+ ssl_1.48.tar.gz,表示這個版本支援的是apache 1.3.27,所以必須要到http://www.apache.org再下載apache_1.3.27-x86_64-whatever- linux22.tar.gz像這樣的檔案
  • 到/usr/local/src(暫存原始檔用)資料夾,將apache_1.3.27- x86.tar.gz解壓縮(tar zxvf apache_1.3.27-x86_64-whatever-linux22.tar.gz ),解完之後進入apache的目錄裡,再將apache_1.3.27+ssl_1.48.tar.gz的檔案解到到相同的目錄裡。
  • 執行”./FixPatch openssl的所在目錄”,這個程式會將apache更新成可以支援SSL的版本,如果一切正常的話,會顯示Patch完成。
    一 般常遇到的應該是找不到openssl安裝目錄的錯誤訊息為多,根據我測試的結果當我指定我的openssl位址(我安裝在 /usr/bin/openssl)不管我指定的是./FixPatch /usr/bin/openssl或./FixPatch /usr/bin/都會說找不到該檔案,但是如果用./FixPatch /usr/就可以正常完成,這點相當詭異。
  • 接下來執行./configure 來產生安裝所需要的檔案,我使用的是最陽春的./configure --prefix="/wwwssl/",這邊的—prefix為指定安裝目錄,所以事實上我沒有將其他的模組一起編譯進去。
  • 產生正確的Makefile之後,就可以開始編譯Apache-SSL,指令為
    make ; make install
  • 安 裝完成之後,apache就會被安裝在/wwwssl的目錄底下,接下來產生SSL的鑰匙對及證書請參考第三節,產生後的xxx.key及xxx.crt 請放在同一個目錄裡方便控管,並將屬性改成chmod 400,在這個例子中,我放在/wwwssl/conf/目錄底下。
  • 修改 /wwwssl/conf/httpsd.conf檔案,有一段設定為#Listen 3000,如果這台機器還要提供一般的http服務的話,請將#拿掉,並將3000改成80,然後再最後一行加上Include ssl.conf,再加上這一段文字:(請依照需求填寫)

    Listen w.x.y.z:443

    DocumentRoot /wwwssl/htdocs

    SSLCertificateFile /wwwssl/conf/xxx.crt

    SSLCertificateKeyFile /wwwssl/conf/xxx.key

    SSLVerifyClient 0

    SSLVerifyDepth 10

    SSLBanCipher NULL-MD5:NULL-SHA

    SSLEnable
  • 存檔離開後,請在/wwwssl/conf/底下建立一個ssl.conf檔案,這個檔案主要在指定cache的位址:

    SSLDisable

    SSLNoCAList

    SSLRandomFile file /var/tmp 1024

    SSLCacheServerPath /wwwssl/bin/gcache

    SSLCacheServerPort logs/gcache_port

    SSLCacheServerRunDir /tmp

    SSLSessionCacheTimeout 15
  • 最後再幫httpsd.conf建立一個軟鏈結到httpd.conf:
    ln -s httpsd.conf httpd.conf
  • 啟動apache,/wwwssl/bin/httpsdctl start。
  • 打開瀏覽器觀看成果吧
    http://w.x.y.z/index.html.zh
    https://w.x.y.z/index.html.zh
二、 Mod_SSL解決方案:
  • 安裝Mod_SSL,方法省略(可直接下載RPM檔來安裝)
  • 將最新版Apache解壓縮,並進入該目錄,測試的版本是httpd-2.0.49.tar.gz
  • 產生Apache設定檔,必須將mod_ssl支援編譯進去
    ./configure --prefix="/www" --enable-mods-shared=most --enable-so --enable-ssl=static --with-ssl=/usr/include/openssl/
    make; make install進行安裝
  • 安裝完成之後在/www/conf/會產生一個ssl.conf檔,尋找
    SSLCertificateFile /www/conf/adbanner.crt 和
    SSLCertificateKeyFile /www/conf/adbanner.key 將正確的key和證書位址帶入
  • 啟動apache /www/bin/apache startssl
  • 打開瀏覽器觀看成果吧
    http://w.x.y.z/index.html.zh
    https://w.x.y.z/index.html.zh
三、 產生憑證及鑰匙對:
  • openssl req -new > xxx.csr,接下來會問一些問題,請按照自己的環境回答,其中Common Name:這項請回答你的網址,以後才不會出現困擾。也請您牢記您的密碼。
  • openssl rsa -in privkey.pem -out xxx.key 利用第一個步驟產生的檔案來建立一把私鑰。(這裡使用RSA編碼),這個步驟必須輸入第一個步驟設定的密碼。
  • openssl x509 -in xxx.csr -out xxx.crt -req -signkey xxx.key -days 365 建立一個自行簽署期限365天的CA證書(不經過第三方認證)
  • 如果要申請第三方認證的憑證,只需要將xxx.csr傳給該公司,他們就會回覆相關的xxx.crt檔
  • 關於第一個和第二個指令,也有人是這樣做的
    openssl genrsa 1024 > /etc/httpd/conf/ssl.key/server.key(先建立私鑰)
    openssl req -new -key /etc/httpd/conf/ssl.key/server.key -out /etc/httpd/conf/ssl.csr/server.csr(再利用私鑰建立要求文件)
結語:

以Apache -SSL和mod_ssl兩種解決方案來說,apache-ssl的檔案較小,編譯起來比較快,且在啟動apache的時候不需要另外輸入憑證的密碼,而 mod_ssl的設定就比較簡單明瞭,但檔案大,編譯起來會花費不少時間,且mod_ssl這個方案可以正常的支援tomcat整合,所以推薦使用 mod_ssl方案。

精選文章

利用Selenium IDE進行UI測試

安裝與執行 Selenium IDE是Firefox的一個plugin,用來做UI的自動測試:下載網址為http://docs.seleniumhq.org/download/ 安裝後,點一下firefox 的工具 -> Selenium IDE ,就會...