关于java实现TLS socket的X509自签名证书的一次记录

news/2025/1/7 17:06:46/文章来源:https://www.cnblogs.com/immengxin/p/18652525

创建客户端和服务器端的证书文件通常涉及几个步骤,包括生成私钥、创建证书签名请求(CSR)、签发证书以及将这些信息打包到PKCS#12格式的文件中。以下是详细的步骤说明:

1. 安装 OpenSSL

首先,你需要安装 OpenSSL,它是一个开源的SSL/TLS工具包,可以用来生成密钥对和证书。

  • Windows: 可以从OpenSSL for Windows下载并安装。
  • macOS: 可以使用Homebrew安装,brew install openssl
  • Linux: 大多数Linux发行版可以通过包管理器安装,例如在Ubuntu上使用sudo apt-get install openssl

2. 生成私钥

为服务器和客户端分别生成私钥。每个私钥都是唯一的,并且是安全通信的基础。

# 为服务器生成私钥
openssl genrsa -out server.key 2048# 为客户端生成私钥
openssl genrsa -out client.key 2048

3. 创建证书签名请求 (CSR)

接下来,使用私钥创建CSR。这将用于向证书颁发机构(CA)请求签名证书。如果你是自己作为CA,那么你可以跳过这个步骤,直接为自己签发证书。

# 为服务器创建 CSR
openssl req -new -key server.key -out server.csr# 为客户端创建 CSR
openssl req -new -key client.key -out client.csr

在执行上述命令时,系统会提示你输入一些信息,如国家、省份、城市、组织名等。确保你提供的信息准确无误,因为它们会被包含在最终的证书中。

4. 签发自签名证书或通过 CA 签发

自签名证书

如果你不需要一个正式的CA来签署你的证书,可以自己作为CA签发证书。这是测试环境中的常见做法。

# 为服务器签发自签名证书
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt# 为客户端签发自签名证书
openssl x509 -req -days 365 -in client.csr -signkey client.key -out client.crt

通过 CA 签发

如果需要正式的CA签发,你需要将CSR提交给CA,并按照他们的指导完成证书签发过程。一旦收到CA返回的证书,将其保存为.crt文件。

5. 将私钥和证书打包成 PKCS#12 文件

最后一步是将私钥和相应的证书打包成PKCS#12格式的文件(.p12.pfx),以便于导入Java的KeyStore。

# 为服务器打包
openssl pkcs12 -export -clcerts -in server.crt -inkey server.key -out server.p12 -name "server"# 为客户端打包
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12 -name "client"

在执行以上命令时,你会被要求设置一个输出文件的密码。这个密码将在加载PKCS#12文件时使用,就像代码示例中那样。

6. 验证证书

确保你验证了生成的证书是否正确无误。

# 查看服务器证书信息
openssl x509 -in server.crt -text -noout# 查看客户端证书信息
openssl x509 -in client.crt -text -noout

7. 使用生成的文件

现在,你已经有了两个.p12文件,一个是客户端的,另一个是服务器端的。你可以将它们放在项目的资源目录中,并根据前面的代码示例进行配置。

请注意,在生产环境中,应该由受信任的第三方CA签发证书,而不是使用自签名证书,以确保通信的安全性和可靠性。此外,处理私钥和证书时应保持高度的安全性,避免泄露。

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

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

相关文章

PHP转换PDF时,因为PDF文档没有嵌入字体

问题描述 项目中,需要将PDF文档转为图像,使用Imagick扩展组件进行转换。结果在转换时,因为PDF文档没有嵌入字体,导致一部份文字无法显示出来。如下图片,下划线部份,下划线上面是有文字的,但是转换后,模糊部份的文字正常显示,下划线上面的文字是空白的。然后就是各种百…

C#+ WPF 实现蓝牙转WIFI计步上位机

