Java基于Tomcat Https keytool 自签证书
本文大部分内容系转载,原文地址:https://www.cnblogs.com/littleatp/p/5922362.html
keytool 简介
keytool 是java 用于管理密钥和证书的工具,官方文档
其功能包括:
- 创建并管理密钥
- 创建并管理证书
- 作为CA 为证书授权
- 导入导出证书
主要格式
keytool 采用 keystore 文件来存储密钥及证书,其中可包括私钥、信任证书;
keystore 文件主要使用 JKS格式(也可支持其他格式),带密钥存储;其中私钥的存储也有独立的密码;
其他格式
一、生成私钥和证书
keytool -genkey -alias data -keyalg RSA -keysize 2048 -keystore data.keystore -validity 36500 -storepass 111111 -keypass 111111
执行过程;
What is your first and last name?
[Unknown]: IP或者域名 注意:这个地方必须输入IP或者域名,如果是IP,必须是本机IP,不能直接回车,如果是基于IP的,不同机器之间的证书不能混用,否则后期证书导入到tomcat之后访问的时候会报错!
What is the name of your organizational unit?
[Unknown]: zsxj
What is the name of your organization?
[Unknown]: zsxj
What is the name of your City or Locality?
[Unknown]: zsxj
What is the name of your State or Province?
[Unknown]: zsxj
What is the two-letter country code for this unit?
[Unknown]: zsxj
Is CN=IP, OU=zsxj, O=zsxj, L=zsxj, ST=zsxj, C=zsxj correct?
[no]: yes
按提示 输入keystore 存储密码、私钥密码、个人信息,之后会生成 data.keystore文件
若不想输入参数,可提供参数:
keytool -genkeypair -alias serverkey -keypass 111111 -storepass 111111 \
-dname "C=CN,ST=GD,L=SZ,O=vihoo,OU=dev,CN=IP/域名" \
-keyalg RSA -keysize 2048 -validity 3650 -keystore server.keystore
参数说明
- storepass keystore 文件存储密码
- keypass 私钥加解密密码
- alias 实体别名(包括证书私钥)
- dname 证书个人信息
- keyalt 采用公钥算法,默认是DSA
- keysize 密钥长度(DSA算法对应的默认算法是sha1withDSA,不支持2048长度,此时需指定RSA)
- validity 有效期,默认为天,36500,表示证书的有效期是100年,证书的有效期越长,被破解的概率越高
- keystore 指定keystore文件
二、查看keystore详情
查看详情命令
keytool -list -keystore -storepass 111111 data.keystore
输出结果
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
serverkey, Sep 25, 2016, PrivateKeyEntry,
Certificate fingerprint (SHA1): 65:75:C9:08:A0:83:21:A1:D7:8D:DA:CD:3D:FB:C2:E0:50:96:29:62
加上-v选项可查看更详细信息

Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
Alias name: serverkey
Creation date: Jul 22, 2017
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: C=CN, ST=GD, L=SZ, O=vihoo, OU=dev, CN=vihoo.com
Issuer: C=CN, ST=GD, L=SZ, O=vihoo, OU=dev, CN=vihoo.com
Serial number: 5c5eb42
Valid from: Sat Jul 22 10:45:45 CST 2017 until: Tue Jul 20 10:45:45 CST 2027
Certificate fingerprints:
MD5: 27:ED:70:EF:4C:E3:7F:ED:6A:83:67:32:6D:10:24:38
SHA1: 79:08:97:6E:62:EE:0F:E6:81:56:66:43:9C:9D:A4:11:EF:CC:28:0C
SHA256: 3B:AC:56:8E:60:C2:C8:07:61:19:C7:4A:D3:AF:1F:60:77:24:94:7C:87:6E:C8:E7:17:14:E4:7A:34:0A:CD:8F
Signature algorithm name: SHA256withRSA
Version: 3
Extensions:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: B4 10 A9 26 5D 6C 4C 46 B4 69 ED 31 2B 20 D1 F4 ...&]lLF.i.1+ ..
0010: 58 3C 8F 94 X<..
]
]

三、证书导入导出
导出证书
keytool -exportcert -keystore data.keystore -file data.cer -alias data -storepass 111111
参数说明
- exportcert 表示导出证书
- alias 指示别名
- file 指示导出文件
- storepass 指示keystore密钥
此时导出的证书为DER编码格式,使用openssl 可以输出
openssl x509 -in data.cer -inform der -noout -text
加上 -rfc选项,可输出PEM编码格式的证书
keytool -exportcert -keystore data.keystore -rfc -file data.cer -alias data-storepass 111111
输出格式如:
-----BEGIN CERTIFICATE-----
MIIDUTCCAjmgAwIBAgIEBcXrQjANBgkqhkiG9w0BAQsFADBZMRIwEAYDVQQDEwl2
...
-----END CERTIFICATE-----
导入证书
一般为导入信任证书(SSL客户端使用)
keytool -importcert -keystore client_trust.keystore -file server.cer -alias client_trust_server -storepass 111111 -noprompt
参数说明
- importcert 表示导入信任证书
- file 指示导入证书,支持pem/der格式
- keystore 指示目标keystore文件
- storepass 指示新的keystore密钥
- alias 指示trust证书在keystore中的别名
- noprompt 指示不弹出提示
导入后的证书为 trustedCertEntry 实体类型,而私钥证书为 PrivateKeyEntry
四、查看证书
打印证书
keytool -printcert -file data.cer
输出

