证书相关概念及使用openssl生成自认证证书

1    基本概念

  根证书:根证书负责其他可信任证书的颁发,不同的CA机构具有不同的根证书。通过openssl我们可以自建CA证书(不属于权威机构颁发的,但经常部署证书测试需要用到),用于颁发其他证书(用根证书的私钥对其他证书进行签名,从而保证其他证书的可信性)。

证书认证原理:根证书用自己的私钥签署了服务端的证书,验证时要根证书的公钥解密服务端的证书,从而达到了身份验证。这种方式也叫做数字签名,可验证服务端证书确实是由根证书颁发的。

  证书的信任链:A信任B,B信任C,则A信任C。根证书签发服务端证书后,服务端证书可签发二级证书,则二级证书也认为是可信任的(客户端有服务端的公钥,所以知道这是服务端颁发的证书)。

    单向认证:在身份验证环节,如客户端验证服务端时,服务端发送自己的证书给客户端,然后客户端便可用根证书来识别服务端的证书是否是由根证书颁发的,即验证服务端证书的可信性,从而达到身份验证的目的。认证完成之后,客户端便可以使用服务端的公钥对信息进行加密,然后再发往服务端,从而达到信息保密(这种情况下服务端发往客户端的消息并不保密,因为服务端的公钥是公开的).

    双向认证:在单向认证的前提上再加上了服务端对客户端进行认证,从而保证了通信的双方都是可信的,这时候双方的通信内容都是保密的(只有用己方的私钥才能解密)。

   一般使用中只要单向认证就行了,即客户端与服务端是N对1关系(实际中可能有几个服务端和多个客户端),客户端连接服务端之后,有服务端发送证书给客户端,然后客户端对服务端证书进行验证,来确认服务端身份是否合法。

   双向认证则要求服务端也需要确认客户端的身份,举个例子,如工行的U盾内置了数字证书,这个就是客户端的证书,用于向服务器表明自己的身份有效性。

参考链接:

https://segmentfault.com/a/1190000002568019

p.s.:很好的一个博客:tls系列的包括——SSL/TLS原理详解OpenSSL SSL 数字证书概念贴基于OpenSSL自建CA和颁发SSL证书

2    使用openssl生成证书

1)  生成CA证书

#创建操作目录

mkdir CA

cd CA 

#创建一些子目录和初始文件备用

mkdir certs crl newcerts private

echo "01" > serial

cp /dev/null index.txt

#拷贝openssl.cnf 到当前目录

cp /etc/ssl/openssl.cnf openssl.cnf

#修改相应配置

vi openssl.conf

#将以下内容对应修改

[CA_default ]

dir             = ./demoCA              # Where everything is kept

certs           = $dir/certs            # Where the issued certs are kept

#为

[CA_default ]

dir             = .                     # Where everything is kept

certs           = $dir/certs            # Where the issued certs are kept

#用如下命令生成CA证书:

opensslreq -new -x509 -keyout private/cakey.pem -out cacert.pem -days 365 -configopenssl.cnf

#之后会要求填写信息(如地址,机构,pem pass phrase等信息),填写完后根证书便生成完成了

2)     用根证书颁发证书

    服务器证书和客户端证书的生成过程是一样的,用根证书颁发两份证书,一个作为服务端证书,一个作为客户端证书即可,单向认证的话只需要生成一个证书即可。下面以生成服务端的证书为例说明:

#用如下命令生成服务端证书的私钥pem文件和serverreq.pem

opensslreq -nodes -new -x509 -keyout serverkey.pem -out serverreq.pem -days 365-config openssl.cnf

#之后会要求你填写相应信息,其中Common name 一项表示你的FQDN或者你的IP地址,Email Address 填空即可

#用serverkey.pem 文件加密serverreq.pem 文件,生成待认证的证书文件tmp.pem

opensslx509 -x509toreq -in serverreq.pem -signkey serverkey.pem -out tmp.pem

#用根证书签署(颁发)服务器证书

opensslca -config openssl.cnf -policy policy_anything -out servercert.pem -infilestmp.pem

#之后需要输入CA证书的PEM pass phrase ,便可以生成服务端证书

#删除待颁发的证书tmp.pem

rmtmp.pem

    之后我们查看下目录newcerts,可以看到目录下面多个个证书01.pem,这个证书也就是刚才根证书颁发的服务器证书。

参考链接:

https://www.linux.com/blog/tls-encryption-and-mutual-authentication-using-syslog-ng-open-source-edition

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值