Java加密与解密的艺术~安全协议~单向认证服务

1、准备工作

A、域名绑定
在hosts文件末尾追加
127.0.0.1  www.zlex.org

B、证书导入
浏览器导入自签名证书文件zlex.cer

C、服务器配置
配置SSL/TLS 单向认证

<Connectorport="443"SSLEnabled="true"clientAuth="false"maxThreads="150"protocol="HTTP/1.1"scheme="https"sslProtocol="TLS"keystoreFile="conf/zlex.keystore"keystorePass="123456"/>

        为使得HTTPS协议配置生效,我们需要将密钥库文件参数keystoreFile指向密钥库文件,并设定密钥库密钥参数keystorePass,密钥库类型参数keystoreType默认值"JKS"。

        如果不显示配置信任库参数,信任库文件参数truststoreFile默认指向密钥库文件,信任库密码
参数truststorePass默认指向密钥库密码,信任库类型参数truststoreType默认值"JKS"。

        客户端验证参数clientAuth,默认值"false"。构建双向认证服务时需要设置为"true",并修改密钥库参数和信任库参数。

2、服务验证

<%@ page languange="java" contentType="text/html;charset=UTF-8"%>
<%@ page import="java.util.Enumeration" %>
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"><title>zlex.org</title></head><body><p>request属性信息</p><pre><%for(Enumeration en = request.getAttributeNames();en.hasMoreElements();) {String name = (String) en.nextElement();out.println(name);out.println(" = " + request.getAttribute(name));out.println();}%></pre></body>
</html>

javax.servlet.request.ssl_session:当前SSL/TLS协议的会话ID。
javax.servlet.request.key_size:当前加密算法所使用的密钥长度。
javax.servlet.request.cipher_suite:当前SSL/TLS协议所使用的加密套件。

 

3、代码验证

单向认证https

