Java生成SSL证书

简介: JAVA生成SSL证书,可以在HTTPS中使用

Java-big

1. 背景

开发环境或者测试环境,有的时候需要用到 HTTPS ,在时间和成本上考虑,我们利用 Java 密码体系结构(JCA, Java Cryptography Architecture) 完成建设可用的加密通信库。

利用 Java 自带 keytool.exe 生成证书, Keytool 是一个 Java 数据证书的管理工具,在命令行方式下,生成服务器证书申请文 CSR ,然后到 CA 签发服务器证书。

2. 演示环境

  • Windows 10
  • Jdk 1.8.0.131

3. 命令

  • genkey:定义将要创建一个新的密钥
  • alias:别名, alias ,不区分大小写
  • keyalg:指定加密的算法,这里是 RSA
  • keystore:指定密钥保存路径,在 D:盘目录下的 Code 文件中
  • dname:表示密钥的 Distinguished Names
  • keypass:私钥的密码
  • storepass:密钥库密码
  • validity:创建的证书有效期,单位为 天
  • list:列出证书
  • rfc:可编码方式打印证书
  • v:显示详细信息
  • import:将已签名数字证书导入密钥库
  • export:将别名指定的证书导出到文件
  • keysize:指定密钥长度
  • delete:删除密钥库中某条目
  • file:参数指定导出到文件的文件名
  • keypasswd:修改密钥库中指定条目的密码
  • storepasswd:修改密钥库的密码

4. 创建证书


keytool -genkey -alias eviltop -keyalg RSA -keystore D:\Code\eviltop.keystore -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass 123456 -storepass 123456 -validity 180

当不指定 keypassstorepass ,创建密钥过程中需要手工输入。

20220813223812

5. 查看证书

5.1. 显示详细

~~

keytool -list -v -keystore eviltop.keystore -storepass 123456

$ keytool -list -v -keystore eviltop.keystore -storepass 123456
密钥库类型: PKCS12
密钥库提供方: SUN

您的密钥库包含 1 个条目

别名: eviltop
创建日期: 2022年8月13日
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN
发布者: CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN
序列号: 2bce8e3
生效时间: Sat Aug 13 22:38:02 CST 2022, 失效时间: Thu Feb 09 22:38:02 CST 2023
证书指纹:

     SHA1: 76:60:92:F3:44:22:39:4F:66:B8:F1:B2:7B:11:BF:C6:66:AE:56:1F
     SHA256: 19:FD:21:B9:C9:51:BA:D9:82:3F:F6:C3:69:59:2D:99:E8:19:32:2C:05:46:7F:64:76:AB:A0:89:9E:38:20:8D

签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

扩展:




### 5.2. 编码打印

keytool -list -rfc -keystore eviltop.keystore -storepass 123456

$ keytool -list -rfc -keystore eviltop.keystore -storepass 123456
密钥库类型: PKCS12
密钥库提供方: SUN

您的密钥库包含 1 个条目

别名: eviltop
创建日期: 2022年8月13日
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
-----BEGIN CERTIFICATE-----
MIIDZTCCAk2gAwIBAgIEArzo4zANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJD
TjELMAkGA1UECBMCU0gxCzAJBgNVBAcTAlNIMRIwEAYDVQQKEwlsb2NhbGhvc3Qx
EjAQBgNVBAsTCWxvY2FsaG9zdDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTIyMDgx
MzE0MzgwMloXDTIzMDIwOTE0MzgwMlowYzELMAkGA1UEBhMCQ04xCzAJBgNVBAgT
AlNIMQswCQYDVQQHEwJTSDESMBAGA1UEChMJbG9jYWxob3N0MRIwEAYDVQQLEwls
b2NhbGhvc3QxEjAQBgNVBAMTCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQAD
ggEPADCCAQoCggEBAIXMJuibBSyK60r+QMt9aqbrcSH/Esja31cbujh7DRJdjRgv
6c6d93JGQhzBe0mvWUnshi3KhmRCr44S2ZRtGk+UIEK+/cJWRgQzT3GFkNUe6pUh
dSe31g740409iu96/NihI2GjbsYJHsgsRktXBS8Wk7AjJlp2tFEb88d2wK/Ul3wW
Z/cuZnbed4x51htKOosyrLhtGM8QOXZfhNgAoVGY61eVhp5SB/TL4o9XnSaZsKfM
L/UV6QXmgrqsbyH7MLQCT6E/Hr7wW3lnwsSpiNg/49ETxYlS4Fj6N/O7rH4HFnWx
RXHKgFuKGsj7cZ0cELbTaydG8CqdptGybVkA3dECAwEAAaMhMB8wHQYDVR0OBBYE
FJlqY0G6hbf1+D9Q3vg18Z+2mI51MA0GCSqGSIb3DQEBCwUAA4IBAQAoskcTy9Kl
5iOMiQTyu71TEY48wx94ajqdRrdLm5frKawh115lGUhDEz+w+NAO+dGirNHuoyXf
Bl2G7qUVF6rbNVGHrwUlCdVFLD02l2nLVvqjQEnicxU6P5IBwxBHhbQfKEdFOETI
jr8gQKshDNgO+C6ugktnLfSNkiMs6UYeySWcZQDetZJbmts7N6mbpZW/h1Looku5
IJRkfwL5xEStRcOM1aEjIrATKveZQfbDPFQCpJmTfktoa1K4pob22/FeOPkSz35W
EJEp4eOFY/0kir4oacwyada1PUocklCJ+iiTLwLtzrue5upzBaFikyyhmtGiuT2p
NApthnwtHmuv
-----END CERTIFICATE-----




