Java Keystore教程



目录

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握手的简化概述。

Java密钥库Tutorial_html_m4e1c1e9d

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

  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

      Java密钥库Tutorial_html_m5d3841d

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

      Java密钥库Tutorial_html_131ca506

    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签署谁将验证请求者的身份并签发签名证书。 Java KeyStore Tutorial_html_15195a43
    6. 您仍然可以单击继续,直到您收到签名证书。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362814.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring AOP源码分析(一)

spring AOP源码分析&#xff08;一&#xff09; 对于springAOP的源码分析&#xff0c;我打算分三部分来讲解&#xff1a;1.配置文件的解析&#xff0c;解析为BeanDefination和其他信息然后注册到BeanFactory中&#xff1b;2.为目标对象配置增强行为以及代理对象的生成&#xff…

attr和prop的区别以及在企业开发中应该如何抉择

attr和prop有很多相同的地方&#xff0c;比如都可以操作标签的属性节点&#xff0c;而且获取的时候都只可以获取到相同节点的第一个&#xff0c;例如这样&#xff1a; $(span).attr(class);和$(span).prop(class);都只能返回第一个span的class 同理做属性的修改和添加,删除也都…

从n个数里面找最大的两个数理论最少需要比较

答案是&#xff1a;nlogn-2 过程是这样的&#xff1a;甲乙比甲胜出&#xff0c;丙丁比丙胜出&#xff0c;最后甲丙比较&#xff0c;甲胜出。。。容易得出找出最大数为n-1次。现在开始找出第二大的数字&#xff1a;明显&#xff0c;第二大的数字&#xff0c;一定和甲进行过比较。…

Java抽象– ULTIMATE教程(PDF下载)

编者注 &#xff1a;在本文中&#xff0c;我们提供了Java教程中的全面抽象。 抽象发生在类级别的设计中&#xff0c;目的是隐藏实现API /设计/系统提供的功能的方式的实现复杂性&#xff0c;从某种意义上讲简化了访问底层实现的“接口”。 此过程可以在越来越“更高”的抽象层次…

用递归方式判断字符串是否是回文

题目要求&#xff1a;使用递归方式判断某个字串是否是回文&#xff08; palindrome &#xff09;回文”是指正着读、反着读都一样的句子。比如“我是谁是我” 设计思想&#xff1a;首先能实现可输出任意字符串&#xff0c;然后定义返回值数据类型&#xff0c;判断递归结束条件的…

Vue.js 相关知识(动画)

1. 简介 Vue 在插入、更新或移除 DOM 时&#xff0c;提供多种不同方式的过渡效果&#xff0c;并提供 transition 组件来实现动画效果&#xff08;用 transition 组件将需执行过渡效果的元素包裹&#xff09; 语法&#xff1a;<transition name””>元素或组件&#xff…

三个水桶等分8升水的问题

目录 智力题目答案问题分析程序代码&#xff08;PHP&#xff09;运行结果小结推荐阅读智力题目 有三个容积分别为3升、5升、8升的水桶&#xff0c;其中容积为8升的水桶中装满了水&#xff0c;容积为3升和容积为5升的水桶都是空的。三个水桶都没有刻度&#xff0c;现在需要将大水…

使用拦截器分析Java EE应用程序的性能下降/提高

在开发具有某些性能要求的Java EE应用程序时&#xff0c;必须在每个发行版之前验证是否满足这些要求。 您可能会想到&#xff0c;哈德森的一项工作每天晚上在某些特定的硬件平台上执行一系列测试测量。 您可以检查已实现的时间并将它们与给定的要求进行比较。 如果测量值与要求…

子组件上下结构布局自适应父组件宽度高度

1、父级页面 <template><div><div class"parentDiv"><!-- gys-org-navigator 在这里是全局注册组件 --><gys-org-navigator ref"orgNavigator" :org-tree"orgTree" :org-id"orgId" :org-type"orgType…

狸猫换太子:动态替换WinCE的原生驱动!

