Tomcat容器https配置之单向认证

测试环境

Windows 7

IE 11

Intellij IDEA 2017

JDK 1.8.0_25

Tomcat 6.0.36

httpcore 4.4.6

httpclient 4.5.3

keytool:证书生成工具,在JDK 1.4以后的版本中都包含了这一工具,它的位置为<JAVA_HOME>\bin\keytool.exe

单向认证

  • 生成服务端keystore

C:\Users\Administrator>keytool -genkeypair -alias server -keyalg RSA -keysize 1024 -keypass changeit -keystore d:/server -storepass changeit
您的名字与姓氏是什么?
  [Unknown]:  localhost
您的组织单位名称是什么?
  [Unknown]:  localhost
您的组织名称是什么?
  [Unknown]:  localhost
您所在的城市或区域名称是什么?
  [Unknown]:  hz
您所在的省/市/自治区名称是什么?
  [Unknown]:  zj
该单位的双字母国家/地区代码是什么?
  [Unknown]:  cn
CN=localhost, OU=localhost, O=localhost, L=hz, ST=zj, C=cn是否正确?
  [否]:  y

注意:keypass 和 storepass 要保持一致 如上例中的changeit

  • 导出服务端证书

C:\Users\Administrator>keytool -exportcert -alias server -file d:/server.cer -keystore d:/server -storepass changeit
  • 将服务端证书导入到客户端的环境中

C:\Users\Administrator>keytool -importcert -alias server -keystore %JAVA_HOME%\jre\lib\security\cacerts -storepass changeit -file d:/server.cer
所有者: CN=localhost, OU=localhost, O=localhost, L=hz, ST=zj, C=cn
发布者: CN=localhost, OU=localhost, O=localhost, L=hz, ST=zj, C=cn
序列号: 7ba673fa
有效期开始日期: Sun May 21 16:34:22 CST 2017, 截止日期: Sat Aug 19 16:34:22 CST
2017
证书指纹:
         MD5: F6:00:4B:9B:43:63:5A:26:20:4D:32:5B:70:FA:C4:71
         SHA1: 25:EB:6A:06:FA:46:73:A7:AB:7E:C2:C3:A1:E2:3B:62:1C:A8:BF:24
         SHA256: A2:DD:86:9F:22:69:2F:C2:D3:0C:36:93:6A:DB:E4:68:87:47:E1:10:C8:
4F:0C:9B:01:64:51:45:E6:BF:58:A4
         签名算法名称: SHA256withRSA
         版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: E3 04 36 1E 00 1C 77 34   29 2C AE BF CC FC 28 F5  ..6...w4),....(.
0010: D8 17 1C 17                                        ....
]
]

是否信任此证书? [否]:  y
证书已添加到密钥库中

这一步可以不用执行,只要代码中设置不校验证书即可,但是这样不安全,不推荐。

  • 配置Tomcat

    <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"
               keystoreFile="D:/server"
               keystorePass="changeit"/>
  • 测试

  1. 浏览器访问 https://localhost (提示警告 选择继续浏览即可)
  2. httpclient测试访问
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.ssl.TrustStrategy;
import org.apache.http.util.EntityUtils;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

/**
 * Created by leafsunday on 2017/5/20 .
 */
public class HttpsTest {

    public static void main(String args[]) throws Exception{
        CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory()).build();
        HttpGet httpGet = new HttpGet("https://localhost");
        CloseableHttpResponse response = httpClient.execute(httpGet);
        String httpStr = EntityUtils.toString(response.getEntity(), "utf-8");
        System.out.println(httpStr);
    }

    /**
     * 创建SSL安全连接
     *
     * @return
     */
    private static SSLConnectionSocketFactory createSSLConnSocketFactory() throws Exception {

        SSLContext sslContext = SSLContextBuilder.create()
                /*
                //设置不校验服务端证书 不安全(不推荐)
                .loadTrustMaterial(null, new TrustStrategy() {
                    public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                        return true;
                    }
                })
                */
                .build();

        return new SSLConnectionSocketFactory(sslContext
            /*
                //设置不校验hostname
                , new HostnameVerifier() {
            public boolean verify(String s, SSLSession sslSession) {
                return true;
            }
        }
        */
        );
    }
}
时间: 2024-10-05 22:43:11

Tomcat容器https配置之单向认证的相关文章

Tomcat容器https配置之双向认证

