java-信息安全(十二)-数字证书、CA证书【Java证书体系实现】

一、概述

  https,主要协议tls/ssl,进而需要了解证书机构(CA)、证书、数字签名、私钥、公钥、对称加密、非对称加密。

  信息安全问题:信息的保密性、信息的完整性、身份识别。

1.1、信息安全问题  

  信息安全问题:信息的保密性、信息的完整性、身份识别。

1、信息的保密性(加密算法)

  信息的保密性我们可以使用对称加密和非对称加密来完成,使用对称加密来完成,速度相对非对称加密很快,但是存在一个安全问题,密钥如何传递?由此通用的方法是使用非对称加密+对称加密来完成。客户端使用公钥对对称加密的密钥进行加密,然后传递给服务端,服务端使用私钥进行解密确认密钥,开始传输数据。
  

2、信息的完整性(数字签名)

  信息传输的途中,我们的信息很有可能被第三方劫持篡改,所以我们需要保证信息的完整性,通用方法是使用散列算法如SHA1,MD5将传输内容hash一次获得hash值,即摘要。

  客户端使用服务端的公钥对摘要和信息内容进行加密,然后传输给服务端,服务端使用私钥进行解密获得原始内容和摘要值,这时服务端使用相同的hash算法对原始内容进行hash,然后与摘要值比对,如果一致,说明信息是完整的。

  

3、身份识别(数字证书)

  在信息传输的过程中,我们通常需要验证信息的发送方的身份,这时我们转化一下思路就可以完成,把发送端的公钥发送给接收端,发送端通过把自己的内容使用私钥加密然后发送给接收端,接收端只能用发送端的公钥解密,自然就验证了发送端的身份。

    

1.2、知识概要说明

1、对称加密

  对称加密是指双方持有相同的密钥进行通信,加密速度快,但是有一个安全问题,双方怎样获得相同的密钥。

  常见的对称加密算法有DES、3DES、AES等

  参看地址:java-信息安全(十八)java加密解密,签名等总结

2、非对称加密

  非对称加密,又称为公开密钥加密,是为了解决对称加密中的安全问题而诞生,一个称为公开密钥(public key),即公钥,另一个称为私钥(private key),即私钥。但是它的加密速度相对于对称加密来说很慢。

  • 公钥(public key)是对外开放的,私钥(private key)是自己拥有的。
  • 公钥(public key)加密的数据,只能用私钥(private key)解密。
  • 私钥(private key)加密的数据,只能用公钥(public key)解密。

3、数字证书

  注:为什么需要CA颁发数字证书

  首先看一下非对称加密时候的加密方式

    

  在传输的过程中,客户端如何获得服务器端的公钥呢?当时是服务器分发给客户端,如果一开始服务端发送的公钥到客户端的过程中有可能被第三方劫持,然后第三方自己伪造一对密钥,将公钥发送给客户端,当服务器发送数据给客户端的时候,中间人将信息进行劫持,用一开始劫持的公钥进行解密后,然后使用自己的私钥将数据加密发送给客户端,而客户端收到后使用公钥解密,反过来亦是如此,整个过程中间人是透明的,但信息泄露却不得而知。
    
  为了防止这种情况,数字证书就出现了,它其实就是基于上上面所说的私钥加密数据,公钥解密来验证其身份。
  数字证书是由权威的CA(Certificate Authority)机构给服务端进行颁发,CA机构通过服务端提供的相关信息生成证书,证书内容包含了持有人的相关信息,服务器的公钥,签署者签名信息(数字签名)等,最重要的是公钥在数字证书中。
  数字证书是如何保证公钥来自请求的服务器呢?数字证书上由持有人的相关信息,通过这点可以确定其不是一个中间人;但是证书也是可以伪造的,如何保证证书为真呢?
  一个证书中含有三个部分:"证书内容,散列算法,加密密文",证书内容会被散列算法hash计算出hash值,然后使用CA机构提供的私钥进行RSA加密。
    
  当客户端发起请求时,服务器将该数字证书发送给客户端,客户端通过CA机构提供的公钥对加密密文进行解密获得散列值(数字签名),同时将证书内容使用相同的散列算法进行Hash得到另一个散列值,比对两个散列值,如果两者相等则说明证书没问题。
    

  数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名)。它是由权威机构——CA机构,又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。

参考地址:java-信息安全(五)-非对称加密算法RSA

证书制作:java-信息安全(十三)-数字证书-格式、编码、keytool、keystore

如果生产一般会直接获取证书文件

示例代码 

代码地址:https://github.com/bjlhx15/algorithm-sign.git

原文地址:https://www.cnblogs.com/bjlhx/p/6565219.html