Owner: CN=ZZ, OU=DEV, O=pp.com, L=GZ, ST=GD, C=CN
Issuer: CN=ZZ, OU=DEV, O=pp.com, L=GZ, ST=GD, C=CN
Serial number: 797f3140
Valid from: Sun Sep 25 16:43:55 CST 2016 until: Sat Dec 24 16:43:55 CST 2016
Certificate fingerprints:
MD5: FB:7D:29:4C:A9:F3:07:0E:CC:74:0D:9B:D4:D6:4D:91
SHA1: 65:75:C9:08:A0:83:21:A1:D7:8D:DA:CD:3D:FB:C2:E0:50:96:29:62
SHA256: E9:8B:A5:43:5F:40:FA:C5:64:3B:0A:11:1D:BE:D1:07:3C:A1:E2:50:88:71:A7:5C:EC:43:22:98:1B:AA:B6:EB
Signature algorithm name: SHA1withDSA
Version: 3
Extensions:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 0E C3 62 D3 75 3A 3C B7 D9 C4 BD 8E 63 E7 6C EC ..b.u:<.....c.l.
0010: AF 8A 29 72 ..)r
]
]

五、转换格式
jks格式 转 pkcs12
keytool -importkeystore -srckeystore data.keystore -destkeystore data.p12 -srcalias data -destalias data\
-srcstoretype jks -deststoretype pkcs12 -srcstorepass 111111 -deststorepass 111111 -noprompt
参数说明
- importkeystore 指示导入导出keystore文件,可用于同类型或不同类型的导入导出
- srckeystore 指示源keystore文件
- srcalias 指示源实体别名
- srcstoretype 指示源store类型(jks/pkcs12..)
- srcstorepass 指示源store密码
- noprompt 不弹出提示
pkcs12 转jks格式与此同理
六、场景示例
1. 制作Java SSL 双向证书

storepass=111111
keypass=111111
server_dname="C=CN,ST=GD,L=SZ,O=vihoo,OU=dev,CN=vihoo.com"
client_dname="C=CN,ST=GD,L=SZ,O=vihoo,OU=dev,CN=vihooc.com"
echo "generate server keystore"
keytool -genkeypair -alias serverkey -keypass $keypass -storepass $storepass \
-dname $server_dname \
-keyalg RSA -keysize 2048 -validity 3650 -keystore server.keystore
echo "generate client keystore"
keytool -genkeypair -alias clientkey -keypass $keypass -storepass $storepass \
-dname $client_dname \
-keyalg RSA -keysize 2048 -validity 3650 -keystore client.keystore
echo "export server certificate"
keytool -exportcert -keystore server.keystore -file server.cer -alias serverkey -storepass $storepass
echo "export client certificate"
keytool -exportcert -keystore client.keystore -file client.cer -alias clientkey -storepass $storepass
echo "add server cert to client trust keystore"
keytool -importcert -keystore client_trust.keystore -file server.cer -alias client_trust_server \
-storepass $storepass -noprompt
echo "add client cert to server trust keystore"
keytool -importcert -keystore server_trust.keystore -file client.cer -alias server_trust_client \
-storepass $storepass -noprompt

