笔者的这篇文章参考了http://docs.oracle.com/cd/E19509-01/820-3503/ggfgo/index.html

KeyStore和TrustStore在很多HTTPS双向配置的文章中基本没有明白的,可能是因为当前的HTTPS网站太少,得不到重视,都是照着别人的抄一遍,然后运行一下。

KeyStore是服务器的密钥存储库,存服务器的公钥私钥证书

TrustStore是服务器的信任密钥存储库,存CA公钥,但有一部分人存的是客户端证书集合,这样并不合适

下面是几个常见的错误

1.KeyStore和TrustStore做成同一个JKS文件或PKCS12文件。通过导入客户端证书来实现验证客户端证书。实际生产中并不能这么做,客户端有成千上万个,你不可能都去导吧。

2.openssl生成CA、server、client证书,用同样的方法转成PKCS12文件,KeyStore指定server.p12,TrustStore指定CA.p12、浏览器证书个人存储区存client.p12,受信任的根证书颁发机构存CA.p12,总体思路是对的,但是CA这里这里绝对不能将私钥也导入到PKCS12中,一个正常的CA要是把CA私钥泄露了那不就惨了。

下面进入主题

一、生成JKS格式的KeyStore

JKS与其他密钥存储可有一个区别就是,不仅密钥存储库可以设置密码,并且里面的条目也可以设置密码,条目如果不设置密码默认与密钥库密码一致,条目可以存证书、密钥对,但是私钥不能直接导出
1.生成密钥库

不能单纯的生成一个密钥库,生成密钥库的时候必须同时生成一个条目
下面这个命令在当前工作目录生成了一个密钥库文件clientkeystore,里面存储了一个别名为client的密钥对

keytool -keystore clientkeystore -genkey -alias client

生成的时候提示:您的名字与姓氏是什么?(What is your first and last name?)
这一步填服务器的域名即可,必须填

2.生成证书请求文件

根据client密钥对生成证书请求文件,这个文件client.csr用于CA签名

keytool -keystore clientkeystore -certreq -alias client -keyalg rsa -file client.csr

比较常见的CA有:http://www.verisign.com

如果签署的证书在CA证书链中,那么导入cer文件即可,如果不在证书链中(比如我们自己创建的CA),你就需要导入CA证书文件

3.导入CA证书文件

下面这个命令用于导入CA证书文件

keytool -import -keystore clientkeystore -file CARoot.cer -alias theCARoot

4.导入签名后的证书文件

如果CA对client.csr签名了,那么你会得到一个client.cer的证书文件,下面你可以导入这个签名后的证书文件

keytool -import -keystore clientkeystore -file client.cer -alias client

二、生成PKCS12格式的KeyStore

JKS格式的密钥存储库不能导出私钥,这是个缺陷,下面我们来看PKCS12格式
下面都是用openssl工具来生成

下面这个命令是将pem格式的私钥mykey.pem.txt与pem格式的证书mycertificate.pem.txt合并成一个文件mykeycertificate.pem.txt

cat mykey.pem.txt mycertificate.pem.txt>mykeycertificate.pem.txt

将上面合并的文件作为一个条目存储pkcs12存储库中,生成过程中必须输入密码

openssl pkcs12 -export -in mykeycertificate.pem.txt -out mykeystore.pkcs12 -name myAlias -noiter -nomaciter

三、生成TrustStore

命令

keytool -import -file C:\cascerts\firstCA.cert -alias firstCA -keystore myTrustStore

如果是多级CA,可能还需要导入secondCA和thirdCA