/*** 2009-5-20*/
package org.zlex.chapter11_1;import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.SecureRandom;import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManagerFactory;/*** HTTPS组件* * @author 梁栋* @version 1.0*/
public abstract class HTTPSCoder {/*** 协议*/public static final String PROTOCOL = "TLS";/*** 获得KeyStore* * @param keyStorePath*            密钥库路径* @param password*            密码* @return KeyStore 密钥库* @throws Exception*/private static KeyStore getKeyStore(String keyStorePath, String password)throws Exception {// 实例化密钥库KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());// 获得密钥库文件流FileInputStream is = new FileInputStream(keyStorePath);// 加载密钥库ks.load(is, password.toCharArray());// 关闭密钥库文件流is.close();return ks;}/*** 获得SSLSocektFactory* * @param password*            密码* @param keyStorePath*            密钥库路径* @param trustStorePath*            信任库路径* @return SSLSocketFactory* @throws Exception*/private static SSLSocketFactory getSSLSocketFactory(String password,String keyStorePath, String trustStorePath) throws Exception {// 实例化密钥库KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());// 获得密钥库KeyStore keyStore = getKeyStore(keyStorePath, password);// 初始化密钥工厂keyManagerFactory.init(keyStore, password.toCharArray());// 实例化信任库TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());// 获得信任库KeyStore trustStore = getKeyStore(trustStorePath, password);// 初始化信任库trustManagerFactory.init(trustStore);// 实例化SSL上下文SSLContext ctx = SSLContext.getInstance(PROTOCOL);// 初始化SSL上下文ctx.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), new SecureRandom());// 获得SSLSocketFactoryreturn ctx.getSocketFactory();}/*** 为HttpsURLConnection配置SSLSocketFactory* * @param conn*            HttpsURLConnection* @param password*            密码* @param keyStorePath*            密钥库路径* @param trustKeyStorePath*            信任库路径* @throws Exception*/public static void configSSLSocketFactory(HttpsURLConnection conn,String password, String keyStorePath, String trustKeyStorePath)throws Exception {// 获得SSLSocketFactorySSLSocketFactory sslSocketFactory = getSSLSocketFactory(password,keyStorePath, trustKeyStorePath);// 设置SSLSocketFactoryconn.setSSLSocketFactory(sslSocketFactory);}
}

单向认证示例

/*** 2009-5-20*/
package org.zlex.chapter11_1;import static org.junit.Assert.*;import java.io.DataInputStream;
import java.net.URL;import javax.net.ssl.HttpsURLConnection;import org.junit.Test;/*** HTTPS测试* * @author 梁栋* @version 1.0*/
public class HTTPSCoderTest {/*** 密钥库/信任库密码*/private String password = "123456";/*** 密钥库文件路径*/private String keyStorePath = "d:/zlex.keystore";/*** 信任库文件路径*/private String trustStorePath = "d:/zlex.keystore";/*** 访问地址*/private String httpsUrl = "https://www.zlex.org/ssl/";/*** HTTPS验证* * @throws Exception*/@Testpublic void test() throws Exception {// 建立HTTPS链接URL url = new URL(httpsUrl);HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();// conn.setRequestMethod(method);// 打开输入输出流conn.setDoInput(true);// conn.setDoOutput(true);// 为HttpsURLConnection配置SSLSocketFactoryHTTPSCoder.configSSLSocketFactory(conn, password, keyStorePath,trustStorePath);// 鉴别内容长度int length = conn.getContentLength();byte[] data = null;// 如果内容长度为-1,则放弃解析if (length != -1) {DataInputStream dis = new DataInputStream(conn.getInputStream());data = new byte[length];dis.readFully(data);dis.close();System.err.println(new String(data));}conn.disconnect();// 验证assertNotNull(data);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 3des加密_Java使用3DES加密解密的流程 - 3des加密解密详细解释

Java使用3DES加密解密的流程①传入共同约定的密钥(keyBytes)以及算法(Algorithm)&#xff0c;来构建SecretKey密钥对象SecretKey deskey new SecretKeySpec(keyBytes&#xff0c; Algorithm);②根据算法实例化Cipher对象。它负责加密/解密Cipher c1 Cipher.getInstance(Algor…

解决spring和struts配合问题

最近因为做weboa系统,我采用了strutsspringhibernate的整体架构,我按照目前网上流行的这方面的配置文件在web.xml中加入了: <param-name>contextconfiglocation</param-name> 【程序编程相关:struts中配置过滤文件&#xff01;】 <context-param> 【推荐阅…

Python 并行分布式框架 Celery

Celery 官网&#xff1a;http://www.celeryproject.org Celery 官方文档英文版&#xff1a;http://docs.celeryproject.org/en/latest/index.html Celery 官方文档中文版&#xff1a;http://docs.jinkan.org/docs/celery celery配置&#xff1a;http://docs.jinkan.org/docs/c…

java判断是否是路径_java判断是否是目录

java判断是否是目录&#xff1a;/*** 创建目录** param path*/public static void CreatFileDir(String path) {try {File file new File(path);if(file.getParentFile().isDirectory()){//判断上级目录是否是目录if(!file.exists()){ //如果文件目录不存在file.mkdirs(); //创…

中国数字化进程比发达国家快,小程序让我感到自豪 | IT领袖峰会

作者&#xff1a; 张驰2018年3月25日上午举办的第10届2018中国&#xff08;深圳&#xff09;IT领袖峰会上&#xff0c;腾讯公司董事会主席兼首席执行官发表了 “数字中国的机遇与探索” 主题演讲。在演讲中表示&#xff0c;不管什么产业都是需要科技来对它进行改造升级、转型。…

Java加密与解密的艺术~安全协议~双向认证服务

双向认证服务 1、准备工作 A、证书导入 导入ca.p12 导入client.p12 B、服务器配置 <Connectorport"443"SSLEnabled"true"clientAuth"true"maxThreads"150"protocol"HTTP/1.1"scheme"https"sec…

DataBinder.Eval的基本格式 效率 比较

<%#eval%>是单方向的资料连接 <%#bind%> 双方向的资料连接 <%#eval%>是只读的,你看到的那些无法更新数据的数据显示控件,可以用这个 <%#bind%> 不但可读,而且可写,那些可更新数据库的数据绑定控件,用这个 <%# DataBinder.Eval(Container.DataItem,&…

利用 Celery 构建 Web 服务的后台任务调度模块

来源&#xff1a;http://www.tuicool.com/articles/Enaeymm 任务队列在 Web 服务里的应用 在 Web2.0 后的时代&#xff0c;社交网站、搜索引擎的的迅猛发展对 Web 服务的后台管理系统提出了更高的需求。考虑几个常见的使用场景&#xff1a; 社交网站的用户在其主页发布了一组新…

java元素符号是什么_Java 代码中 @ 符号是什么意思?

展开全部annotation。Annotation&#xff0c;是Java5的新特性&#xff0c;下面是Sun的Tutorial的描述&#xff0c;因为是英文&#xff0c;这里我翻译下&#xff0c;希望能够比较清晰32313133353236313431303231363533e58685e5aeb931333264633435的描述一下Annotation的语法以及…

风景这边独好的AI大年,百度亚马逊等巨头第一季度成绩单怎么样?

苹果春季新品发布会邀请函来源&#xff1a;遇见人工智能该来的还是来了&#xff0c;但是那又如何&#xff1f;这句话是送给苹果的。本以为这个季度不会再有新品发布的苹果&#xff0c;却用一张主打“同学们&#xff0c;来次课外活动吧”的神奇邀请函打消了所有人的怀疑。根据从…

Java加密与解密的艺术~数字证书~证书使用openssl

证书工具 /*** 2009-5-20*/ package org.zlex.chapter10_2;import java.io.FileInputStream; import java.security.KeyStore; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Signature; import java.security.cert.Certificate; i…

Run-time system与虚拟机

Run-time system与虚拟机 一个Run-time系统&#xff0c;由一个执行引擎&#xff08;Execution Engine&#xff09;、一个机器级的调试器&#xff08;Debugger&#xff09;、一个汇编器&#xff08;Assembler&#xff09;和与之配套的开发工具&#xff08;Tools&#xff09;组成…

最近火了的自动驾驶全球产业链全景图

来源&#xff1a;传感器技术摘要&#xff1a;目前自动驾驶已经发展的很快&#xff0c;除了特斯拉和奥迪以外&#xff0c;很多豪车都引进了自动驾驶技术。下面来盘点一下自动驾驶产业链&#xff1a;首先看一下自动驾驶的等级标准&#xff1a;1、英特尔&#xff1a;Mobileye Alt…

java get set 注解_java技能提升,用Lombok甩掉get和set,让代码变得更简洁

前言前几天有个新来的同事(实习生)惊讶的对我说&#xff1a;我们的代码里好多错误&#xff0c;我的程序本地都启动不了。我一脸懵逼的质问他&#xff1a;目前线上的代码&#xff0c;怎么会有问题吗&#xff1f;他不服气的说&#xff1a;你来看嘛&#xff0c;就是有问题&#xf…

.pfx 证书和 .cer 证书

证书系列&#xff1a; 1&#xff1a;.pfx 证书和 .cer 证书 2&#xff1a;导入pfx证书 通常情况下&#xff0c;作为文件形式存在的证书一般有三种格式&#xff1a; 第一种&#xff1a;带有私钥的证书&#xff0c;由Public Key Cryptography Standards #12&#xff0c;PKCS#1…

HTML5、CSS、CSS3、SCSS (SASS) 相关教程

1、HTML5 教程 W3School HTML5 教程&#xff1a;http://www.w3school.com.cn/html5/index.asp 菜鸟网站 HTML5教程&#xff1a;http://www.runoob.com/html/html5-intro.html 知乎 零基础如何迅速学习HTML&#xff1a;https://www.zhihu.com/question/27018083 请问如何从头…

连接查询_左连接/右连接/全连接的区别

介绍表连接&#xff0c;更确切的说是inner joins內连接&#xff0e; 內连接仅选出两张表中互相匹配的记录&#xff0e;因此&#xff0c;这会导致有时我们需要的记录没有包含进来。 为更好的理解这个概念&#xff0c;我们介绍两个表作演示。苏格兰议会中的政党表(party)和议员表…

java getclass 相等_java使用反射比较两个bean对象属性值是否相等

import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.HashMap;import java.util.Map;import org.apache.log4j.Logger;public class DomainEquals {/*** 日志操作类*/private static Logger logger Logger.getLogger(DomainEquals.class);publi…

生命起源之谜:RNA世界假说将迎来终结?

○ 流行的理论认为&#xff0c;生命起源于物质丰富的化学汤&#xff0c;而 RNA 是化学汤中最初的自我复制单元。但是&#xff0c;多肽和RNA混合起来或许会更高效。 | 图片来源&#xff1a;Novikov Aleksey来源&#xff1a;科学出版社 撰文&#xff1a;Jordana Cepelewicz 翻…

PHP 学习路线

PHP 官网文档(中文)&#xff1a;https://www.php.net/manual/zh/langref.php ThinkPhp (官方手册、入门教程)&#xff1a;https://sites.thinkphp.cn/1556331 ​W3School PHP 教程&#xff1a;http://www.w3school.com.cn/php/index.asp w3cschool (在线教程&技术文档)&am…