SSlSocket和SSLServerSocket的学习 jks,bks的使用

article/2025/10/15 14:12:47

1. 生成bks与jks密钥证书

1.1 jks证书生成

1.1.1 生成服务端JKS秘钥与证书指令

keytool -genkeypair -alias myserver -keystore myserver.jks

1.1.2 服务器导出证书server.cer

keytool -exportcert -alias myserver -keystore myserver.jks -file trust.cer		

1.1.3从证书导出信任客户端

keytool -importcert -file trust.cer -keystore trust.jks

1.2bks证书生成

1.2.1 安装所需环境以及配置

1.2.1.1 下载依赖包

点我下载(csdn下载)快速

点我下载(maven下载)

1.2.1.2 将下载好的jar包放到java环境中去 具体路径如下 %JAVAHOME%/jre/lib/ext

在这里插入图片描述

1.2.1.3 添加安全加密环境配置

在这里插入图片描述

s e c u r i t y . p r o v i d e r . X = o r g . b o u n c y c a s t l e . j c e . p r o v i d e r . B o u n c y C a s t l e P r o v i d e r / / 数 字 x 为 上 一 个 p r o v i d e r 的 y + 1 security.provider.X=org.bouncycastle.jce.provider.BouncyCastleProvider //数字x为上一个provider的y+1 security.provider.X=org.bouncycastle.jce.provider.BouncyCastleProvider//xprovidery+1

1.2.1.4 重启

1.2.2 生成客户端bks密钥与证书指令

keytool -genkey -keystore client.bks -storepass 密码 -keyalg RSA -keypass 密码 -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider

1.2.3 导出客户端证书client.cer

keytool -exportcert -keystore client.bks -storepass 密码 -storetype BKS -file client.cer -provider org.bouncycastle.jce.provider.BouncyCastleProvider

1.2.4 把证书导入信任库

keytool -import -keystore tserver.bks -storetype BKS -storepass 密码 -file client.cer

1.3 总结

​ 我们得到了一下几个文件以及文件密码

​ myserver.jks : 服务器端的jks密钥(KeyManager) client.bks: 客户端的bks密钥(KeyManager)

​ trust.cer :服务器端信任证书 client.cer: 客户端信任证书。

​ trust.jks:服务器端信任的客户端 tserver.bks :客户端信任的服务器端

2. 代码

2.1 服务器端代码