KeyStore和TrustStore的更多相关文章

  1. 使用keytool生成ssl密钥文件keystore和truststore

    最近在研究Mina的开发,通信的时候需要数据加密,而且mina本身支持SSLFilter过滤器,所以可以采用SSL加密的方式对数据进行加密. 在进行加密之前,我们需要使用keytool(这个存在于C: ...

  2. 转/keystore和truststore的区别

    keytool是java自带的工具用于产生密钥 keystore可以看成一个放key的库,key就是公钥,私钥,数字签名等组成的一个信息. truststore是放信任的证书的一个store. 那他们 ...

  3. Https:证书生成 .p12 .keyStore 和 .truststore文件理解

    当我们需要SSL证书时,可以自动生成SSL证书,但是每个系统都申请一次证书会比较麻烦,所以用到了如下几个文件格式:   .p12(PKCS #12) 我们的每一个证书都可以生成一个.p12文件,这个文 ...

  4. Difference between trustStore and keyStore in Java - SSL

    Difference between trustStore and keyStore in Java - SSL   trustStore vs keyStore in Java trustStore ...

  5. 杂谈X509证书, Java Keystore与Jetty

    很多人对JSSE组成部分的Key Tool 工具不太明白,希望本文能有帮助 科班出身的同学应该学过课程“密码学”, 这门课详细解释了现代对称加密的算法原理, 当时学的我云里雾里. 直到现在使用过SSL ...

  6. keyStore vs trustStore--转载

    原文:http://lukejin.iteye.com/blog/605634 今天有同事向我问起这两个概念,所以我就记录下.首先我们得澄清一些概念.一个web应用如果需要提供以https的方式访问的 ...

  7. cloudera-scm-server启动时出现Caused by: java.io.FileNotFoundException: /var/lib/cloudera-scm-server/.keystore (No such file or directory)问题解决方法(图文详解)

    不多说,直接上干货! 问题详情 查看/var/log/cloudera-scm-server.log的启动日志 问题来源 我在用cloudermanager安装好之后,然后,在对如下. 配置kerbe ...

  8. Restful 介绍及SpringMVC+restful 实例讲解

    restful不是一个框架,称为一种编码更烦更贴切吧,其核心类位于spring-web.jar中,即RestTemplate.class restful是rpc通过http协议的一种实现方式,和web ...

  9. 【tomcat】HTTPS访问配置 + restful调用远程HTTPS绕过验证

     单向验证: 第一步: 生成key: keytool -genkey -alias mykey -keyalg RSA -keystore d:/key/testkey keytool -export ...

随机推荐

  1. hdu 4565

    Problem Description A sequence Sn is defined as:Where a, b, n, m are positive integers.┌x┐is the cei ...

  2. 《鸟哥的Linux私房菜》学习笔记(1)——文件与目录

    在Linux中,任何设备都是文件,不仅如此,连数据通信的接口也有专门的文件负责.可以说,一切皆文件,目录也是一种文件,是路径映射.因此,文件系统是Linux的基础. 一.文件与目录管理命令 1.ls( ...

  3. Python虚拟机中的一般表达式(三)

    其他一般表达式 在前两章:Python虚拟机中的一般表达式(一).Python虚拟机中的一般表达式(二)中,我们介绍了Python虚拟机是怎样执行创建一个整数值对象.字符串对象.字典对象和列表对象.现 ...

  4. JS实现——贪吃蛇

    把以下代码保存成Snake.html文件,使用Google或360浏览器打开 <!DOCTYPE HTML> <html> <head> <meta char ...

  5. tomcat6-输入输出buffer设计

    之前写的一个ppt 搬到博客来

  6. python 学习分享-购物车实操篇

    程序要求如下: '''购物车程序: 启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表 允许用户根据商品编号购买商品 用户选择商品后,检测余额是否够,够就直接扣款,不够就 ...

  7. 06-python进阶-多线程下载器练手

    我们需要用python 写一个多线程的下载器 我们要先获取这个文件的大小 然后将其分片 然后启动多线程 分别去下载 然后将其拼接起来 #!/usr/bin/env python#coding:utf- ...

  8. 《人月神话》读书笔记(2)-week3

    为了确保团队中的每个人都能保持系统概念上的完整性,关于项目的书面规格说明是必不可少的.手册要描绘用户可见的一切,但不应支配实现的过程.光有规格说明也是不够的,会议也是必要的.书中提到的周例会会迅捷地给 ...

  9. php rabbitmq操作类及生产者和消费者实例代码 转

    注意事项: 1.accept.php消费者代码需要在命令行执行 2.'username'=>'asdf','password'=>'123456' 改成自己的帐号和密码 RabbitMQC ...

  10. 升级springboot 2.x 踩过的坑——跨域导致session问题

    目前IT界主流前后端分离,但是在分离过程中一定会存在跨域的问题. 什么是跨域? 是指浏览器从一个域名的网页去请求另一个域名的资源时,域名.端口.协议任一不同,都是跨域. 做过web后台的童鞋都知道,跨 ...