1 (Page 1 of 1)
Tomcat6配置使用SSL双向认证

最近要做一个登录时数字证书验证的功能,在用户登录时除了效验用户名密码,还需验证其数字证书。

相关资源:IBM developerWroks中国中的tomcat4中使用SSLjavaeye中的Acegi X.509双向认证

异同之处
tomcat4中使用SSL中的异同:jdk1.4中已经包含JSSE。
AcegiX.509双向认证中的异同:tomcat6配置文件多了SSLEnabled="true"属性。

实现方法

  • 生成CA证书。目前不使用第三方权威机构的CA来认证,自己充当CA的角色。

1.创建私钥:
C:\OpenSSL\apps>openssl genrsa -out root/root-key.pem 1024
2.创建证书请求:
C:\OpenSSL\apps>openssl req -new -out root/root-req.csr -key root/root-key.pem
3.自签署证书:
C:\OpenSSL\apps>openssl x509 -req -in root/root-req.csr -out root/root-cert.pem -signkey root/root-key.pem -days 3650
4.将证书导出成浏览器支持的.p12格式:
C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in root/root-cert.pem -inkey root/root-key.pem -out root/root.p12

  • 生成server证书

1.创建私钥:
C:\OpenSSL\apps>openssl genrsa -out server/server-key.pem 1024
2.创建证书请求:
C:\OpenSSL\apps>openssl req -new -out server/server-req.csr -key server/server-key.pem
3.自签署证书:
C:\OpenSSL\apps>openssl x509 -req -in server/server-req.csr -out server/server-cert.pem -signkey server/server-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650
4.将证书导出成浏览器支持的.p12格式:
C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in server/server-cert.pem -inkey server/server-key.pem -out server/server.p12

  • 生成client证书

1.创建私钥:
C:\OpenSSL\apps>openssl genrsa -out client/client-key.pem 1024
2.创建证书请求:
C:\OpenSSL\apps>openssl req -new -out client/client-req.csr -key client/client-key.pem
3.自签署证书:
C:\OpenSSL\apps>openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey client/client-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650
4.将证书导出成浏览器支持的.p12格式:
C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12

  • 根据root证书生成jks文件
C:\OpenSSL\apps\root>keytool -import -v -trustcacerts -storepass password -alias root -file root-cert.pem -keystore root.jks
  • 配置tomcat使用SSL

修改conf/server.xml,tomcat6中多了SSLEnabled="true"属性。keystorefile, truststorefile设置为你正确的相关路径

  1. <CONNECTOR truststorepass="123456" truststoretype="JKS" truststorefile="d:/path/bin/x509/root.jks" 
  2. keystorepass="123456" keystoretype="PKCS12" keystorefile="d:/path/bin/x509/server.p12" clientauth="true" 
  3. sslprotocol="TLS" acceptcount="100" disableuploadtimeout="true" enablelookups="false" maxsparethreads="75" 
  4. minsparethreads="25" maxthreads="150" maxhttpheadersize="8192" sslenabled="true" port="8443" protocol="HTTP/1.1" 
  5. scheme="https" secure="true" />  
  • 将root.p12,client.p12分别导入到IE中去(IE->;Internet选项->内容->证书)

root.p12导入至受信任的根证书颁发机构,client.p12导入至个人

  • 访问你的应用http://ip:8443,如果配置正确的话会出现请求你数字证书的对话框。
  • 在jsp中取得符合x.509格式的证书
  1. <%   
  2.     //获得certificate chain   
  3.     X509Certificate[] ca = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate");   
  4.     if (ca == null) {   
  5.         out.println("No cert info!");   
  6.     } else {   
  7.         String serial = ca[0].getSerialNumber().toString();   
  8.         String DN = ca[0].getSubjectDN().toString();   
  9.     }   
  10. %>  
使用ant操作tomcat
  • 使用ant启动和关闭tomcat,在build.xml中加入下面代码片段
使用这种方法要先设置好环境变量CATALINA_HOME=tomcat的安装路径
如果有时你不想重启整个应用,而只操作tomcat下某一个项目
  1. <property name="tomcat.home" value="you tomcat home directory here."></property>  
  2.   
  3. <TARGET name="start-tomcat" depends="stop-tomcat">  
  4.     <ECHO message="Start Tomcat" />  
  5.     <JAVA dir=/bin/ fork="true" jar="/bin/bootstrap.jar">  
  6.         <ARG value="start" />  
  7.     </JAVA>  
  8. </TARGET>  
  9.   
  10. <TARGET name="stop-tomcat">  
  11.     <ECHO message="Stop Tomcat" />  
  12.     <JAVA dir=/bin/ fork="true" jar="/bin/bootstrap.jar">  
  13.         <ARG value="stop" />  
  14.     </JAVA>  
  15. </TARGET>   
  • 使用ant操作tomcat启动/停止/重新装载(等等)某一项目

