tomcat多工程SSL双向认证的实现(每个端口对应一个工程,每个工程有各自双向的证书)

原创 2016年05月30日 17:52:19


本例适用的情况是:相同地址,不同端口,每个端口对应一个工程,每个工程有各自双向的证书

    有两个工程:WEBAPP_ONEWEBAPP_TWO


1、分别创建两个工程的客户端和服务端的证书,关于证书的生成请参考 双向证书生成

2、找到tomcat的主目录,打开conf文件夹,找到并打开server.xml文件。

3、复制一个Service(<Service>...</Service>之间的内容),将Service中的HTTPS的注释去掉,并添加双向认证证书的相关信息。

4、在<Host>下增加,<Context path="" docBase="/WEBAPP_ONE"/>。其中path为空,表示访问地址的根目录,即https://xxx.xxx.xxx:8443/xxx。可以根据自己项目的需要,配置path,添加多级目录。例如<Context path="/abc" docBase="/WEBAPP_ONE"/>,那么,访问路径就会变成https://xxx.xxx.xxx:8443/abc/xxx

注意事项:

1、服务器的keystore文件不要存储多个客户端的证书,否则,会导致拥有其他客户端证书的一方,可以访问非该客户端证书对应的工程内容

2、项目不要放在tomcat的webapps的根目录下,因为即使配置<Context >的path,可以直接通过项目名访问工程。也就是说通过https://xxx.xxx.xxx:8443/xxx和https://xxx.xxx.xxx:8443/abc/xxx都可以访问,这个肯定是和部署的需求相违背的。所以在webapps下再创建一级目录,将工程置于此,这样就只会通过path设置的方式进行访问了

============================================================================

server.xml的Service配置如下:

<Service name="Catalina">

    <Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

	<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"  
           maxThreads="150" scheme="https" secure="true"  
           clientAuth="true" sslProtocol="TLS"  
           keystoreFile="D:\\tomcat.keystore" keystorePass="server123456"  
           truststoreFile="D:\\tomcat.keystore" truststorePass="server123456" />

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8309" protocol="AJP/1.3" redirectPort="8443" />

    <Engine name="Catalina" defaultHost="localhost">


      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <!-- This Realm uses the UserDatabase configured in the global JNDI
             resources under the key "UserDatabase".  Any edits
             that are performed against this UserDatabase are immediately
             available for use by the Realm.  -->
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

			<Context path="/WEBAPPONE" docBase="/APP/WEBAPP_ONE"/>

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />

      </Host>
    </Engine>
  </Service>

  <Service name="Catalina1">

    <Connector port="8082" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="9443" />

	<Connector port="9443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"  
           maxThreads="150" scheme="https" secure="true"  
           clientAuth="true" sslProtocol="TLS"  
           keystoreFile="D:\\tomcat123.keystore" keystorePass="server123456"  
           truststoreFile="D:\\tomcat123.keystore" truststorePass="server123456" />

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8310" protocol="AJP/1.3" redirectPort="9443" />

    <Engine name="Catalina1" defaultHost="localhost">


      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <!-- This Realm uses the UserDatabase configured in the global JNDI
             resources under the key "UserDatabase".  Any edits
             that are performed against this UserDatabase are immediately
             available for use by the Realm.  -->
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

	  <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

			<Context path="/WEBAPPTWO" docBase="/APP/WEBAPP_TWO"/>

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />

      </Host>
    </Engine>
  </Service>

项目修炼之路(6)Redis批量删除某数据库下的key

我们做测试时,一直想模拟线上第一次运行的环境,所以会涉及对某个索引下的某类key值进行删除的操作,下面给大家介绍下具体操作步骤:...
  • xvshu
  • xvshu
  • 2016年02月19日 11:09
  • 3827

如何在同一台服务器上的不同站点使用不同的SSL证书

最近我在和朋友研究网站部署https访问时遇到这样一种场景:我们两人共用一台阿里云的服务器,在这台服务器上分别部署着各自的网站,我们都申请了自己网站域名对应的腾讯云的免费版域名型SSL证书,但在给网站...

Tomcat双向认证证书SSL管理工具

  • 2009年10月12日 16:43
  • 100KB
  • 下载

使用CA签发的服务器证书搭建Tomcat双向SSL认证服务

第一部分,先说证书的申请。 这步是要到正规的CA公司申请正式的设备证书必须走的步骤。 1、先生成证书的密钥对 打开命令行,切换到某个自己新建的目录下,执行如下命令 keytool -genke...
  • lucett
  • lucett
  • 2011年10月05日 16:33
  • 930

Tomcat生成https+ssl双向证书认证

最近发现自己开发的Android App都存在未签名认证的问题。 反编译App引用的库,发现关键字ALLOW_ALL_HOSTNAME_VERIFIER,允许所有主机名通过验证 所以想研究一下...

用keytool 生成证书配置tomcat ssl双向认证

借鉴了网上同学的资料,自己实践出来的 1、生成服务器证书库 keytool -validity 365 -genkey -v -alias server -keyalg RSA -keysto...

Tomcat配置使用SSL双向认证(使用openssl生成证书)

Tomcat配置使用SSL双向认证(使用openssl生成证书)

通过tomcat实现SSL双向认证

  • 2012年09月20日 16:21
  • 17KB
  • 下载

tomcat实现SSL双向认证

  • 2012年11月15日 20:23
  • 207KB
  • 下载

使用Volley实现Https请求, Volley SSL 双向自认证证书请求。

From http://code.tutsplus.com/tutorials/an-introduction-to-volley--cms-23800 Volley is a network...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:tomcat多工程SSL双向认证的实现(每个端口对应一个工程,每个工程有各自双向的证书)
举报原因:
原因补充:

(最多只允许输入30个字)