tomcat_ssl配置

一、TOMCAT自簽名
1. 生成 server key :
以命令行方式切換到目錄%TOMCAT_HOME%,在command命令行輸入如下命令(jdk1.4以上帶的工具):
keytool -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore -validity 3600
用戶名輸入域名,如localhost(開發或測試用)或hostname.domainname(用戶擁有的域名),其它全部以 enter 跳過,最後確認,此時會在%TOMCAT_HOME%下生成server.keystore 文件。
注:參數 -validity 指證書的有效期(天),缺省有效期很短,只有90天。

2.將證書導入的JDK的證書信任庫中:
這步對於Tomcat的SSL配置不是必須,但對於CAS SSO是必須的,否則會出現如下錯誤:edu.yale.its.tp.cas.client.CASAuthenticationException: Unable to validate ProxyTicketValidator。。。
導入過程分2步,第一步是導出證書,第二步是導入到證書信任庫,命令如下:
keytool -export -trustcacerts -alias tomcat -file server.cer -keystore  server.keystore -storepass changeit
用這個命令導入其它證書鏈
keytool -import -trustcacerts -alias tomcat -file server.cer -keystore  %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit(是導入時用的密碼)

如果有提示,自己填。
第二步出錯不影響TOMCAT的SSL使用。
其他有用keytool命令(列出信任證書庫中所有已有證書,刪除庫中某個證書):
keytool -list -v -keystore D:/sdks/jdk1.5.0_11/jre/lib/security/cacerts
keytool -delete -trustcacerts -alias tomcat  -keystore  D:/sdks/jdk1.5.0_11/jre/lib/security/cacerts -storepass changeit
3.修改server.xml文件:
tomcat6加以下內容在SSL下面
  <Connector className="org.apache.catalina.connector.http.HttpConnector"
port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               keystoreFile="d:/program files/java/jre6/bin/server.keystore" keystorePass="changeit"
   clientAuth="false" sslProtocol="TLS" />
4.可以訪問了。

5.雙向認證:
修改 clientAuth="false" 爲 clientAuth="true" 即可。
6.簽發用戶證書

7.讀取客戶端證書項。
JAVA中:
<%@ page  import="java.security.cert.X509Certificate" contentType="text/html; charset=GB2312" %>
<pre>
<%
    java.security.cert.X509Certificate[] certs=null;
    try{
            certs=(X509Certificate[])request.getAttribute("javax.servlet.request.X509Certificate");

                if (certs == null) {
                        out.println("No certificates");
                } else if (certs.length == 0) {
                        out.println("Certificates length is 0");
                } else {
                        java.security.cert.X509Certificate cert = certs[0];
                        String dn = cert.getSubjectX500Principal().toString();
                        out.println("SubjectDN: " + dn);
                        out.println();
                        out.println("------------------certification detail--------------------");
                        out.println(cert);
                        out.println("----------------------------------------------------------");
                }
    } catch(Exception e){
                out.println("Exception=" + e.getMessage());
    }
//如果只打印DN
out.println( (((X509Certificate[])request.getAttribute("javax.servlet.request.X509Certificate"))[0].getSubjectX500Principal().toString()));
%>
</pre>

二、用OPENSSL簽發
1.生成自籤密鑰對
openssl genrsa -des3 -out key/cakey.pem 1024
輸入密碼,如123456
2.生成自簽名根證書
openssl req -new -x509 -days 3650 -key key/cakey.pem -out cacert.pem -config openssl.cnf
3.用openssl爲tomcat生成密鑰對
openssl req -newkey rsa:1024 -keyout key/serverkey.pem -keyform PEM -out req/serverreq.pem -config openssl.cnf
4.用openssl簽發設備證書
openssl ca -in req/serverreq.pem -out servercert.cer -cert cacert.pem -keyfile key/cakey.pem(用哪個根籤,指定私鑰) -notext -config openssl.cnf -days 3600
如果報“The organizationName field needed to be the same in the”之類的錯誤,修改openssl.cnf文件(用EDITPLUS打開)中CA_default節中的policy = policy_match爲policy = policy_anything(76行)
5.生成P12設備證書
openssl pkcs12 -export -in servercert.cer -inkey key/serverkey.pem  -out server.p12 -name server -CAfile key/cacert.pem
6.在TOMCAT中導入信任證書鏈(openssl自籤的根證書)
keytool -import -v -trustcacerts  -alias my_ca_root -file cacert.pem -storepass changeit -keystore server.keystore
7.在TOMCAT中啓用這個證書
把server.p12和server.keystore拷到TOMCAT下的conf/下。
修改server.xml,增加以下內容:
keystoreFile="conf/server.p12" keystorePass="111111" keystoreType="PKCS12"
               truststoreFile="conf/server.keystore" truststorePass="changeit" truststoreType="JKS"
可以刪除server.keystore,重做;只能指定一個服務器證書。

8.查看server端證書
   keytool -list -v -keystore server.keystore 
9.簽發客戶端證書:
A:生成密鑰對
openssl genrsa -des3 -out client.key 1024
B:生成請求
openssl req -new -key client.key -out client.csr -config openssl.cnf
C:簽發證書(1800天)
openssl ca -in client.csr -out client.crt -cert cacert.pem -keyfile key/cakey.pem -notext -config openssl.cnf -days 1800
D:導出爲P12格式
openssl pkcs12 -export -inkey client.key -in client.crt -out client.p12


三、用java申請,第三方CA簽發證書
1、生成密鑰
keytool -keystore tomcat.jks -keypass 222222 -storepass 222222 -alias tomcat -genkey -keyalg RSA
2、生成證書請
keytool -keystore tomcat.jks -keypass 222222 -storepass 222222 -alias tomcat -certreq -file serverreq.pem
3、用第三方CA簽發證書
openssl ca -in serverreq.pem -out servercert.pem -config openssl.cnf -cert cacert.pem -keyfile key/cakey.pem(用哪個根籤,指定私鑰) -notext -days 3600
4、先導入CA的證書:
keytool -keystore tomcat.jks -keypass 222222 -storepass 222222 -alias ca -import -trustcacerts -file cacert.pem
5、再導入服務器證書:
keytool -keystore tomcat.jks -keypass 222222 -storepass 222222 -alias tomcat -import -file servercert.pem
6、導入信任鏈
keytool -keystore truststore.jks -keypass 222222 -storepass 222222 -alias ca -import -trustcacerts -file cacert.pem
7、修改server.xml文件
   <Connector port="8443"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" disableUploadTimeout="true"
               acceptCount="100" debug="0" scheme="https" secure="true"
               clientAuth="true" sslProtocol="TLS"
               keystoreFile="conf/tomcat.jks" keystorePass="222222" keystoreType="JKS"
      truststoreFile="conf/truststore.jks" truststorePass="222222" truststoreType="JKS" />
8、重啓TOMCAT服務。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章