(1) 将%TOMCAT_HOME%\server\lib\catalina-ant.jar文件复制到类路径下

(2) 新建tomcatTasks.properties文件
#这些值就是catalina-ant.jar中的类文件,用来扩展ant的功能
start=org.apache.catalina.ant.StartTask
reload=org.apache.catalina.ant.ReloadTask
stop=org.apache.catalina.ant.StopTask

(3) 在build.xml中加入下面代码片段

  1. <TASKDEF file="tomcatTasks.properties">  
  2.     <CLASSPATH>  
  3.         <PATHELEMENT path="/server/lib/catalina-ant.jar" />  
  4.     </CLASSPATH>  
  5. </TASKDEF>  
  6.   
  7. <TARGET name="启动当前项目">  
  8.     <START path="/projectName" password="adminpasswd" username="admin" url="http://localhost:8080/manager" />  
  9. </TARGET>  
  10.   
  11. <TARGET name="重新装载当前项目">  
  12.     <RELOAD path="/projectName" password="adminpasswd" username="admin" url="http://localhost:8080/manager" />  
  13. </TARGET>  
  14.   
  15. <TARGET name="停止当前项目">  
  16.     <STOP path="/projectName" password="adminpasswd" username="admin" url="http://localhost:8080/manager" />  
  17. </TARGET>  

# url就是在默认首页的Tomcat Manager进去的那功能页面
# username/password就是在conf/tomcat-user.xml中配置的用户名密码,注意这个用户要有manager权限
# /projectName就是你是管理的项目的名称

配置好后,就可以使用通过ant脚本来启动,重新装载,停止某一项目了。

JIRA安装批南

JIRAAtlassian 公司开发的一款商业问题跟踪工具(开源项目经过申请可以免费使用,须提交源代码),可以对各种类型的问题进行跟踪管理,包括缺陷、需求变更、评审记录等。

安装及破解过程(MYSQL):

  • 下载atlassian-jira-enterprise-3.6.3-standalone.zip版本,其中已经包括tomcat5.x服务器
  • 下载mysql,偶使用的是mysql-5.0.22-win32解压版
  • 下载mysql jdbc驱动,JIRA默认使用的是hsql。网上有教程说要使用mysql-connector-java-3.1.12-bin.jar版本,偶本机正好有这个版本,没去试别的版本的jdbc驱动会不会出问题
  • 下载jira-jars-tomcat5.zip
  • 确保JDK1.5环境看安成功,在CMD下java -version试试 :)
  • 打开atlassian-jira-enterprise-3.6.3-standalone\atlassian-jira\WEB- INF\classes\entityengine.xml,搜索field-type-name,修改为field-type-name="mysql"
  • 将mysql-connector-java-3.1.12-bin.jar拷贝到atlassian-jira-enterprise-3.6.3-standalone\common\lib
  • 将jira-jars-tomcat5.zip拷贝到atlassian-jira-enterprise-3.6.3-standalone\common\lib
  • 修改atlassian-jira-enterprise-3.6.3-standalone\conf\server.xml,将下面大段修改为:
  1. <RESOURCE name="jdbc/JiraDS" type="javax.sql.DataSource" password="" username="root" 
  2. url="jdbc:mysql://localhost/jiradbautoReconnect=true&useUnicode=true&characterEncoding=UTF8&mysqlEncoding=utf8"
  3. maxActive="20" timeBetweenEvictionRunsMillis="5000" minEvictableIdleTimeMillis="4000"
  4. driverClassName="com.mysql.jdbc.Driver" auth="Container" />  
  • 运行安装,打开 http://localhost:8080 进行安装

