目录

1.简介 2. SSL及其工作方式 3.私钥 4.公开证书 5.根证书 6.证书颁发机构 7.证书链 8.使用Java keytool的密钥库 9.密钥库命令 10.在Apache Tomcat上使用密钥库和自签名证书配置SSL

1.简介

我们谁没有去ebay,亚马逊买东西或他的个人银行帐户来检查。 您是否认为这些站点足够安全,可以存储您的个人数据(信用卡号或银行帐号等)?

这些站点中的大多数都使用套接字层(SSL)协议来保护其Internet应用程序。 SSL允许在传输之前对来自客户端(例如Web浏览器)的数据进行加密,从而使试图嗅探数据的人无法对其进行解密。

许多Java应用程序服务器和Web服务器都支持将密钥库用于SSL配置。 如果要构建安全的Java程序,那么学习构建密钥库是第一步。

2. SSL及其工作方式

客户端始终使用HTTPS(而不是http://)开头的URL发起基于HTTP的SSL连接。 在SSL会话开始时,将执行SSL握手。 该握手产生会话的密码参数。 下图显示了如何处理SSL握手的简化概述。

简而言之,它是如何工作的:

  1. 浏览器请求一个安全页面(通常为https://)。
  2. Web服务器发送其公钥及其证书。
  3. 浏览器检查证书是否由受信任的方(通常是受信任的根CA)颁发,证书仍然有效,并且证书与联系的网站有关。
  4. 然后,浏览器使用公共密钥对随机对称加密密钥进行加密,并将其与所需的已加密URL以及其他已加密的http数据一起发送到服务器。
  5. Web服务器使用其私钥解密对称加密密钥,并使用对称密钥解密URL和http数据。
  6. Web服务器发回请求的html文档和使用对称密钥加密的http数据。
  7. 浏览器使用对称密钥解密http数据和html文档并显示信息。

SSL的世界实质上具有三种类型的证书:私钥,公钥(也称为公共证书或站点证书)和根证书。

3.私钥

私钥包含服务器的身份信息以及密钥值。 它应该保持此密钥的安全并受密码保护,因为它用于在握手期间协商哈希值。 有人可以使用它来解密流量并获取您的个人信息。 就像将房门钥匙留在门锁中一样。

4.公开证书

公共证书(公共密钥)是提供给客户的部分,就像您在机场出示护照时一样。 与私有密钥紧密相关的公共证书是使用证书签名请求(CSR)从私有密钥创建的。 创建私钥后,您将创建一个CSR,该CSR被发送到您的证书颁发机构(CA)。 CA返回签名的证书,其中包含有关服务器身份和CA的信息。

5.根证书

根CA证书是一个CA证书,它只是一个自签名证书。 该证书代表签发证书的实体,被称为证书颁发机构或CA,例如VeriSign,Thawte等。

6.证书颁发机构

可以为您签名证书的公司,例如VeriSign,Thawte,Commodo,GetTrust。 此外,许多公司和机构都通过自己从头开始构建完整的实现,或者使用开源选项(例如OpenSSL)充当自己的CA。

7.证书链

当服务器和客户端建立SSL连接时,会向客户端提供一个证书。 客户应确定是否信任此证书,此过程称为证书链。 客户端检查证书的颁发者,搜索其受信任根证书的列表,并将呈现的证书上的颁发者与受信任证书的主题进行比较。

如果找到匹配项,则连接继续。 如果不是,则Web浏览器可能会弹出一个对话框,警告您它不信任证书,并提供信任证书的选项。

8.使用Java keytool的密钥库

Java Keytool是密钥和证书管理实用程序。 它允许用户管理自己的公钥/私钥对和证书。 Java Keytool将密钥和证书存储在所谓的密钥库中 。 它使用密码保护私钥。

Java密钥库中的每个证书都与唯一的别名关联。 创建Java密钥库时,您将首先创建.jks文件,该文件最初仅包含私钥,然后生成CSR。 然后,您会将证书(包括所有根证书)导入密钥库。

9.密钥库命令

创建密钥库,密钥和证书请求

  • 生成Java密钥库和密钥对

    keytool -genkey -alias mydomain -keyalg RSA -keystore keystore.jks -storepass password
  • 为现有的Java密钥库生成证书签名请求(CSR)
    keytool -certreq -alias mydomain -keystore keystore.jks -storepass password -file mydomain.csr
  • 生成密钥库和自签名证书
    keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360

进口证明书

  • 将根或中间CA证书导入到现有的Java密钥库中
keytool -import -trustcacerts -alias root -file Thawte.crt -keystore keystore.jks -storepass password
  • 将签名的主证书导入到现有的Java密钥库中

    keytool -import -trustcacerts -alias mydomain -file mydomain.crt -keystore keystore.jks -storepass password
  • 出口证明书

    • 从密钥库导出证书

      keytool -export -alias mydomain -file mydomain.crt -keystore keystore.jks -storepass password

    检查/列出/查看证书

    • 检查独立证书

      keytool -printcert -v -file mydomain.crt
    • 检查哪些证书在Java密钥库中
      keytool -list -v -keystore keystore.jks -storepass password
    • 使用别名检查特定的密钥库条目
      keytool -list -v -keystore keystore.jks -storepass password -alias mydomain

    删除证书

    • 从Java Keytool密钥库中删除证书

      keytool -delete -alias mydomain -keystore keystore.jks -storepass password

    修改密码

    • 更改Java密钥库密码

      keytool -storepasswd -new new_storepass -keystore keystore.jks -storepass password
    • 更改私钥密码
      keytool -keypasswd -alias client -keypass old_password -new new_password -keystore client.jks -storepass password

    10.在Apache Tomcat上使用密钥库和自签名证书配置SSL

    1. 使用此命令生成新的密钥库和自签名证书,将提示您输入特定信息,例如用户名,组织单位,公司和位置。

      keytool -genkey -alias tomcat -keyalg RSA -keystore /home/ashraf/Desktop/JavaCodeGeek/keystore.jks -validity 360

    2. 您可以列出使用此命令刚创建的证书详细信息
      keytool -list -keystore /home/ashraf/Desktop/JavaCodeGeek/keystore.jks

    3. 下载Tomcat 7
    4. 配置Tomcat的服务器以支持SSL或https连接。 在Tomcat \ conf \ server.xml中添加连接器元素
      <Connector port="8443" maxThreads="150" scheme="https" secure="true"
      SSLEnabled="true" keystoreFile="/home/ashraf/Desktop/JavaCodeGeek/.keystore" keystorePass="password" clientAuth="false" keyAlias="tomcat" sslProtocol="TLS" />
    5. 启动Tomcat并转到https:// localhost:8443 / ,您将发现以下安全问题,浏览器将在其中显示不受信任的错误消息。 就电子商务而言,此类错误消息会导致对网站立即失去信心,并且组织可能会失去大多数消费者的信心和业务,这很正常,因为您的证书尚未由Thawte或Verisign等CA签署谁将验证请求者的身份并签发签名证书。
    6. 您仍然可以单击继续,直到您收到签名证书。

    翻译自: https://www.javacodegeeks.com/2014/07/java-keystore-tutorial.html

Java Keystore教程相关推荐

  1. Java安全教程–创建SSL连接和证书的分步指南

    在有关应用JEE安全性的系列文章中,我们为您提供了另一个有关如何在Java EE应用程序中创建SSL连接和创建证书的详细教程. 如我们之前的文章中所述, 安全套接字层(SSL)/传输层安全性(TLS) ...

  2. java培训教程分享:Java中怎样将数据对象序列化和反序列化?

    本期为大家介绍的java培训教程是关于"Java中怎样将数据对象序列化和反序列化?"的内容,相信大家都知道,程序在运行过程中,可能需要将一些数据永久地保存到磁盘上,而数据在Java ...

  3. java培训教程分享:Java编写软件代码自动提示功能

    本期的java培训教程分享主要是介绍的java编写软件代码的一个自动提示功能,很多零基础和初学java的同学们对这一块还不是很了解,Eclipse for android 实现代码自动提示智能提示功能 ...

  4. java培训教程分享:Java中用户如何自定义异常?

    我们在学习java技术的时候应该有了解过,在java中是定义了很多的异常类的,虽然这些大量异常类可以帮助我们描述编程时出现的大部分异常情况,但是在程序开发中有时可能需要描述程序中特有的异常情况,例如在 ...

  5. java培训教程:什么是匿名内部类?怎样创建匿名内部类?

    本期java教程要为大家分享的是关于java中的匿名内部类,相信很多同学在学java技术的时候有了解过,下面我们就来详细的看一下. java培训教程:什么是匿名内部类?怎样创建匿名内部类?匿名内部类是 ...

  6. Java培训教程:”==“和 equals 方法究竟有什么区别?

    在学习java技术过程中,我们会接触到一些变量值的相关知识,本期小编为大家介绍的教程就是关于"=="和 equals 方法究竟有什么区别?来看看下面的详细介绍. Java培训教程: ...

  7. [转] Java快速教程

    [转] Java快速教程 转自:Vamei的Java快速教程 2015-07-03 安装环境 Step 1: Eclipse JDK 下载.安装.配置 (download.install.deploy ...

  8. Java快速教程--vamei 学习笔记(基础篇)

    链接:http://www.cnblogs.com/vamei/archive/2013/03/31/2991531.html java快速教程第1课 从HelloWorld到面向对象 学习网址:ht ...

  9. Java基础教程:反射基础

    Java基础教程:反射基础 引入反射 反射是什么 能够动态分析类能力的程序称为反射. 反射是一种很强大且复杂的机制. Class类 在程序运行期间,Java运行时系统始终为所有对象维护一个被称为运行时 ...

最新文章

  1. jQuery选择器之可见性过滤选择器
  2. python画简单花-Python竟能画这么漂亮的花,帅呆了(代码分享)
  3. keras入门之手写字识别python代码
  4. 机器学习在销售报价单的产品推荐场景中的作用
  5. php splqueue 5.5安装,解析PHP标准库SPL数据结构
  6. Array.prototype.slice.call
  7. [Ext JS 4] Grid 中的单元格添加Tooltip 的效果
  8. 2018.07.09 顺序对齐(线性dp)
  9. 黑客帝国之酷炫屏保数字雨
  10. 网络创业:网站盈利模式分析分类
  11. 2016腾讯实习生招聘在线笔试总结(移动开发)
  12. 模型数据处理之数据格式转换——SuperMap iDesktop
  13. 安装Sql Server:以前的某个安装需要重新引导计算机以便使其更改生效。若要继续,请重启计算机,然后再次运行安装程序。
  14. Java获取word表格中的数据
  15. 应用层HTTP数据包的截获与还原技术的实现
  16. html超链接并可以返回,返回到上一页的html代码的几种写法
  17. WGS84坐标系下,经纬度如何换算成米
  18. 大学计算机学院操行表个人小结,大学生操行鉴定表个人总结
  19. python 解析恶心的时间
  20. C#与.net有什么关系

热门文章

  1. 2019蓝桥杯省赛---java---B---6(特别数的和)
  2. centos5.9 mysql_CentOS 5.9系统服务器使用yum安装Apache+PHP+MySQL环境
  3. springboot 订单重复提交_瞬间几千次的重复提交,我用Spring Boot+Redis扛住了
  4. Object.hashCode()与Object.equals()
  5. Maven常见问题之【-Dmaven.multiModuleProjectDirctory system property is not set】
  6. java登录界面命令_Java命令行界面(第8部分):Argparse4j
  7. forge开发_使用Forge,WildFly Swarm和Arquillian开发微服务
  8. java lambda循环_使用Java 8 Lambda简化嵌套循环
  9. jpa语法错误_JPA陷阱/错误
  10. Hibernate锁定模式– PESSIMISTIC_READ和PESSIMISTIC_WRITE如何工作