////TITLE:// 狸猫换太子&#xff1a;动态替换WinCE的原生驱动&#xff01;//AUTHOR:// norains//DATE:// Friday 23-April-2010//Environment:// Windows CE 5.0 TCC7901// 大家应该都知道&#xff0c;WinCE系统的驱动是可以非常方便地动态加载和卸载的&#xff…

mysql批量更新

由于mysql没有top函数&#xff0c;limit也不支持子查询&#xff0c;所以批量修改、查询就显得比较麻烦&#xff0c; 但是我还是想到了一个办法&#xff1b; 即创建一个临时表&#xff0c;用于批量操作&#xff1b; 详细如下&#xff1a; 1 create TEMPORARY TABLE test(cardId …

可缺省的CSS布局——张鑫旭

一、技术不难、意识很难 有些东西的东西的实现&#xff0c;难的不是原料、技术&#xff1b;而是想不到&#xff0c;或者说意识不到。 例如下面这个简单而又神奇的魔术&#xff1a; 是吧。搞通了&#xff0c;才发现&#xff0c;哦~原来这么回事&#xff0c;很简单的嘛&#x…

使用Spring AOP,自定义注释和反射为您的应用审核基础架构

下一篇文章将演示如何使用Spring AOP和注释编写简单的审计。 审核机制将是干净&#xff0c;高效且易于维护的&#xff08;和Kewwl&#xff01;&#xff09;。 我将在用户管理系统上演示我的示例&#xff08;假设您对反射和AOP具有一般知识&#xff09;。 我们从简单的数据库表…

经过几天的Scala回归Java的10个最烦人的事情

因此&#xff0c;我正在尝试使用Scala&#xff0c;因为我想编写一个解析器&#xff0c;而Scala Parsers API似乎非常合适。 毕竟&#xff0c;我可以在Scala中实现解析器并将其包装在Java接口后面&#xff0c;因此除了附加的运行时依赖关系之外&#xff0c;不应该存在任何互操作…

检查Red Hat JBoss BRMS部署架构的规则和事件(第二部分)

&#xff08;文章来宾与北美红帽公司高级中间件顾问约翰赫洛克 &#xff08; John Hurlocker&#xff09;合着&#xff09; 在本周的技巧中&#xff0c;我们将放慢速度&#xff0c;并仔细研究可能的Red Hat JBoss BRMS部署体系结构。 当我们谈论部署架构时&#xff0c;我们指…

博客园皮肤-我的博客园皮肤设置教程

一、前言 好的博客皮肤能吸引更多的访问量&#xff0c;也可以使博主更有动力更新博客。今天看到一个博主的博客非常漂亮&#xff0c;突发奇想也打扮了一下自己的博客&#xff0c;虽然差距还有不小&#xff0c;也记录一下操作方法供大家参考。 二、操作 1.左上角“fork me on gi…

设计撑百万并发的数据库架构

设计撑百万并发的数据库架构 https://www.toutiao.com/a6742034135486824973/ 前言 作为一个全球人数最多的国家&#xff0c;一个再怎么凄惨的行业&#xff0c;都能找出很多的人为之付出。而在这个互联网的时代&#xff0c;IT公司绝对比牛毛还多很多。但是大多数都是创业公司&a…

Spring MVC集成测试:断言给定的模型属性有全局错误

为了使用Bean验证报告Spring MVC中的全局错误&#xff0c;我们可以创建一个自定义的类级别约束注释。 全局错误与已验证Bean中的任何特定字段都不相关。 在本文中&#xff0c;我将展示如何使用Spring Test编写测试&#xff0c;以验证给定的model属性是否存在全局验证错误。 自…

Tips_一级菜单栏实现

1.纵向 1 <!DOCTYPE html>2 <html lang"en">3 <head>4 <meta charset"UTF-8">5 <title>menu01</title>6 <style type"text/css">7 *{8 margin: 0;9 pad…

2-使用git管理一个单片机程序

https://www.cnblogs.com/yangfengwu/p/10842205.html 我用电脑压缩一个文件,然后通过git上传,然后在新买的linux系统通过wget 网络下载这个压缩文件,然后死活解压不可以...无论是哪种格式的文件 一开始我怀疑是压缩软件压缩的问题,就换了一个压缩软件进行压缩,但是没有解决问题…