使用keytool和openssl工具生成SSL双向认证密钥对和证书库
来源:互联网 发布:ds数据精灵好用吗 编辑:程序博客网 时间:2024/05/13 20:57
一、引言
由于需要开发一个支持https双向认证的服务,开发期间需要自己生产ssl双向认证证书,服务是基于springboot的开发的,所以进行了一段时间的技术调研,以下是操作生成操作步骤
二、操作
1、keystore以及服务器密钥对的生成
keytool -genkeypair -alias server -keyalg RSA -validity 365 -keystore server.jks -storepass 123456oppuser@ng3-ts220:/oppf/aioppf/HttpServerMock/config> keytool -genkeypair -alias server -keyalg RSA -validity 365 -keystore server.jks -storepass 123456您的名字与姓氏是什么?(有域名用域名,没域名用IP或者localhost) [Unknown]: 172.16.1.220您的组织单位名称是什么? [Unknown]: 您的组织名称是什么? [Unknown]: 您所在的城市或区域名称是什么? [Unknown]: 您所在的州或省份名称是什么? [Unknown]: 该单位的两字母国家代码是什么 [Unknown]: CNCN=172.16.1.220, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN 正确吗? [否]: 是 输入<server>的主密码 (如果和 keystore 密码相同,按回车):
2、验证新生成的keystor文件以及证书信息
keytool -list -v -keystore server.jks oppuser@ng3-ts220:/oppf/aioppf/HttpServerMock/config> keytool -list -v -keystore server.jks 输入keystore密码: Keystore 类型: JKSKeystore 提供者: SUN您的 keystore 包含 1 输入别名名称: server创建日期: 2017-5-16项类型: PrivateKeyEntry认证链长度: 1认证 [1]:所有者:CN=172.16.1.220, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN签发人:CN=172.16.1.220, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN序列号:591a9d01有效期: Tue May 16 14:32:33 CST 2017 至Wed May 16 14:32:33 CST 2018证书指纹: MD5:7D:6C:B4:FE:27:1A:91:1B:A9:38:43:54:74:40:7B:15 SHA1:CF:5D:D8:A8:76:3B:A7:76:53:00:5D:38:73:67:44:78:8A:E3:93:CA 签名算法名称:SHA1withRSA 版本: 3**************************************************************************************
3、导出服务端公钥
keytool -export -alias server -keystore server.jks -rfc -file server.ceroppuser@ng3-ts220:/oppf/aioppf/HttpServerMock/config> keytool -export -alias server -keystore server.jks -rfc -file server.cer输入keystore密码: 保存在文件中的认证 <server.cer>
4、Truststore文件(证书库)的生成并导入服务端公钥
keytool -import -alias server -file server.cer -keystore truststore.jksoppuser@ng3-ts220:/oppf/aioppf/HttpServerMock/config> keytool -import -alias server -file server.cer -keystore truststore.jks输入keystore密码: 再次输入新密码: 所有者:CN=172.16.1.220, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN签发人:CN=172.16.1.220, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN序列号:591a9d01有效期: Tue May 16 14:32:33 CST 2017 至Wed May 16 14:32:33 CST 2018证书指纹: MD5:7D:6C:B4:FE:27:1A:91:1B:A9:38:43:54:74:40:7B:15 SHA1:CF:5D:D8:A8:76:3B:A7:76:53:00:5D:38:73:67:44:78:8A:E3:93:CA 签名算法名称:SHA1withRSA 版本: 3信任这个认证? [否]: 是认证已添加至keystore中
5、客户端密钥对的生成和验证
keytool -genkeypair -alias client -keyalg RSA -validity 365 -keystore client.p12 -storepass 123456oppuser@ng3-ts220:/oppf/aioppf/HttpServerMock/config> keytool -genkeypair -alias client -keyalg RSA -validity 365 -keystore client.p12 -storepass 123456您的名字与姓氏是什么?(有域名用域名,没域名用IP或者localhost) [Unknown]: 172.16.1.220您的组织单位名称是什么? [Unknown]: 您的组织名称是什么? [Unknown]: 您所在的城市或区域名称是什么? [Unknown]: 您所在的州或省份名称是什么? [Unknown]: 该单位的两字母国家代码是什么 [Unknown]: CNCN=172.16.1.220, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN 正确吗? [否]: 是输入<client>的主密码 (如果和 keystore 密码相同,按回车):keytool -list -v -keystore client.p12 oppuser@ng3-ts220:/oppf/aioppf/HttpServerMock/config> keytool -list -v -keystore client.p12 输入keystore密码: Keystore 类型: JKSKeystore 提供者: SUN您的 keystore 包含 1 输入别名名称: client创建日期: 2017-5-16项类型: PrivateKeyEntry认证链长度: 1认证 [1]:所有者:CN=172.16.1.220, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN签发人:CN=172.16.1.220, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN序列号:591ab7e7有效期: Tue May 16 16:27:19 CST 2017 至Wed May 16 16:27:19 CST 2018证书指纹: MD5:9D:3C:ED:EE:11:E2:9E:B9:B3:6A:79:4B:F7:FF:0F:B6 SHA1:9F:FC:0B:E8:5E:9C:C8:DC:0C:E5:E6:84:FE:1C:60:B9:CD:D8:B3:5B 签名算法名称:SHA1withRSA 版本: 3**************************************************************************************
6、导出客户端证书
keytool -export -alias client -keystore client.p12 -rfc -file client.ceroppuser@ng3-ts220:/oppf/aioppf/HttpServerMock/config> keytool -export -alias client -keystore client.p12 -rfc -file client.cer输入keystore密码: 保存在文件中的认证 <client.cer>
7、将客户端公钥导入Truststore文件
keytool -import -alias client -file client.cer -keystore truststore.jksoppuser@ng3-ts220:/oppf/aioppf/HttpServerMock/config> keytool -import -alias client -file client.cer -keystore truststore.jks输入keystore密码: 所有者:CN=172.16.1.220, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN签发人:CN=172.16.1.220, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN序列号:591ab7e7有效期: Tue May 16 16:27:19 CST 2017 至Wed May 16 16:27:19 CST 2018证书指纹: MD5:9D:3C:ED:EE:11:E2:9E:B9:B3:6A:79:4B:F7:FF:0F:B6 SHA1:9F:FC:0B:E8:5E:9C:C8:DC:0C:E5:E6:84:FE:1C:60:B9:CD:D8:B3:5B 签名算法名称:SHA1withRSA 版本: 3信任这个认证? [否]: 是认证已添加至keystore中
8、验证新生成Truststore文件以及证书信息
oppuser@ng3-ts220:/oppf/aioppf/HttpServerMock/config> keytool -list -v -keystore truststore.jks输入keystore密码: Keystore 类型: JKSKeystore 提供者: SUN您的 keystore 包含 2 输入别名名称: client创建日期: 2017-5-16输入类型: trustedCertEntry所有者:CN=172.16.1.220, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN签发人:CN=172.16.1.220, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN序列号:591ab7e7有效期: Tue May 16 16:27:19 CST 2017 至Wed May 16 16:27:19 CST 2018证书指纹: MD5:9D:3C:ED:EE:11:E2:9E:B9:B3:6A:79:4B:F7:FF:0F:B6 SHA1:9F:FC:0B:E8:5E:9C:C8:DC:0C:E5:E6:84:FE:1C:60:B9:CD:D8:B3:5B 签名算法名称:SHA1withRSA 版本: 3**************************************************************************************别名名称: server创建日期: 2017-5-16输入类型: trustedCertEntry所有者:CN=172.16.1.220, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN签发人:CN=172.16.1.220, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN序列号:591a9d01有效期: Tue May 16 14:32:33 CST 2017 至Wed May 16 14:32:33 CST 2018证书指纹: MD5:7D:6C:B4:FE:27:1A:91:1B:A9:38:43:54:74:40:7B:15 SHA1:CF:5D:D8:A8:76:3B:A7:76:53:00:5D:38:73:67:44:78:8A:E3:93:CA 签名算法名称:SHA1withRSA 版本: 3**************************************************************************************
9、生成相应客户端使用的相应证书(将密钥对转为浏览器能识别的证书,如何提取公钥和私钥)
#p12和pfx是浏览器识别的证书#支持工具测试,和后续服务使用需要提取出客户端公钥和私钥#导出公钥client.cer名字和后缀可以随便起keytool -export -alias client -keystore client.p12 -rfc -file client.cer#导出私钥client.key 由于keystore文件无法直接提取出私钥,需要经过工具转换成为pfx文件,再从pfx文件中提取出私钥[keystore文件转pfx工具](http://note.youdao.com/noteshare?id=59a86e623b01a46efd88d9f0b3c55add&sub=363FB535DE95489E849FCCF16E94B248)openssl pkcs12 -in client.pfx -nocerts -nodes -out client.key#如此证书和密钥我们都有了(服务端的可以如此获取证书的公钥和私钥)
10、测试校验
1、校验服务端单向认证是否配置成功#启动https服务,并且以server.jks为服务端密钥对以truststore.jks作为证书库#将server.ssl.client-auth设定client authentication WANT或者其他方式配置为不要求做客户端证书校验#直接在浏览器访问https://172.16.1.220:8443/http_server_mock/index.json,浏览器提示证书不安全(无视)继续访问,有正确返回结果(浏览器右上角可以清晰看到https红色的)#直接使用wget https://172.16.1.220:8443/http_server_mock/index.jsonoppuser@ng3-ts220:/oppf/aioppf/HttpServerMock> wget https://172.16.1.220:8443/http_server_mock/index.json--2017-05-16 17:42:18-- https://172.16.1.220:8443/http_server_mock/index.jsonConnecting to 172.16.1.220:8443... 已连接。ERROR: cannot verify 172.16.1.220's certificate, issued by `/C=CN/ST=Unknown/L=Unknown/O=Unknown/OU=Unknown/CN=172.16.1.220': Self-signed certificate encountered.To connect to 172.16.1.220 insecurely, use `--no-check-certificate'.无法建立 SSL 连接。#由于wget无法验证服务端证书是否合法,建立https校验连接,所以必须配置--no-check-certificate 进行验证 oppuser@ng3-ts220:/oppf/aioppf/HttpServerMock> wget --no-check-certificate https://172.16.1.220:8443/http_server_mock/index.json--2017-05-16 17:42:28-- https://172.16.1.220:8443/http_server_mock/index.jsonConnecting to 172.16.1.220:8443... 已连接。WARNING: cannot verify 172.16.1.220's certificate, issued by `/C=CN/ST=Unknown/L=Unknown/O=Unknown/OU=Unknown/CN=172.16.1.220': Self-signed certificate encountered.已发出 HTTP 请求,正在等待回应... 200 长度:31Saving to: `index.json.1'100%[=============================================================================================================================>] 31 --.-K/s in 0s 2017-05-16 17:42:28 (15.4 MB/s) - `index.json.1' saved [31/31]服务端单向SSL认证校验成功————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————2、SSL双向认证校验#启动https服务,并且以server.jks为服务端密钥对以truststore.jks作为证书库#将server.ssl.client-auth设定client authentication设置为NEED 需要校验#直接在浏览器访问https://172.16.1.220:8443/http_server_mock/index.json#访问失败,服务端返回需要校验客户端证书,浏览器需要发送客户端证书给服务端#使用工具访问连接oppuser@ng3-ts220:/oppf/aioppf/HttpServerMock/config> wget --no-check-certificate https://172.16.1.220:8443/http_server_mock/index.json--2017-05-16 17:27:43-- https://172.16.1.220:8443/http_server_mock/index.jsonConnecting to 172.16.1.220:8443... 已连接。OpenSSL: error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate无法建立 SSL 连接。#直接使用pfx作为浏览器证书,双击client.pfx导入当前计算机#启动浏览器访问https://172.16.1.220:8443/http_server_mock/index.json#选中客户端使用的证书,浏览器提示服务端证书不安全(无视)继续访问,有正确返回结果(浏览器右上角可以清晰看到https红色的)oppuser@ng3-ts220:/oppf/aioppf/HttpServerMock/config> wget --certificate=client.cer --private-key=client.key https://172.16.1.220:8443/http_server_mock/index.json--2017-05-16 16:18:04-- https://172.16.1.220:8443/http_server_mock/index.jsonConnecting to 172.16.1.220:8443... 已连接。ERROR: cannot verify 172.16.1.220's certificate, issued by `/C=CN/ST=Unknown/L=Unknown/O=Unknown/OU=Unknown/CN=172.16.1.220': Self-signed certificate encountered.To connect to 172.16.1.220 insecurely, use `--no-check-certificate'.无法建立 SSL 连接。wget --certificate=client.cer --private-key=client.key --no-check-certificate https://172.16.1.220:8443/http_server_mock/index.json--2017-05-16 16:12:15-- https://172.16.1.220:8443/http_server_mock/index.jsonConnecting to 172.16.1.220:8443... 已连接。WARNING: cannot verify 172.16.1.220's certificate, issued by `/C=CN/ST=Unknown/L=Unknown/O=Unknown/OU=Unknown/CN=172.16.1.220': Self-signed certificate encountered.已发出 HTTP 请求,正在等待回应... 200 长度:31Saving to: `index.json.1'100%[=============================================================================================================================>] 31 --.-K/s in 0s 2017-05-16 16:12:16 (14.4 MB/s) - `index.json.1' saved [31/31]SSL双向认证校验成功————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
阅读全文
0 0
- 使用keytool和openssl工具生成SSL双向认证密钥对和证书库
- ActiveMQ SSL应用之二 使用keytool工具生成密钥和证书文件
- Tomcat6和5.5配置使用SSL双向认证(使用openssl生成证书)
- ssl双向认证-openssl生成证书
- openssl和keytool生成证书
- 使用keytool生成SSL双向认证
- 用keytool 生成证书配置tomcat ssl双向认证
- 使用keytool生成ssl密钥文件keystore和truststore
- keytool和openssl生成的证书转换
- Tomcat6配置使用SSL双向认证(使用openssl生成证书)
- Tomcat配置使用SSL双向认证(使用openssl生成证书)
- Tomcat6配置使用SSL双向认证(使用openssl生成证书)
- SSL双向认证以及证书的制作和使用
- SSL双向认证以及证书的制作和使用
- SSL双向认证以及证书的制作和使用
- keytool生成SSL双向证书命令
- keytool生成keystore、truststore、证书以及SSL单向认证在服务端tomcat和客户端的配置
- keytool生成keystore、truststore、证书以及SSL单向认证在服务端tomcat和客户端的配置
- 数据结构和算法的选择
- Redis3.0官方集群配置
- 我们的特斯拉战队建队啦~
- UESTC 1597 An easy problem C 线段树+延迟操作+一次函数
- 顺序容器之间的拷贝
- 使用keytool和openssl工具生成SSL双向认证密钥对和证书库
- XML解析 (python)
- ThinkPHP 3.2.3多应用开启/项目分组
- ionic3/ionic2 新建页面
- Android 平台应用使用RxAndroid
- TortoiseSVN客户端
- 自定义view(四) 方形进度条
- listview点击监听事件失效
- 关于在vmware虚拟机里面的Ubuntu14.04TLS上面安装Jupyter notebook指南