在上一篇https单向认证基础上(如果没看过的,请先移步:http://www.cnblogs.com/leafsunday/p/6885568.html),开始https双向认证之旅. 生成客户端keystore(PKCS12格式,便于导入浏览器) C:\Users\Administrator>keytool -genkeypair -alias client -keyalg RSA -keysize 1024 -keypass changeit -keystore d:/client.p12

配置tomcat的https通信(单向认证)

1.首先用jdk带的工具生成证书库 打开cmd命令行窗口,cd 到tomcat安装目录的bin下面执行 keytool -v -genkey -alias tomcat -keyalg RSA -keystore d:/tomcat.keystore  -validity 36500 附:d:/tomcat.keystore是将生成的tomcat.keystore放到d盘根目录下."-validity 36500”含义是证书有效期,默认值是90天(注意若要放到c盘,在win7系统下,需要以管理员

Spring通过JNDI获取在Tomcat容器中配置的C3P0数据源

开始直接使用Spring通过JNDI获取在Tomcat容器中配置的数据源,Tomcat默认的应该是DBCP连接池,没问题,一切OK,由于Hibernate和Spring都推荐使用C3P0连接池,所以就尝试配置一下,没想到整了半下午,才搞定配置,惭愧!网上的内容眼花缭乱,鱼龙混杂,不如自己靠谱!直接上代码,后面附出现的问题! 配置两个地方: 1.Tomcat\conf下的context.xml 2.Spring的配置文件 提示: 1.如果要优化连接池的性能,要对参数进行设置,具体的要看官网!官网最

tomcat的https配置

一.创建证书 进入java的bin目录,使用keytool工具创建证书 keytool -genkey -alias pq -keyalg RSA -keystore pqkey 语法解释: keytool -生成证书指令 -别名指令 别名(自己指定) -算法指令 算法名称 -存储文件名字指令 文件名(可以包含存储路径) 指令运行成功会提示输入信息,注意事项: 1)输入名称和姓氏时输入域名,如果没公网ip和域名时不能输入ip 2)路径不能含有空格 二.导出证书 导出为.crt文件 keytool

Web服务Https配置和代码访问方法

一.Https方式及证书 Web服务使用Https方式需要SSL证书,证书可从两个渠道获取:公开可信认证机构申请或自己生成. 公开可信认证机构优势在于校验方便,但是会有租金. 自己生成工具成本低,但用浏览器访问时会提示风险,需要用户手动确认可信. Https还分单向认证和双向认证,单向认证只需要服务器端部署1份证书,双向认证要Client和Server端都有证书,而且还会增加Client和Server握手步骤. 单向认证已经能够满足传输数据的加密需求,所以登录服务器与客户端通讯采用自己生成SSL

tomcat配置https单向认证

1. https单向认证原理 "单向认证",即"浏览器"验证"服务器"的证书是否合法,从而判断正在访问的网站是否可信.这也是当前网络上最常用的认证方式,GitHub.Google.Twitter.Facebook等均采用此种方式. "单向认证"的两个通信实体如下 他们之间的通信过程如下 下面给出简要的文字说明 客户端访问服务器 服务器响应客户端,发送服务器证书给客户端 客户端查询"受信任根证书颁发机构",验

tomcat 配置https (单向认证)

1.单向认证,就是传输的数据加密过了,但是不会校验客户端的来源 2.双向认证,如果客户端浏览器没有导入客户端证书,是访问不了web系统的,找不到地址 如果只是加密,单向就行 如果想要用系统的人没有证书就访问不了系统的话,就采用双向认证 第一步:为服务器生成证书 使用keytool为Tomcat生成证书,假定目标机器的域名是“localhost”,keystore文件存放在 “e:\\tomcat.keystore”,口令为“123456”,使用如下命令生成: keytool -genkey -a

https 单向认证和双向认证配置

HTTPS 是我们开发中经常用到的通信加密技术,能有效保护我们网络访问中的安全,本文主要讲解单向 和 双向 https 的配置.关于https 的实现原理在这里我就不赘述了,附上阮一峰老师的关于https介绍几篇博客,有兴趣的童鞋可以看一看:图解SSL/TLS协议   数字签名是什么? 本文目录: 1.单向https配置 2.双向https配置 3.常见名词说明(转载) 1.单向https 配置 生成https证书命令: sudo keytool -genkey -keyalg RSA -dna

tomcat 配置单向认证

tomcat配置单向认证 1.生成服务器端证书 keytool -genkey -keyalg RSA -dname "cn=localhost,ou=sango,o=none,l=china,st=beijing,c=cn" -alias server -keypass password -keystore server.jks -storepass password -validity 3650 2.由于是单向认证,没有必要生成客户端的证书,直接进入配置tomcat service