openssl私有CA证书签发与单双向认证

什么是CA?

CA是数字认证中心的简称。指的是发放、管理、废除数字证书的机构。

CA的作用:
检查证书持有者身份的合法性。签发证书(在证书上签字),以防证书被伪造或篡改,以及对证书和密钥进行管理。

建立CA的方式:
标准CA签发、自签名CA和私有CA

自签名证书和私有签名证书的区别?

  • 自签名证书无法被吊销,CA签名的证书可以被吊销,能不能被吊销证书的区别在于,如果你的私钥被黑客获取,如果证书不能被吊销,则黑客可以伪装成你与用户通信。
  • 如果需要创建多个证书,私有CA方法更合适。因为只要给所有客户端都安装了CA证书,那么该CA签过名的证书,客户端都是信任的,也就是安装一次就够了。
  • 如果你直接用自签名证书,你需要给所有的客户端安装该证书才会被信任,如果你需要第二个证书,则还的挨个给所有的客户端安装证书2才会被信任。

如何用openssl实现私有证书的签发已经在这个文章中详细给出了,本文只给出一个大概
PKI详解与openssl实现私有CA证书签发
openssl私有CA证书签发与单双向认证_第1张图片

生成私有CA签名证书

创建CA用到的目录和文件

#!/bin/bash
ls
mkdir testca
cd testca
mkdir newcerts private conf
chmod g-rwx,o-rwx private
echo "01" > serial 
touch index.txt
mkdir newcerts private conf
chmod g-rwx,o-rwx private
echo "01" > serial
touch index.txt

生成CA的私钥和自签名证书

  1. 创建文件:(在\testca\conf文件夹下)
####################################
[ req ]
default_keyfile = /home/testca/private/cakey.pem		#需要修改为自己的实际路径
default_md = md5
prompt = no
distinguished_name = ca_distinguished_name
x509_extensions = ca_extensions

[ ca_distinguished_name ]
organizationName = TestOrg          				 #可以自定义CA的信息
organizationalUnitName  = TestDepartment  		 #可以自定义CA的信息
commonName = TestCA								#可以自定义CA的信息
emailAddress = ca_admin@testorg.com   			#可以自定义CA的信息

[ ca_extensions ]
basicConstraints = CA:true
########################################


  1. 进入testca目录下,然后执行命令(生成X509CA证书)
openssl req -x509 -newkey rsa:2048 -keyout myCA.key -out myCA.crt -days 3650 -config "/home/fmq/QTproject/test/build-testcmd-Desktop_Qt_5_9_0_GCC_64bit-Debug/testca/conf/gentestca.conf"

CA为server签发证书

mkdir server//创建文件夹server
cd server//生成server的私钥以及证书请求文件serverreq.csr
openssl req -newkey rsa:2048 -nodes -keyout server.key -out serverreq.csr -subj "/O=ServerCom/OU=ServerOU/CN=server"
openssl x509 -req -in serverreq.csr -CA ../testca/myCA.crt -CAkey ../testca/myCA.key -CAcreateserial -out server.crt -days 3650//提交serverreq.csr向CA申请证书并生成证书server.crt
openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name "server"//转换格式为.p12

CA为client签发证书

和为server签发证书同理。

我们通过上面的代码建立了私有CA,并为server以及client颁发了证书,因此,可以基于证书验证实现单双向认证。

单向验证server证书

openssl verify -CAfile ca.crt server.crt 

在这里插入图片描述

单向验证client证书

openssl verify -CAfile ca.crt client.crt 

在这里插入图片描述

使用server证书和client证书做双向测试

  1. server端
openssl s_server -accept 10001 -key server.key -cert server.crt -Verify 5
  1. client端
openssl s_client -connect localhost:10001 -cert client.crt -key client.key 
  1. 双向证书正确则连接成功,否则失败
  2. 通过控制台能互发消息

openssl私有CA证书签发与单双向认证_第2张图片
连接成功后发送数据会回显
openssl私有CA证书签发与单双向认证_第3张图片

你可能感兴趣的:(信息安全,https,ssl,安全)