SSL/TLS双向认证案例参考

一.首先我们需要生成服务器端和客户端的数字证书并添加信任

实际应用环境里,需要向CA机构申请服务器证书。这里我们为了测试方便通过Keytool工具生成自签名证书来模拟。

注:相关参数说明请使用 keytool -help 查阅

1. 生成服务器端证书

keytool -genkey -v -keyalg RSA -keysize 1024 -sigalg SHA1withRSA -validity 36000 -alias www.alan.org -keystore alan.keystore -keystore alan.keystore -dname “CN=www.alan.org,OU=alan,O=alan,L=HN,ST=HN,C=CN”

2. 生成客户端证书

keytool -genkey -v -keyalg RSA -keysize 1024 -sigalg SHA1withRSA -validity 36000 -alias alanClient -storetype PKCS12 -keystore alanClient.p12 -dname “CN=alan-client,OU=alan,O=alan,L=HN,ST=HN,C=CN”

3. 让服务器信任客户端证书

(1)从刚刚生成的客户端证书库中导出客户端证书

keytool -export -alias alanClient -keystore alanClient.p12 -storetype PKCS12 -rfc -file alanClient.cer

(2) 导入客户端证书到服务器证书库作为一个信任证书

keytool -import -v -file alanClient.cer -keystore alan.keystore

4. 导入客户端证书到IE证书库

双击执行alanClient.p12文件导入证书到“个人”证书库。

注:实际应用中,客户端如果使用电子钥匙,则使用相应电子钥匙驱动工具注册钥匙内数字证书到IE证书库即可

二. 配置WEB服务器端(以Tomcat服务器为例)

在Tomcat的server.xml文件中配置双向认证,配置代码参考如下:

<Connector

port="443"

protocol="HTTP/1.1"

SSLEnabled="true"

maxThreads="150"

scheme="https"

secure="true"

clientAuth="true"

sslProtocol="TLS"

keystoreFile="conf/alan.keystore"

keystorePass="changeit"

truststoreFile="conf/alan.keystore"

truststorePass="changeit"/>

注:如果这里密钥库文件使用PKCS12格式,则还需指定keystoreType="PKCS12"

三.服务器端代码参考(以Java为例)

添加一个过滤器,过滤请求并获取属性“javax.servlet.request.X509Certificate”的值:

import java.io.IOException;
import java.security.cert.CertificateExpiredException;
import java.security.cert.CertificateNotYetValidException;
import java.security.cert.X509Certificate;
 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
 
/**
 * CertFilter
 */
@WebFilter(description = "Certificate Filter for SSL connection", urlPatterns = { "/CertFilter" })
public class CertFilter implements Filter {
 
    /**
     * Default constructor. 
     */
    public CertFilter() {
        // TODO Auto-generated constructor stub
    }
 
    /**
     * @see  Filter#destroy()
     */
    public void destroy() {
        // TODO Auto-generated method stub
    }
     
    /**
     * 获取证书信息
     */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // 获取request参数“javax.servlet.request.X509Certificate”中的证书信息
        X509Certificate[] certs = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate");
        for(X509Certificate cert : certs) {
            System.out.println("!!!Start!!!");
            System.out.println("版本:" + cert.getVersion());
            System.out.println("序列号:" + cert.getSerialNumber());
            System.out.println("颁布者:" + cert.getIssuerDN().getName());
            System.out.println("使用者(主题项):" + cert.getSubjectDN().getName());
            System.out.println("签名算法:" + cert.getSigAlgName());
            System.out.println("证书类型:" + cert.getType());
            System.out.println("有效期从:" + cert.getNotBefore());
            System.out.println("至:" + cert.getNotAfter());
            try {
                cert.checkValidity(); // 检查证书是否过期
            } catch (CertificateExpiredException e) {
                e.printStackTrace();
            } catch (CertificateNotYetValidException e) {
                e.printStackTrace();
            }
            System.out.println("!!!End!!!");
        }
        // pass the request along the filter chain
        chain.doFilter(request, response);
    }
     
    /**
     * @see  Filter#init(FilterConfig)
     */
    public void init(FilterConfig fConfig) throws ServletException {
        // TODO Auto-generated method stub
    }
     
}

四.客户端通过HTTPS访问服务器

因为是自签名证书,所以这里会有提示,点击“继续浏览此网站”即可进入,同时在后台可以看到如下打印输出:

因为是自签名证书,所以这里会有提示,点击“继续浏览此网站”即可进入,同时在后台可以看到如下打印输出:

至此,SSL/TLS双向认证即配置成功!可以根据自己的业务需求对获取到的证书信息进行相关业务操作即可。

时间: 2024-10-01 12:13:00

SSL/TLS双向认证案例参考的相关文章

基于mosquitto的MQTT服务器---SSL/TLS 单向认证+双向认证

