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

2019独角兽企业重金招聘Python工程师标准>>> jetty 6.x https访问双向认证配置方法

打算给新开发的应用做https方式访问,采用双向认证的方式(即客户端需要校验服务器端证书,服务器端也需要校验客户端证书),在网上找了半天,都是东一句西一句的,没有一个比较全的,经过一番周折,终于搭起来了。讲讲主要的思路:

  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的配置(精简型,只运行一个应用,线程数也设置的很少)

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">

<Configure id="Server" class="org.mortbay.jetty.Server">
  <Set name="ThreadPool">
    <New class="org.mortbay.thread.BoundedThreadPool">
      <Set name="minThreads">1</Set>
      <Set name="maxThreads">5</Set>
    </New>
  </Set>

  <Call name="addConnector">
    <Arg>
      <New class="org.mortbay.jetty.security.SslSelectChannelConnector">
        <Set name="Port"><SystemProperty name="jetty.port" default="8443"/></Set>
        <Set name="maxIdleTime">30000</Set>
        <Set name="Acceptors">1</Set>
        <Set name="AcceptQueueSize">100</Set> 
        <Set name="keystore"><SystemProperty name="jetty.home" default="." />/etc/server.jks</Set>
        <Set name="password">12345678</Set>
        <Set name="keyPassword">password</Set>
        <Set name="truststore"><SystemProperty name="jetty.home" default="." />/etc/server.jks</Set>
        <Set name="trustPassword">12345678</Set>
        <Set name="needClientAuth">true</Set>
      </New>
    </Arg>
  </Call>

  <Set name="handler">
    <New id="Handlers" class="org.mortbay.jetty.handler.HandlerCollection">
      <Set name="handlers">
        <Array type="org.mortbay.jetty.Handler">
          <Item>
            <New class="org.mortbay.jetty.webapp.WebAppContext">
              <Set name="contextPath">/</Set>
              <Set name="resourceBase">webapp/</Set>
              <Call name="addServlet">
                <Arg>org.mortbay.jetty.servlet.DefaultServlet</Arg>
                <Arg>/</Arg>
              </Call>
            </New>
          </Item>
        </Array>
      </Set>
    </New>
  </Set>
</Configure>

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

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

http://localhost:8443/

转载于:https://my.oschina.net/kivensoft/blog/549363

上一篇:PAT (Advanced Level) 1066. Root of AVL Tree (25)


下一篇:spring-framework-中文文档三:依赖注入DI