## 6. 导入导出证书

### 6.1. 导出

keytool -export -alias eviltop -file ./eviltop.crt -keystore ./eviltop.keystore -storepass 123456


![20220813224758](https://abram.oss-cn-shanghai.aliyuncs.com/blog/cia/20220813224758.png)

### 6.2. 导入

keytool -import -alias eviltop -file ./eviltop.crt -keystore ./eviltop.keystore -storepass 123456


## 7. 修改密码

### 7.1. 修改密钥库

keytool -storepasswd -keystore ./eviltop.keystore -storepass 123456 -new 567890


### 7.2. 修改密钥库指定条目

keytool -keypasswd -alias eviltop -keypass 123456 -new 654321 -storepass 567890 -keystore ./eviltop.keystore


## 8. 删除密码

keytool -delete -alias eviltop -keystore "D:\Environment\JDK\1.8.0_301\jre\lib\security\cacerts" -storepass changeit

目录
相关文章
|
关系型数据库 MySQL Java
Mysql开启ssl加密协议及Java客户端配置操作指南
本文主要讲述的是Mysql开启了ssl协议之后,Java客户端如何正确的链接Mysql访问数据
Mysql开启ssl加密协议及Java客户端配置操作指南
|
安全 Java 数据库连接
Java报错javax.net.ssl.SSLException MESSAGE: closing inbound before receiving peer‘s close_notify解决方法
Java报错javax.net.ssl.SSLException MESSAGE: closing inbound before receiving peer‘s close_notify解决方法
Java报错javax.net.ssl.SSLException MESSAGE: closing inbound before receiving peer‘s close_notify解决方法
|
Java 网络安全 数据安全/隐私保护
【Java异常】Unrecognized SSL message, plaintext connection?https请求遇到异常分析
【Java异常】Unrecognized SSL message, plaintext connection?https请求遇到异常分析
3444 0
|
Java 网络安全 Maven
Exception in thread "main" java.lang.NoSuchMethodError: okhttp3.OkHttpClient$Builder.sslSocketFactory(Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/X509TrustManager;)Lokhttp3/OkHttpClient$Builder; 问题处理
【10月更文挑战第26天】Exception in thread "main" java.lang.NoSuchMethodError: okhttp3.OkHttpClient$Builder.sslSocketFactory(Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/X509TrustManager;)Lokhttp3/OkHttpClient$Builder; 问题处理
904 2
|
Java 网络安全
Java 信任所有SSL证书(解决PKIX path building failed问题)
Java 信任所有SSL证书(解决PKIX path building failed问题)
28150 3
|
算法 Java 测试技术
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
2628 1
|
安全 Java 关系型数据库
Java连接Mysql SSL初始化失败
Java连接Mysql SSL初始化失败
|
网络安全 安全 Java
Java一分钟之-SSL/TLS:安全套接字层与传输层安全
【6月更文挑战第2天】本文介绍了SSL/TLS协议在保护数据传输中的作用,以及Java中使用JSSE实现SSL/TLS的基础。内容涵盖SSL/TLS工作流程、版本、常见问题及解决办法。通过`SSLSocket`和`SSLServerSocket`示例展示了服务器和客户端的实现,并强调证书管理、配置检查和依赖更新的最佳实践,以确保安全的通信。
1789 4
|
安全 算法 Java
java https 请求 javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
java https 请求 javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
17695 0
|
Java 安全 数据安全/隐私保护
java报错javax.net.ssl.SSLHandshakeException:  sun.security.validator.ValidatorException
linux服务器更新JDK,从jdk1.7升级到jdk1.8,导致java访问https地址时程序报错。                解决方法:1、用浏览器登录该https网站,在浏览器地址栏里找到“证书信息”->“详细信息”->“复制到文件”->选择DER编码二进制X.
11444 0