基于mosquitto的MQTT服务器---SSL/TLS 单向认证+双向认证 摘自:https://blog.csdn.net/ty1121466568/article/details/81118468 2018年07月19日 16:51:57 曾来过 阅读数:1632 本文为参考网上其他博文搭建出服务器后的步骤记录,如有冒犯,请私信!!! 目录... 3 第 1 章 安装Mosquitto. 4 1.1 方法一:手动编译安装... 4 1.2方法二:在Ubuntu下使用apt-get安装..

FTP服务学习笔记之ssl/tls安全认证配置(3)

在Redhat5.8_X64bit上配置 一.实验说明 操作系统:Redhat5.8_x64bit 实验平台:VMware Workstation 实验目的:配置ftp基于ssl/tls安全认证 二.实验步骤如下: 1.安装vsftpd #yum install vsftpd #rpm -ql vsftpd #service vsftpd start #chkconfig vsftpd on 2.配置CA #cd /etc/pki/CA #mkdir certs newcerts crl #to

java中关于SSL/TSL的介绍和如何实现SSL Socket双向认证

一.        SSL概述 SSL协议采用数字证书及数字签名进行双端实体认证,用非对称加密算法进行密钥协商,用对称加密算法将数据加密后进行传输以保证数据的保密性,并且通过计算数字摘要来验证数据在传输过程中是否被篡改和伪造,从而为敏感数据的传输提供了一种安全保障手段. SSL协议提供的服务主要有: 1)认证用户和服务器,确保数据发送到正确的客户机和服务器 认证用户和服务器的合法性,使它们能够确信数据将被发送到正确的客户机和服务器上.客户机和服务器都有各自的识别号,这些识别号由公开密钥进行编号,

java实现ssl单/双向认证通信[推荐]

有关SSL的原理和介绍在网上已经有不少,对于Java下使用keytool生成证书,配置SSL通信的教程也非常多.但如果我们不能够亲自动手做一个SSL Sever和SSL Client,可能就永远也不能深入地理解Java环境下,SSL的通信是如何实现的.对SSL中的各种概念的认识也可能会仅限于可以使用的程度.本文通过构造一个简单的SSL Server和SSL Client来讲解Java环境下SSL的通信原理. 首先我们先回顾一下常规的Java Socket编程.在Java下写一个Socket服务器

webservice ssl 3 双向认证【openssl,jax-ws,soapui相关设置开发】

推荐使用openssl,linux基本上都自带了.windows下的openssl折腾3个小时,放弃了,各种dll不全. 直接说主题,webservice ssl双向认证. 一.证书相关生成工作 1.Key Pair Generation[生成私钥,记得密码,保存好此文件] OpenSSL> genrsa -aes256 -out privatekey.pem 2048 2.CSR Generation [生成CSR 证书请求文件] OpenSSL> req -new -sha256 -key

Nginx、Tomcat、SSL、双向认证

1. 证书层级结构 2. 服务器结构 tomcat不要求认证客户端,nginx要求认证客户端 3. tomcat配置注意点 tomcat的服务器证书的CN必须为tomcat_backend 4. nginx配置注意点 使用openssl从pfx文件中导出pem格式公钥 1 openssl pkcs12 -clcerts -nokeys -in cert.p12 -out cert.pem 使用openssl从pfx文件中导出pem格式私钥 1 openssl pkcs12 -nocerts -n

MQTT服务-Mosquitto简单安装及TLS双向认证配置

一. 安装配置Mosquitto 1.yum安装Mosquitto yum install epel-release -y yum search mosquitto yum install mosquitto-devel mosquitto -y 2. 配置 Mosquitto egrep -v '^#|^$' /etc/mosquitto/mosquitto.conf pid_file /var/run/mosquitto.pid port 1883 #默认连接端口 persistence t

SSL双向认证和SSL单向认证的流程和区别

refs: SSL双向认证和SSL单向认证的区别https://www.jianshu.com/p/fb5fe0165ef2 图解 https 单向认证和双向认证!https://cloud.tencent.com/developer/news/233610 SSL/TLS 双向认证(一) -- SSL/TLS工作原理https://blog.csdn.net/wuliganggang/article/details/78428866 双向认证 SSL 协议要求服务器和用户双方都有证书.单向认证

SSL/TLS 协议介绍

SSL/TLS 协议(RFC2246 RFC4346)处于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持. 从协议内部的功能层面上来看,SSL/TLS 协议可分为两层: 1. SSL/TLS 记录协议(SSL/TLS Record Protocol),它建立在可靠的传输层协议(如 TCP)之上,为上层协议提供数据封装.压缩.加密等基本功能. 2. SSL/TLS 握手协议(SSL/TLS Handshake Protocol),它建立在 SSL/TLS 记录协议之上,用于在实际