前言 一个WIFI上位机,接收底层MPU6050数据,途中转蓝牙从机透传,到蓝牙主机直连WIFI,PC端UDP通信,实现三轴加速度数据传送和计步功能。 项目介绍 本项目基于.NET平台,使用WPF开发了一个应用程序,用于实现MPU6050传感器数据从蓝牙模块传输到主机,并通过WiFi以UDP协议接收…

水位监测识别报警摄像机

智能水位监测识别报警摄像机是保障水域安全的重要利器。其高效准确的监测能力和及时有效的报警功能,将为城市水域管理和安全防范提供重要支持,有助于减少因水灾而造成的损失。摄像头通过实时捕捉水面画面,并将数据传输至中央处理器进行分析。一旦系统检测到水位异常,如水位…

SQL Server Profiler的trc文件生成阻止.240108

很奇葩,sqlserver自动生成trc文件,每分钟一个,重启服务器也没用。解决思路:查询现在正在跑的trace进程select * from sys.fn_trace_getinfo(0);关闭C2审计功能EXEC sp_configure c2 audit mode, 0;重启数据库服务 再次查看,已经没了。然后删除数据盘所有的trc文件。EXEC s…

cas5配置redis.240108

​POM文件加载redis依赖,重新maven clean package<dependency><groupId>org.apereo.cas</groupId><artifactId>cas-server-support-redis-ticket-registry</artifactId><version>${cas.version}</version></dependency><d…

dockerfile实现tomcat以及java的war包自动部署.240108

1. 下载jdk和tomcat wget https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.93/bin/apache-tomcat-8.5.93.tar.gz wget https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz 2. vim Dockerfile FROM centos:latest MAINTAINER Amadeus # now add…

Centos中keytool不起作用的解决方法.240109

​keytool是Java开发中用于管理密钥和证书的工具,可以用于生成密钥、创建证书请求、导入和导出证书等操作。你可以在Oracle官网上下载和安装JDK,然后在JDK的 bin目录下找到 keytool 工具。 因此,我们首先要给centos装jdk yum -y install java-1.8.0-openjdk* 然后在执行keyt…

【npm】npm warn ERESOLVE overriding peer dependency——版本冲突,降级

这里警告的远远是由于 @eslint 和 eslint-loader@2.2.1 之间版本冲突。eslint-loader支持的eslint版本在`>=1.6.0 <7.0.0`。可用输入 npm list eslint 查看当前依赖的具体问题。 所有,我们可以给wsint降级,选择1.6.0~7.0.0(不包含7.0.0)之间的版本。输入 npm view es…

群晖 MariaDB10 开启远程登录.240109

​情况:MariaDB设置了TCP/IP的端口,但是还是无法进行远程访问。解决方法: 一、使用ssh登录群晖,并进入MariaDB安装目录 cd /volume1/@appstore/MariaDB10/usr/local/mariadb10/bin 二、使用root登录 MariaDB,然后进行修改 mysql -u root -p MariaDB [(none)]> use mysq…

软件最难的不是开发程序,而是需求.240109

最近几个月,关于人工智能的惊人文章在互联网泛滥。这也引发了很多人的担心——软件开发人员可能很快就会失业,被人工智能取代。他们想象所有的企业高管和产品研究人员将绕过大多数或所有的软件开发人员,直接要求人工智能构建他们想要或需要的东西。但作为一个拥有15年一线开…

项目管理不再是难题:一揽子解决方案助你轻松前行

项目管理中的痛点涉及多个方面,但通过优化资源分配、建立有效的沟通机制、加强时间管理、完善风险控制、简化变更管理以及加强利益相关者期望管理等措施,可以有效地解决这些痛点,确保项目的顺利进行和成功完成。一、项目管理的核心要素 ● 范围管理:明确项目的范围和目标,…

如何修改网站的模板?

修改网站的模板是提升网站外观和用户体验的重要步骤。以下是详细的步骤和建议:备份原始模板:在进行任何修改之前,确保备份原始模板文件。 使用版本控制系统(如Git)来管理文件变更。选择合适的工具:根据网站的技术栈选择合适的工具。常见的工具包括文本编辑器(如Notepad+…