2. Java 证书与 nginx 证书互转
Java通常使用JKS作为证书存储格式,而Nginx往往采用PEM证书格式,如何实现互转?
Nginx 证书 转 JKS
A pem证书和私钥合成p12
openssl pkcs12 -export -in server.crt -inkey server.key -passin pass:111111 -password pass:111111 \
-name server -out server.p12注意定义-name 选项,这将作为keystore识别实体的参数
B p12 证书转jks 证书
keytool -importkeystore -srckeystore server.p12 -destkeystore server.keystore \
-srcstoretype pkcs12 -deststoretype jks -srcalias server -destalias server \
-deststorepass 111111 -srcstorepass 111111如果p12 文件中未指定实体名称,使用keytool转换时则不需提供srcalias/destalias参数,而输出的keystore实体名称默认为1
JKS 证书 转 Nginx证书
A jks 证书转p12
keytool -importkeystore -srckeystore server.keystore -destkeystore server.p12 \
-srcstoretype jks -deststoretype pkcs12 -srcalias server -destalias server \
-deststorepass 111111 -srcstorepass 111111B p12 证书提取pem证书和私钥
openssl pkcs12 -in server.p12 -clcerts -nokeys -password pass:111111 -out server.crt
openssl pkcs12 -in server.p12 -nocerts -password pass:111111 -passout pass:111111 -out server.key其中得到的私钥文件为PKCS#8 加密格式,证书和密钥均为PEM文件编码。
3. 其他
已有的Nginx证书,如何快速在Java中添加信任
通过keytool -importcert 命令可直接导入信任证书
Java基于Tomcat Https keytool 自签证书的更多相关文章
- jdk keytool 自签证书
jdk keytool 自签证书 https需要用到ssl证书,可以从阿里等平台申请,本文采用jdk keytool进行自签证书. 生成环境:linux 用jdk自带keytool工具生成密钥库 ke ...
- java在访问https资源时的证书信任问题
java程序在访问https资源时,出现报错 sun.security.validator.ValidatorException: PKIX path building failed: sun.sec ...
- tomcat https 启用8443加证书
<?xml version='1.0' encoding='utf-8'?> <!-- Licensed to the Apache Software Foundation (ASF ...
- java客户端验证https连接(忽略证书验证和证书验证两种方式)
首先根据如下操作生成证书,配置springboot https,生成一个简单的https web服务 https://www.cnblogs.com/qq931399960/p/11889349.ht ...
- java 基于tomcat的数据源案例
1.在context中定义数据源 <?xml version="1.0" encoding="UTF-8"?> <Context path=& ...
- TOmCAT HTTPS 单向验证 忽略证书
https://www.cnblogs.com/haha12/p/4381663.html
- java在访问https资源时,忽略证书信任问题 (转)
java程序在访问https资源时,出现报错sun.security.validator.ValidatorException: PKIX path building failed: sun.secu ...
- HTTP-java访问https资源时,忽略证书信任问题,代码栗子
java程序在访问https资源时,出现报错 sun.security.validator.ValidatorException: PKIX path building failed: sun.sec ...
- tomcat配置https–采用JDK自带的keytool工具生成证书
转自:http://blog.csdn.net/huangxinyu_it/article/details/41693633 有关http与https的区别请看<浅谈http与https的区别( ...
随机推荐
- 浏览器内置http抓包工具软件
使用 360极速浏览器抓取HTTP的 请求头 与 响应头: *** 从 工具--->开发人员工具(F12) 或者 直接按下 F12键,打开抓包工具: **** 按下F5刷新: 双击其中的 Nam ...
- 20155330 2016-2017-2 《Java程序设计》第四周学习总结
20155330 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 学习目标 理解封装.继承.多态的关系 理解抽象类与接口的区别 掌握S.O.L.I.D原则 了 ...
- 银行业务-Excel文件的拆分逻辑
一.问题: 随着银行业务数据量的急剧增加,原始的人力统计数据已经不能满足要求, 需要开发一款可以实现自动化数据统计的系统平台,进行数据的采集.加工.过滤.统计.预测 其中数据采集方式又以[Excel] ...
- Docker入门篇(二)之docker的单主机网络
Docker 安装时会自动在host上创建三个网络,我们可用 docker network ls命令查看: [root@localhost ~]# docker network ls NETWORK ...
- WPF RegisterAttached ListBoxItem(附加属性传递到Item)
/// <summary> /// Controls的附加属性 /// </summary> public class ControlsAttached : Dependenc ...
- Maven学习(九)-----定制库到Maven本地资源库
这里有2个案例,需要手动发出Maven命令包括一个 jar 到 Maven 的本地资源库. 要使用的 jar 不存在于 Maven 的中心储存库中. 您创建了一个自定义的 jar ,而另一个 Mave ...
- selenium 结合 docker 构建分布式测试环境 (初学者视角)
前言:随着自动化测试越学越深,深深觉得有太多的东西需要总结. 1.记录下学习中遇到的坑,当做学习笔记.2.有前人路过看到文章中比较落后的做法,请务必一定要指教.(因为是初学者视角,很多东西只是走通而已 ...
- php文章tag标签的增删
<?php session_start(); if($_POST){ $_SESSION['old']=array('one','two','three','four', ...
- ZT-----用javascrip写一个区块链
几乎每个人都听说过像比特币和以太币这样的加密货币,但是只有极少数人懂得隐藏在它们背后的技术.在这篇博客中,我将会用JavaScript来创建一个简单的区块链来演示它们的内部究竟是如何工作的.我将会称之 ...
- C#匿名参数(转载too)
匿名方法是在初始化委托时内联声明的方法. 例如下面这两个例子: 不使用匿名方法的委托: using System; using System.Collections.Generic; using Sy ...