注册机源代码

  1. import com.atlassian.license.LicensePair;   
  2.   
  3. import java.io.*;   
  4. import java.security.KeyFactory;   
  5. import java.security.Signature;   
  6. import java.security.spec.PKCS8EncodedKeySpec;   
  7.   
  8. public class keygen {   
  9.   
  10.     public keygen() {   
  11.     }   
  12.   
  13.     public static void main(String args[])   
  14.             throws IOException {   
  15.         try {   
  16.             long l = 267L;   
  17.             long l1 = System.currentTimeMillis();   
  18.             long l2 = System.currentTimeMillis();   
  19.             String s = "";   
  20.             System.out.println("Keygen for JIRA Enterprise Edition.");   
  21.             System.out.print("created by mydaj[ROR].");   
  22.             do {   
  23.                 System.out.print("\nEnter your organization name: ");   
  24.                 for (int i = System.in.read(); i != 10 && i != 13; i = System.in.read())   
  25.                     s = s + (char) i;   
  26.   
  27.             } while (s == "");   
  28.             try {   
  29.                 PKCS8EncodedKeySpec pkcs8encodedkeyspec = new PKCS8EncodedKeySpec(EncodedPrvKey);   
  30.                 KeyFactory keyfactory = KeyFactory.getInstance("DSA""SUN");   
  31.                 java.security.PrivateKey privatekey = keyfactory.generatePrivate(pkcs8encodedkeyspec);   
  32.                 String s1 = Long.toString(l, 10);   
  33.                 s1 = s1 + "^^";   
  34.                 s1 = s1 + Long.toString(l1, 10);   
  35.                 s1 = s1 + "^^";   
  36.                 s1 = s1 + Long.toString(l2, 10);   
  37.                 s1 = s1 + "^^";   
  38.                 s1 = s1 + s;   
  39.                 byte abyte0[] = s1.getBytes();   
  40.                 Signature signature = Signature.getInstance("SHA1withDSA");   
  41.                 signature.initSign(privatekey);   
  42.                 signature.update(abyte0);   
  43.                 byte abyte1[] = signature.sign();   
  44.                 LicensePair licensepair = null;   
  45.                 try {   
  46.                     licensepair = new LicensePair(abyte0, abyte1);   
  47.                 }   
  48.                 catch (Exception exception1) {   
  49.                     exception1.printStackTrace();   
  50.                 }   
  51.                 System.out.println(s1);   
  52.                 System.out.println("Your license key is: ");   
  53.                 System.out.println(licensepair.toString());   
  54.             }   
  55.             catch (Exception exception) {   
  56.                 exception.printStackTrace();   
  57.             }   
  58.         }   
  59.         catch (IOException ioexception) {   
  60.         }   
  61.     }   
  62.   
  63.     static byte EncodedPrvKey[] = {   
  64.             48, -12617521048, -1261,   
  65.             446742, -12272, -505641,   
  66.             48, -1261312, -127, -1270, -3127,   
  67.             83, -12729117184182, -3374, -100,   
  68.             46, -20, -28, -25, -1017, -738260, -17,   
  69.             680, -613063, -128, -748138105,   
  70.             6993643481, -58961, -11588,   
  71.             -6, -65, -59, -11, -7048, -10, -53, -10185,   
  72.             108, -41, -12759, -1282952111, -14102,   
  73.             96, -73107, -10380, -91, -92, -97, -97, -24,   
  74.             41231634, -6279, -69, -87, -41, -2,   
  75.             -73, -5827, -85987, -25, -58, -88, -90,   
  76.             21154, -5, -125, -10, -45, -5930, -61,   
  77.             25384199022, -11150, -10117,   
  78.             -13, -824397, -4142, -17, -14343,   
  79.             25, -99, -47721, -572210, -105,   
  80.             9680, -113213511, -52, -78, -110, -71,   
  81.             -126, -94, -21, -12411, -168828, -112,   
  82.             -127, -1270, -9, -31, -96, -123, -42, -10161,   
  83.             -34, -53, -68, -859254, -7287, -71121,   
  84.             -108, -81, -69, -658, -22, -126, -78776,   
  85.             11617, -126103818987, -114, -70,   
  86.             -448979, -26113716, -127, -128, -76,   
  87.             732211335, -2476402219, -73,   
  88.             -49950, -116, -56, -90, -316022122,   
  89.             -11784124, -11540, -32, -93, -823043,   
  90.             -77, -90117, -111110, -9312711, -633,   
  91.             5398, -15, -59812213659, -52,   
  92.             -92, -15, -66, -8881, -112, -119, -88, -125, -33,   
  93.             -3190, -27, -976, -110, -11710294, -128,   
  94.             123853710017659, -2, -4973,   
  95.             424222204250, -8830125,   
  96.             -37118, -5020, -82, -6308, -36106,   
  97.             -9, -11012410768  
  98.     };   
  99.   
  100. }   
1 (Page 1 of 1)