jetty 6.x https访问双向认证配置方法

来源:互联网 发布:最新淘宝店铺教程视频 编辑:程序博客网 时间:2024/05/21 18:38

主要的思路:

  1. 先给服务器端与客户端发证书(我用的是openssl)
  2. 创建服务器端的keystore,里面包含服务器端个人证书(带私钥)和可信任的CA根证书与客户端证书。
  3. 配置jetty.xml,设置https参数,包括端口号,keystore库位置,truststore库位置,口令,和双向认证方式。

1、用openssl发证

#在当前目录下创建openssl.cnf配置文件,可从openssl安装目录下拷贝一份,主要修改string_mask,从nombstr改为utf8only

string_mask = utf8only

#创建根证书私钥
openssl genrsa -des3 -out cakey.pem -passout pass:12345678 1024

#创建自签名的根证书
openssl req -utf8 -new -x509 -days 7300 -key cakey.pem -passin pass:12345678 -out cacert.crt -config openssl.cnf -set_serial 1 -subj "/CN=XX证书中心/OU=XX证书中心/O=XXXX公司"

#创建服务器的私钥
#openssl genrsa -des3 -out server.key 1024

#创建服务器的待签证书
openssl req -utf8 -new -key server.key -days 7300 -out server.csr -passin pass:12345678 -passout pass:12345678 -subj /CN=localhost/OU=XX证书中心/O=XXXX公司

#签发服务器证书(pem格式)
openssl ca -utf8 -config openssl.cnf -passin pass:12345678 -batch -in server.csr -out server.crt

#生成带私钥的pkcs12格式服务器证书
openssl pkcs12 -export -inkey server.key -in server.crt -out server.pfx -passin pass:12345678 -passout pass:12345678

#转换pem(base64)编码格式的服务器证书为der(二进制)编码格式
openssl x509 -in server.crt -inform pem -out server.der -outform der

#客户端证书生成依照服务器生成步骤再做一遍(注意,根证书不需要再次生成)。

2、导入证书到keystore中

#导入服务器个人证书(带私钥)到keystore中
keytool -importkeystore -srckeystore server.pfx -srcstoretype PKCS12 -keystore server.jks -srcstorepass 12345678 -deststorepass 12345678

#导入ca根证书和客户端证书到可信任证书链中
keytool -import -keystore server.jks -keypass 12345678 -storepass 12345678 -alias ca -trustcacerts -file cacert.crt
keytool -import -keystore server.jks -keypass 12345678 -storepass 12345678 -alias client -trustcacerts -file client.der

3、jetty.xml的配置(精简型,只运行一个应用,线程数也设置的很少)

[html] view plain copy
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">  
  3.   
  4. <Configure id="Server" class="org.mortbay.jetty.Server">  
  5.   <Set name="ThreadPool">  
  6.     <New class="org.mortbay.thread.BoundedThreadPool">  
  7.       <Set name="minThreads">1</Set>  
  8.       <Set name="maxThreads">5</Set>  
  9.     </New>  
  10.   </Set>  
  11.   
  12.   <Call name="addConnector">  
  13.     <Arg>  
  14.       <New class="org.mortbay.jetty.security.SslSelectChannelConnector">  
  15.         <Set name="Port"><SystemProperty name="jetty.port" default="8443"/></Set>  
  16.         <Set name="maxIdleTime">30000</Set>  
  17.         <Set name="Acceptors">1</Set>  
  18.         <Set name="AcceptQueueSize">100</Set>   
  19.         <Set name="keystore"><SystemProperty name="jetty.home" default="." />/etc/server.jks</Set>  
  20.         <Set name="password">12345678</Set>  
  21.         <Set name="keyPassword">password</Set>  
  22.         <Set name="truststore"><SystemProperty name="jetty.home" default="." />/etc/server.jks</Set>  
  23.         <Set name="trustPassword">12345678</Set>  
  24.         <Set name="needClientAuth">true</Set>  
  25.       </New>  
  26.     </Arg>  
  27.   </Call>  
  28.   
  29.   <Set name="handler">  
  30.     <New id="Handlers" class="org.mortbay.jetty.handler.HandlerCollection">  
  31.       <Set name="handlers">  
  32.         <Array type="org.mortbay.jetty.Handler">  
  33.           <Item>  
  34.             <New class="org.mortbay.jetty.webapp.WebAppContext">  
  35.               <Set name="contextPath">/</Set>  
  36.               <Set name="resourceBase">webapp/</Set>  
  37.               <Call name="addServlet">  
  38.                 <Arg>org.mortbay.jetty.servlet.DefaultServlet</Arg>  
  39.                 <Arg>/</Arg>  
  40.               </Call>  
  41.             </New>  
  42.           </Item>  
  43.         </Array>  
  44.       </Set>  
  45.     </New>  
  46.   </Set>  
  47. </Configure>  

配置好后,运行jetty,可在控制台窗口输出中看到启动信息。

4、浏览器中导入根证书cacert.crt和客户端证书client.pfx,然后访问

http://localhost:8443/

原创粉丝点击