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

双向认证服务

1、准备工作

A、证书导入
    导入ca.p12
    导入client.p12
    
B、服务器配置

<Connectorport="443"SSLEnabled="true"clientAuth="true"maxThreads="150"protocol="HTTP/1.1"scheme="https"secure="true"sslProtocol="TLS"keystoreFile="conf/server.p12"keystorePass="123456"keystoreType="PKCS12"truststoreFile="conf/ca.p12"truststorePass="123456"truststoreType="PKCS12"/>

2、服务验证

 3、代码验证

/*** 2009-5-20*/
package org.zlex.chapter11_2;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("PKCS12");// 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_2;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:/server.p12";/*** 信任库文件路径*/private String trustStorePath = "d:/ca.p12";/*** 访问地址*/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/496481.shtml

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

相关文章

利用 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;来次课外活动吧”的神奇邀请函打消了所有人的怀疑。根据从…

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

来源&#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 请问如何从头…

生命起源之谜: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…

jQuery 对话框 jQuery.plugin

jQuery 对话框 jQuery.plugin 强烈推荐对话框插件jquery.weebox.js&#xff0c;本站开源账务管理系统中使用的对话框组件&#xff0c;各种形式的对话框&#xff1a;确认、成功、警告、错误等 ………… 如下图的右下角&#xff1a; 账务管理系统(个人版)演示 图的右下角的框架就…

2018年聊天机器人状态报告

来源&#xff1a; 199IT互联网数据中心根据Drift、SurveyMonkey Audience、Salesforce和myclever的“2018年聊天机器人状态报告”&#xff0c;聊天机器人预计能够24小时为简单任务提供即时服务&#xff0c;但不是进行复杂查询的最佳渠道。聊天机器人尚未在消费者中找到广泛的吸…

PHP、MySQL 注入

Welcome to the NetSPI SQL Injection Wiki&#xff1a;https://sqlwiki.netspi.com/ 因为需要了解下 SQL 注入&#xff0c;就使用 PHP 自己写了一个只有一个网页的网站测试下&#xff0c;现在记录下过程。。。 直接使用的 KALI系统 (KALI官网&#xff1a;Kali Linux | Penetr…

争自动驾驶领头羊还是确保技术安全?欧美选择不同

来源&#xff1a;发掘新视界摘要&#xff1a;对于那些未知或有潜在危险的技术&#xff0c;欧洲更倾向于保护民众&#xff0c;而非是引领创新与进步。自优步自动驾驶汽车致人死亡事件发生之后&#xff0c;欧洲与美国对于技术的态度差异再度凸显&#xff0c;欧洲更倾向于加强监管…

菜鸟教程 之 JavaScript 教程

From&#xff1a;菜鸟教程 JavaScript&#xff1a;https://www.runoob.com/ W3School JavaScript 教程&#xff1a;http://www.w3school.com.cn/js/index.asp https://www.w3cschool.cn/javascript/ 廖雪峰官网 JavaScript 教程&#xff1a;https://www.liaoxuefeng.com/w…

关于Actionscript 3中给Flash传参数方法(一)

关于Actionscript 3中给Flash传参数方法&#xff08;一&#xff09; 今天在测试一个为Audi做Flash AD的时候&#xff0c;发现Audi提供的clicktag是Actionscript 2的代码&#xff0c;在Actionscript 3中是不被支持的&#xff0c;所以有去翻了Adobe Docs了。 在2.0中的clicktag代…

深度睡眠中,记忆如何被保持?

来源 &#xff1a;脑与智能丨公众号摘要&#xff1a;深度睡眠对记忆的巩固至关重要&#xff0c;与健康的睡眠相比&#xff0c;失眠会导致记忆力下降。深度睡眠中的慢波分为下降状态&#xff08;down state&#xff09;和上升状态&#xff08;up state&#xff09;&#xff0c;在…

SQL 语句执行顺序

From&#xff1a;http://www.jellythink.com/archives/924 Oracle-SQL语句执行原理和完整过程详解&#xff1a;https://wenku.baidu.com/view/398bc427964bcf84b8d57b00.html 详解一条 SQL 语句的执行过程&#xff1a;http://www.cnblogs.com/cdf-opensource-007/p/6502556.…

无人车巨头每天都在做相同的事情:不惜血本做高精地图是为何?

来源&#xff1a;腾讯科技摘要&#xff1a;很多人都关注无人车的发展&#xff0c;殊不知无人车技术中&#xff0c;有十分重要的一环&#xff0c;是无人车的高精地图。高精地图成为无人车竞赛中的关键一环目前&#xff0c;很多家无人驾驶公司都在做着同样的事情&#xff1a;绘制…

phaser java_死磕 java同步系列之Phaser源码解析

问题(1)Phaser是什么&#xff1f;(2)Phaser具有哪些特性&#xff1f;(3)Phaser相对于CyclicBarrier和CountDownLatch的优势&#xff1f;简介Phaser&#xff0c;翻译为阶段&#xff0c;它适用于这样一种场景&#xff0c;一个大任务可以分为多个阶段完成&#xff0c;且每个阶段的…

人工智能将为传统制造业带来什么?

来源 &#xff1a;数据科学与人工智能“物理世界”&#xff08;以制造业设备所代表&#xff09;和“数字世界”&#xff08;由人工智能、传感器等技术代表&#xff09;的碰撞催生了制造业的巨大的转变。两个世界的融合将为下一轮经济发展注入新的动能。以人工智能为代表的新技术…