linux ssl 双向认证 脚本,SSL双向认证的例子
首先创建服务器端私有密钥和公共密钥
1, keytool -genkey -alias clientkey -keystore kserver.ks
密码: serverpass
2, keytool -export -alias serverkey -keystore kserver.ks -file server.crt
3, keytool -import -alias serverkey -file server.crt -keystore tclient.ks
密码: clientpublicpass
下面创建客户器端私有密钥和公共密钥
1, keytool -genkey -alias clientkey -keystore kclient.ks
密码: clientpass
2, keytool -export -alias clientkey -keystore kclient.ks -file client.crt
3, keytool -import -alias clientkey -file client.crt -keystore tserver.ks
密码: serverpublicpass
把服务器端产生的公共密钥放到客户端, 同样把客户端创建的公共密钥放到服务器端.
下面是服务器端代码:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.security.KeyStore;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.TrustManagerFactory;
public class SSLTestServer {
public static void main(String[] args) throws Exception {
SSLContext ctx = SSLContext.getInstance("SSL");
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
KeyStore ks = KeyStore.getInstance("JKS");
KeyStore tks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream("cert/kserver.ks"), "serverpass".toCharArray());
tks.load(new FileInputStream("cert/tserver.ks"), "serverpublicpass".toCharArray());
kmf.init(ks, "serverpass".toCharArray());
tmf.init(tks);
ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
SSLServerSocket serverSocket = (SSLServerSocket) ctx.getServerSocketFactory().createServerSocket(8443);
serverSocket.setNeedClientAuth(true);
while (true) {
try {
Socket s = serverSocket.accept();
InputStream input = s.getInputStream();
OutputStream utput = s.getOutputStream();
BufferedInputStream bis = new BufferedInputStream(input);
BufferedOutputStream bos = new BufferedOutputStream(output);
byte[] buffer = new byte[20];
int length = bis.read(buffer);
System.out.println("Receive: " + new String(buffer, 0, length).toString());
bos.write("Hello".getBytes());
bos.flush();
s.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
}
下面是客户端代码:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.KeyStore;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.TrustManagerFactory;
public class SSLTestClient {
public static void main(String[] args) throws Exception {
SSLContext ctx = SSLContext.getInstance("SSL");
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
KeyStore ks = KeyStore.getInstance("JKS");
KeyStore tks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream("cert/kclient.ks"), "clientpass".toCharArray());
tks.load(new FileInputStream("cert/tclient.ks"), "clientpublicpass".toCharArray());
kmf.init(ks, "clientpass".toCharArray());
tmf.init(tks);
ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
SSLSocket sslSocket = (SSLSocket) ctx.getSocketFactory().createSocket("localhost", 8443);
InputStream input = sslSocket.getInputStream();
OutputStream utput = sslSocket.getOutputStream();
BufferedInputStream bis = new BufferedInputStream(input);
BufferedOutputStream bos = new BufferedOutputStream(output);
bos.write("Hello".getBytes());
bos.flush();
byte[] buffer = new byte[20];
int length = bis.read(buffer);
System.out.println(new String(buffer, 0, length));
sslSocket.close();
}
}
常见的HTTPS传输, 不需要进行客户端认证, 也就是单向认证. 这时也就不需要创建客户端的私钥和公钥. 服务器端也只要配置一下服务器端的私钥即可, 当客户端浏览器访问时会生成一个证书文件,类似于上面创建的crt文件. 如果需要程序访问,可以通过这个crt文件生成一个keystore. 然后是用这个keystore作为trust keystore即可.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10742815/viewspace-589278/,如需转载,请注明出处,否则将追究法律责任。
linux ssl 双向认证 脚本,SSL双向认证的例子相关推荐
- SSL双向认证和SSL单向认证的流程和区别
refs: SSL双向认证和SSL单向认证的区别 https://www.jianshu.com/p/fb5fe0165ef2 图解 https 单向认证和双向认证! https://cloud.te ...
- Openssl 建立双向认证的 SSL/TLS 通信
话不多说,直接利用 Openssl 在两台 uBuntu 之间建立双向认证的 SSL/TLS 通信. 笔者使用的 Openssl 版本为 OpenSSL 1.1.1 11 Sep 2018 生成证书 ...
- SSL/TLS 双向认证(一) -- SSL/TLS工作原理
本文部分参考: https://www.wosign.com/faq/faq2016-0309-03.htm https://www.wosign.com/faq/faq2016-0309-04.ht ...
- SSL/TLS 双向认证(一) -- SSL/TLS 工作原理
本文部分参考: https://www.wosign.com/faq/faq2016-0309-03.htm https://www.wosign.com/faq/faq2016-0309-04.ht ...
- SSL双向认证和SSL单向认证的区别
双向认证 SSL 协议要求服务器和用户双方都有证书.单向认证 SSL 协议不需要客户拥有CA证书,具体的过程相对于上面的步骤,只需将服务器端验证客户证书的过程去掉,以及在协商对称密码方案,对称通话密钥 ...
- 什么是SSL双向认证,与单向认证证书有什么区别?
SSL/TLS 证书是用于用户浏览器和网站服务器之间的数据传输加密,实现互联网传输安全保护,大多数情况下指的是服务器证书.服务器证书是用于向浏览器客户端验证服务器,这种是属于单向认证的SSL证书.但是 ...
- netty中实现双向认证的SSL连接
1. 前期准备工作 双向证书认证的双方称为client和server,首先为client和server生成证书.由于仅仅是自己学习使用,因此可以在本地自建一个CA,然后用CA的证书分别签发client ...
- pythonssl双向认证_flas的双向ssl认证
免责声明 在我开始之前,我会注意到"伊曼纽尔·伊"的评论.如果首先在生产服务器或开发服务器上执行此操作,则需要考虑.例如,如果您使用的是Apache WebServer,那么可以从 ...
- Vyos OpenVPN (SSL TLS+User Auth) 本地PAM认证 SSLVPN服务器搭建
VYOS OpenVPN SSL TLS + User Auth + PAM认证多用户拨入 实现目标 1.安装环境 1.1.证书生成 1.2.用户认证脚本 3.OpenVPN Server配置 3.1 ...
- linux 锐捷客户端 脚本,基于802.1x的锐捷linux客户端认证方法(最新)
校园网的Linux用户大概都有这样的苦恼,如今大多数校园网都必须安装基于802.1X协议的认证软件才可以上网,也许windows操做系统的用户以为安装这样的软件上网,那是一件很简单的事情,可是对于li ...
最新文章
- 从库备份中恢复一张表
- 好消息,MaxtoCode完全支持2005BETA2版,多谢恩电提供的测试样例
- 1.在VS2010中文版中开发WP7程序
- java修改默认字符编码_设置默认的Java字符编码?
- 作者:​高晨旭(1990-),男,北京系统工程研究所研究实习员。
- comparator 字符串比较大小_java – 如何使用Comparator比较空值?
- 图片添加图片水印和文字水印
- WPF ListView展示层叠信息
- 马蜂窝等多家旅游平台针对肺炎疫情推出旅客保障措施
- pythonexcel计算横列总和-在python中,如何在字典中找到值的总和?每个键都有多个值...
- 移动组件到指定坐标_《我的世界》传送石碑组件 史蒂夫表示跑路的日子终于结束了...
- [object%20HTMLInputElement] 是什么意思?
- 机器翻译市场需求调研报告
- (时间表达式)定时任务Quartz 之 cron表达式及在线生成器
- mysql分组求和_mysql 行转列,对列的分组求和,对行求和
- PowerDesign license安装问题
- 寄生方式分类计算机病毒,计算机病毒寄生方式和感染途径分类
- 信息论与编码-python实现三种编码(香农编码,费诺编码,赫夫曼编码)
- 二维vector的输入
- Kubernetes 1.25 发布!博云带你玩转新特性
热门文章
- 当下垂直搜索引擎集锦一
- 谭松韵被造谣ee文件与服务器,黄磊何炅心疼谭松韵被造谣!从和张子枫相处看出人品!...
- 超低延时的H5直播,电子游戏互动控制直播,桌面远程控制直播方案
- 热议:CSS为什么这么难学?一定是你的方法不对
- 浅谈后缀自动机SAM
- 将苹果手机数据导入苹果手机苹果?如何传输苹果手机数据
- 【C++ 程序】 TVJ Complex Calculator (v 2.1) 复数计算器
- lmdb.Error: 路径 : ϵͳ�Ҳ���ָ����·����解决办法
- IOS开发之——TOM猫(19)
- C语言输出三阶魔方阵