`
fireflyjava
  • 浏览: 187036 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SSL单向认证Java实现 Tomcat篇

    博客分类:
  • SSL
阅读更多

单向验证,客户机只验证服务器的证书,服务器不验证客户机的证书。所以只需要生成服务器端的keystore.

1. 以jks格式生成服务器端包含Public key和Private Key的keystore文件,keypass与storepass务必要一样,因为在tomcat server.xml中只配置一个password.

keytool -genkey -alias server -keystore serverKeystore.jks -keypass 123456 -storepass 123456 -keyalg RSA  -keysize 512 -validity 365 -v -dname "CN = W03GCA01A,O = ABC BANK,DC = Server Https,DC = ABC,OU = Firefly Technology And Operation"

2. 从keystore中导出别名为server的服务端证书.

keytool -export -alias server -keystore serverKeystore.jks -storepass 123456 -file server.cer
 
3. 将server.cer导入客户端的信任证书库clientTruststore.jks。
 
 keytool -import -alias trustServer -file server.cer -keystore clientTruststore.jks -storepass 123456
 
 服务器端: serverKeystore.jks
 客户端:   clientTruststore.jks
 
4. 在tomcat 配置server.xml

  <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
                   maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" 
               keystoreFile="keystore/serverKeystore.jks" keystorePass="123456"  />

5. 客户端代码

/**
 * 
 */
package com.ssl.http;

import java.io.File;
import java.io.FileInputStream;
import java.security.KeyStore;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;

/**
 * 
 * @author kevin
 *
 */
public class ClientOneWaySSL {

    public final static void main(String[] args) throws Exception {
        DefaultHttpClient httpclient = new DefaultHttpClient();

        KeyStore trustStore  = KeyStore.getInstance(KeyStore.getDefaultType());        
        FileInputStream instream = new FileInputStream(new File("com/ssl/http/clientTruststore.jks")); 
        try {
            trustStore.load(instream, "123456".toCharArray());
        } finally {
            instream.close();
        }
        
        SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore);
        Scheme sch = new Scheme("https", socketFactory, 8443);
        httpclient.getConnectionManager().getSchemeRegistry().register(sch);

        HttpGet httpget = new HttpGet("https://w03gca01a/");

        System.out.println("executing request" + httpget.getRequestLine());
        
        HttpResponse response = httpclient.execute(httpget);
        HttpEntity entity = response.getEntity();

        System.out.println("----------------------------------------");
        System.out.println(response.getStatusLine());
        if (entity != null) {
            System.out.println("Response content length: " + entity.getContentLength());
        }
        if (entity != null) {
            entity.consumeContent();
        }

        // When HttpClient instance is no longer needed, 
        // shut down the connection manager to ensure
        // immediate deallocation of all system resources
        httpclient.getConnectionManager().shutdown();        
    }

}
 

6. 运行成功打印如下:

executing requestGET https://w03gca01a/ HTTP/1.1
----------------------------------------
HTTP/1.1 200 OK
Response content length: 7347
 

备注:

A. 如出现如下error,请配置C:\WINDOWS\system32\drivers\etc\hosts, 将“127.0.0.1     w03gca01a” 加在hosts文件中

executing requestGET https://w03gca01a/ HTTP/1.1
Exception in thread "main" javax.net.ssl.SSLException: hostname in certificate didn't match: <w03gca01a> != <localhost>
	at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:220)
	at org.apache.http.conn.ssl.BrowserCompatHostnameVerifier.verify(BrowserCompatHostnameVerifier.java:54)
	
 

B. 本文用到 httpcore-4.0.1.jar httpclient-4.0.1.jar httpmime-4.0.1.jar,下载地址:

http://hc.apache.org/downloads.cgi

 

 

 

2
0
分享到:
评论

相关推荐

    tomcat实现SSL双向认证

    Tomcat 实现 SSL 双向认证 Tomcat 是一个流行的开源 Web 应用服务器,而 SSL(Secure Sockets Layer)是一种常用的安全协议,用于确保 Web 应用程序之间的数据传输安全。本文将详细介绍如何在 Tomcat 中实现 SSL ...

    tomcat ssl单向/双向

    Tomcat配置SSL单向认证时,主要步骤包括: 1. 获取并安装SSL证书:可以是自签名证书或者由权威CA(证书颁发机构)签发的证书。 2. 在`server.xml`配置文件中配置`&lt;Connector&gt;`元素,指定`scheme="https"`, `secure=...

    JAVA NIO MINA2调用大宝CA密码安全套件实现国密SSL安全通道,1.0.1版本,含通信示例代码

    使用方法见:https://blog.csdn.net/upset_ming/article/details/96491058 1. 修改了前一版本中证书验证的bug,支持JDK8的高版本 2. 支持国密SSL双向认证 3. 将过期的国密证书替换为新证书

    利用tomcat服务器配置https双向认证、https单向认证-ssl、tls

    Tomcat作为流行的Java Servlet容器,提供了支持HTTPS协议的能力,这包括了单向认证(也称为服务器认证)和双向认证(也称为客户端认证)。这两种认证机制都是基于SSL(Secure Sockets Layer)和TLS(Transport Layer...

    为API设置安全性的教程,使用单向认证与TLSSSL和基于java的web服务器和具有Spring Boot的客户端进.zip

    本教程将引导您了解如何为API设置安全性,特别关注单向认证(也称为服务器身份验证)以及如何在Java Web服务器和Spring Boot客户端之间使用TLS(Transport Layer Security)和SSL(Secure Sockets Layer)。...

    Apache 2 mod_jk tomcat 5 双向SSL认证 传递证书信息

    标题中的“Apache 2 mod_jk tomcat 5 双向SSL认证 传递证书信息”涉及到的是在Web服务器(Apache)与应用服务器(Tomcat)之间建立安全通信的配置。这个配置主要是为了实现更高级别的安全性,即双方都需要验证彼此的...

    ssl双向认证密钥

    6. **SSL握手过程**:在SSL双向认证中,握手过程比单向认证复杂,包括了服务器发送其证书,客户端验证服务器证书并发送自己的证书,服务器验证客户端证书等步骤。 7. **安全性提升**:双向认证能有效防止中间人攻击...

    keytool+tomcat 单向/双向认证的配置

    综上所述,这个主题涵盖了Java安全、SSL/TLS协议、keytool的使用方法、Tomcat的SSL配置以及单向和双向认证的概念。学习和掌握这些知识对于进行安全的Web服务部署和管理至关重要。在实际操作时,务必注意证书的有效期...

    tomcat配置https单项认证

    标题中的“Tomcat配置HTTPS单项认证”涉及到的是在Apache Tomcat服务器上设置安全套接层(SSL)以实现HTTPS通信的过程,尤其是关于单向认证(也称为客户端认证)的配置。在互联网上,HTTPS是HTTP协议的安全版本,...

    AndroidHttpClient访问Tomcat双向SSL验证服务器.pdf

    - 更多关于Java实现SSL双向认证的信息可参考:“java实现SSL双向认证”。 3. **OpenSSL命令行测试**: - 使用`OpenSSL`命令行工具直接连接到`Tomcat`服务器,以测试SSL双向验证过程。 ```bash openssl s_client...

    Tomcat_SSL配置[归类].pdf

    Tomcat,作为一款广泛使用的Java应用服务器,也支持SSL配置,确保数据传输的加密和身份验证。本文将详细介绍如何在Tomcat中配置SSL双向认证。 首先,我们要理解SSL双向认证的概念。不同于传统的单向认证,双向认证...

    利用keytools为tomcat 7配置ssl双向认证的方法

    Tomcat 7配置SSL双向认证需要用到Java提供的Keytool工具,Keytool是一个用于管理和创建密钥库(keystore)的命令行工具,其中包含了密钥实体(私钥和公钥)和可信任的证书实体(公钥)。以下是配置SSL双向认证的步骤...

    在tomcat中使用keytool实现双向验证操作视频

    在Java的Web应用服务器Tomcat中,为了增强通信的安全性,常常会采用SSL(Secure Sockets Layer)协议进行数据传输,而SSL中的双向认证(Mutual TLS)则是一种更为严谨的安全策略。本教程将详细讲解如何在Tomcat中...

    opesnssl证书配置和使用1

    4. **SSL双向/单向认证**:双向认证要求客户端和服务器都需验证对方的身份,而单向认证只需服务器验证客户端。openssl可以通过不同的命令行选项来实现这两种认证模式。 5. **导入证书**:生成的证书需要导入到...

    自己整理的java服务推送实例(web聊天)

    2. **Java Web服务器**:通常我们会使用支持WebSocket的Java Web服务器,如Tomcat、Jetty等。这些服务器提供了WebSocket API供开发者使用。 3. **Spring框架**:Spring框架是Java开发中的常用工具,其Spring Boot子...

    WEB服务器上配置

    本文将详细介绍如何在WEB服务器上配置HTTPS环境,实现单向认证。 首先,单向认证是指客户端(通常是浏览器)验证服务器的身份,而服务器不需要验证客户端的身份。这种认证方式适用于大多数网站,因为它能够确保用户...

    超级有影响力霸气的Java面试题大全文档

    但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...

Global site tag (gtag.js) - Google Analytics