package Service;import org.bouncycastle.jce.provider.BouncyCastleProvider;import javax.net.ssl.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.security.KeyStore;
import java.util.Properties;public class Service {private static final int port = 9999;public static SSLServerSocket createServerSocket() throws Exception {KeyStore ks = KeyStore.getInstance("jks");KeyStore bks = KeyStore.getInstance("bks", new BouncyCastleProvider());ClassLoader cl = Service.class.getClassLoader();InputStream tis = cl.getResourceAsStream("tserver.bks");InputStream input = cl.getResourceAsStream("myserver.jks");Properties properties = new Properties();properties.load(cl.getResourceAsStream("server.properties"));String server_jsk = properties.getProperty("server_jsk");String cer_trust = properties.getProperty("cer_trust");String client_trust = properties.getProperty("client_trust");bks.load(tis, client_trust.toCharArray());ks.load(input, server_jsk.toCharArray());KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");TrustManagerFactory tks = TrustManagerFactory.getInstance("SunX509");tks.init(bks);kmf.init(ks, cer_trust.toCharArray());SSLContext context = SSLContext.getInstance("TLSv1.2");context.init(kmf.getKeyManagers(), tks.getTrustManagers(), null);input.close();SSLServerSocketFactory ssf = context.getServerSocketFactory();return (SSLServerSocket) ssf.createServerSocket(port);}public static void main(String[] args) throws Exception {final ServerSocket ss = createServerSocket();System.out.println("ssl server startup at port " + port);while (true) {final Socket s = ss.accept();new Thread(() -> {InputStream inputStream = null;try {inputStream = s.getInputStream();byte[] b = new byte[1024];inputStream.read(b);System.out.println(new String(b));} catch (Exception e) {e.printStackTrace();} finally {try {inputStream.close();s.close();} catch (IOException e) {e.printStackTrace();}}}).start();}}}

2.2 客户端代码

package Service;import javax.net.SocketFactory;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.TrustManagerFactory;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.security.KeyStore;
import java.util.Properties;import org.bouncycastle.jce.provider.*;public class Client {private static final int port = 9999;public static SSLSocket createSocket(String host) throws Exception {KeyStore ks = KeyStore.getInstance("jks");KeyStore bks = KeyStore.getInstance("bks", new BouncyCastleProvider());ClassLoader cl = Client.class.getClassLoader();Properties pt = new Properties();InputStream tinput = cl.getResourceAsStream("client.bks");InputStream input = cl.getResourceAsStream("trust.jks");KeyManagerFactory instance = KeyManagerFactory.getInstance("SunX509");TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");pt.load(cl.getResourceAsStream("client.properties"));bks.load(tinput,pt.getProperty("client_bks").toCharArray());ks.load(input, pt.getProperty("server_trust").toCharArray());instance.init(bks,pt.getProperty("crt_trust").toCharArray());tmf.init(ks);SSLContext context = SSLContext.getInstance("TLSv1.2");context.init(instance.getKeyManagers(), tmf.getTrustManagers(), null);input.close();SocketFactory sf = context.getSocketFactory();return (SSLSocket) sf.createSocket(host, port);}public static void main(String[] args) throws Exception {Socket s = createSocket("127.0.0.1");byte[] b = new byte[1024];System.out.println("创建连接!");OutputStream outputStream = s.getOutputStream();outputStream.write("hello world".getBytes());outputStream.close();s.close();}}

2.3 软件结构

在这里插入图片描述

3.实验结果

Client端:

在这里插入图片描述

Service端:

在这里插入图片描述


http://chatgpt.dhexx.cn/article/vHTaThss.shtml

相关文章

Android——.pem格式证书转换为.bks

第一步:先下载“bcprov-ext-jdk xxx.jar”,下载地址:https://www.bouncycastle.org/latest_releases.html 第二步:将下载好的jar文件放到“C:\Program Files (x86)\Java\jre1.8.0_321\lib\ext”路径中 第三步:在“C:…

android 生成bks_Android Https证书crt或者cer转换成bks文件

一:下载bcprov-jdk15on-160.jar 下载bcprov-jdk15on-160.jar 二:打开命令行 keytool -importcert -v -trustcacerts -alias 位置1 \ -file 位置2 \ -keystore 位置3 -storetype BKS \ -providerclass org.bouncycastle.jce.provider.BouncyCastleProvide…

Win系统下将CER文件转成BKS文件

如何在Win下转换CER证书文件? 通过JDK1.8 实现CER文件转BKS文件 通过JDK文件的keytool.exe文件进行转换。原本我使用的是JDK11,发现居然没有 jre文件夹 于是我使用了 CMD 命令 需要以 管理员权限才能够生成 bin\jlink.exe --module-path jmods --add-mod…

java不支持bks,java不支持bks

java不支持bks [2021-02-08 08:35:23] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐:《PH…

生成.bks格式文件

最近公司项目需要换成https请求,负责服务器的同事给了我证书,搞了一天都没成功,老是挂掉。(如果不太清楚可以先搜索下SSL握手)后来在网上才看到,android不支持jdk默认编译的“JKS”格式,只支持“…

贝塔分布,伽玛分布和指数分布的关系

统计计算课本36面。 统计计算课本155面 https://www.zhihu.com/question/45397840 https://blog.csdn.net/tangwing/article/details/87006687

【理解】Beta贝塔分布

贝塔分布是概率的概率分布,在不知道某一事件具体概率是多少时,它给出了所有概率出现的可能性。 举个例子:对于抛硬币,我们知道硬币正面朝上是服从二项分布的 X ∼ b ( n , p ) X \sim b(n, p) X∼b(n,p),我们为了用大量…

直观理解Beta分布

原作者:DavidRobinson 原文链接:http://varianceexplained.org/statistics/beta_distribution_and_baseball/ 像正态分布、二项分布和均匀分布这样的一些分布,在统计学习当中往往会结合一些现实世界中的实际应用来解释,因此对…

贝塔分布例子(转)

古语有云,“学好数理化,走遍天下都不怕。” 人工智能时代尤其如此。 比如,写上几句基础的数学概念,天上就能掉下一个工作来……这是真事。 学概率的时候,我们会反复来理解什么是正态分布,什么是均匀分布&am…

小孩都看得懂的贝塔分布

全文共 1897 字,22 幅图, 预计阅读时间 10 分钟。 本文是「小孩都看得懂」系列的第十五篇,本系列的特点是内容不长,碎片时间完全可以看完,但我背后付出的心血却不少。喜欢就好! 小孩都看得懂的神经网络小孩…

beta分布介绍

相信大家学过统计学的都对 正态分布 二项分布 均匀分布 等等很熟悉了,但是却鲜少有人去介绍beta分布的。 用一句话来说,beta分布可以看作一个概率的概率分布,当你不知道一个东西的具体概率是多少时,它可以给出了所有概率出现的可能…

泊松过程、伽马分布、贝塔分布及狄利克雷分布

泊松过程、伽马分布、贝塔分布及狄利克雷分布 1.泊松过程1.1Poisson过程的定义1.2Poisson过程的应用 2.伽马分布2.1伽马分布的定义2.2伽马分布的性质2.3伽马分布与其他分布的关系 3.贝塔分布3.1贝塔分布的定义3.2贝塔分布的图形3.3贝塔分布的应用 4.狄利克雷分布4.1狄利克雷分布…

贝叶斯分析——分布之分布(beta分布)

转自:http://blog.sciencenet.cn/blog-677221-1049350.html 贝叶斯与逆概率问题 对于“白球黑球”的概率问题。概率问题可以正向计算,也能反推回去。 (1)盒子里有10个球,黑白两种颜色,如果我们知道10个球中5白5黑&a…

Beta分布(Beta Distribution)

定义: beta分布可以看作一个概率的概率分布,当你不知道一个东西的具体概率是多少时,它可以给出了所有概率出现的可能性大小。 举一个简单的例子,熟悉棒球运动的都知道有一个指标就是棒球击球率(batting average),就是…

推导Beta分布公式

Beta分布可以用于拟合各种不同的分布,网上各种资料对于Beta分布的原理着墨较多,却少有推导Beta分布公式的,所以,推导Beta分布公式如下: 设一组随机变量 ,将这n个随机变量排序后得到顺序统计量 &#xff0c…

Beta 分布

Beta 函数 B ( α , β ) ≜ ∫ 0 1 x α − 1 ( 1 − x ) β − 1 d x \Beta(\alpha, \beta) \triangleq \int_0^1 x^{\alpha-1}(1-x)^{\beta-1}dx B(α,β)≜∫01​xα−1(1−x)β−1dx 其中 α , β > 0 \alpha, \beta > 0 α,β>0 Beta 函数与 Gamma 函数 B ( α…

如何理解beta分布?

相信大家学过统计学的都对 正态分布 二项分布 均匀分布 等等很熟悉了,但是却鲜少有人去介绍beta分布的。 用一句话来说,beta分布可以看作一个概率的概率分布,当你不知道一个东西的具体概率是多少时,它可以给出了所有概率出现的可…

原创 | 一文读懂正态分布与贝塔分布

本文约2300字,建议阅读5分钟 本文通过案例介绍了正态分布和贝塔分布的概念。 正态分布 正态分布,是一种非常常见的连续概率分布,其也叫做常态分布(normal distribution),或者根据其前期的研究贡献者之一高斯的名字来称…

带你理解beta分布

#beta分布介绍 相信大家学过统计学的都对 正态分布 二项分布 均匀分布 等等很熟悉了,但是却鲜少有人去介绍beta分布的。 用一句话来说,beta分布可以看作一个概率的概率分布,当你不知道一个东西的具体概率是多少时,它可以给出了所…

深入理解什么是Beta分布

例一 Beta分布是一种描述概率的概率分布,这句话可能有些绕口,看一个例子: 以抛硬币为例,如果硬币是均匀的,并且正面朝上的概率记为p(p0.5),那么每一次抛硬币都可以看做是一次伯努利…