开发者社区> 科技小能手> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

PKI架构的简介,如何使用OPENSSL完成加密与解密,如何自建CA完成证书的签署

简介:
+关注继续查看

        PKI(Public Key Infrastructure ) 即"公钥基础设施",是一种遵循既定标准的密钥管理平台,它能够为所有网络应用提供加密和数字签名等密码服务及所必需的密钥和证书管理体系。

        认证中心CA 作为PKI 的核心部分,CA 实现了PKI 中一些很重要的功能,概括地说,认证中心(CA)的功能有:证书发放、证书更新、证书撤销和证书验证。CA 的核心功能就是发放和管理数字证书,具体描述如下: 
(1)接收验证最终用户数字证书的申请。 
(2)确定是否接受最终用户数字证书的申请-证书的审批。 
(3)向申请者颁发、拒绝颁发数字证书-证书的发放。 
(4)接收、处理最终用户的数字证书更新请求-证书的更新。 
(5)接收最终用户数字证书的查询、撤销。 
(6)产生和发布证书废止列表(CRL)。 
(7)数字证书的归档。 
(8)密钥归档。 
(9)历史数据归档。

wKioL1N9mQPjRjI4AAMOfsN60PE465.jpg

我们先来看看如何使用OPENSSL对数据进行加密与解密:

openssl enc -ciphername(算法名称)

    -in filename

        the input filename, standard input by default. 输入文件名,标准的默认输入。

    -out filename

        the output filename, standard output by default. 输出文件名,标准的默认输出。

    -e 

        encrypt the input data: this is the default. 默认加密输入的数据。

    -d

        decrypt the input data. 解密输入的数据。

现在我们对/tmp下的fstab文件进行加密:

# openssl idea-ofb -in fstab -e -out fstab.secret

这样就对文件完成加密了,目录下是不是多了一个fstab.secret这个就是加密后的文件。

wKioL1N9qOGxYqNGAAD1TMGA0ZM508.jpg

我们看看加密文件的内容:

# cat fstab.secret

全身乱码看不懂吧,这时我们把源文件fstab删除掉,这样就很好的起到了保密工作。

# rm -f fstab

wKioL1N9qXTyYYMgAAMgc2oHLTk306.jpg

现在我们用这个加密的文件,把我们源文件给还原回来。

# openssl idea-ofb -in fstab.secret -d -out fstab

文件回来了吧,而且内容也正常。

wKiom1N9q7rjABpDAAL3sDIkv1c350.jpg


其他扩展的openssl命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
openssl: 
    # openssl version
     
    # 加密文件
     openssl enc -des3 -in /path/to/somefile -e -out /path/to/somefile.des3
    # 解密文件 
     openssl enc -des3 -in /path/to/somefile.des3 -d -out /path/to/somefile
 
    # 一致性校验
     openssl dgst -md5 -hex /path/to/somefile
     md5sum 
         
        # 评估加密算法的加密速度 
     openssl speed 
 
        # 加密密码  -salt 参数是在加密前给密码加上其他字符一并加密
     man sslpasswd
     openssl passwd -1 -salt 
 
    # 生成随机密码
     openssl rand -base64 num
     openssl rand -hex num


如何使用openssl生成一个私钥:

openssl genrsa -out filename [字符位数]

        generate an RSA private key  生成一个RSA 私钥。

我们现在来生成一个2048位的私钥:

# openssl genrsa -out mytckey 2048

# chmod 600 mytckey

私钥是不能随便让人看的,所以改下权限,除了自己,所有人都不能看。

wKioL1N9s4rCUfukAAD8svxASso680.jpg

提取公钥:

# openssl rsa -in mytckey  -pubout

wKiom1N9tnuhYwiRAAImn3P93eM107.jpg

制作一个证书的签署请求命令介绍:

openssl

    req

        PKCS#10 X.509 Certificate Signing Request (CSR) Management. 证书签署请求管理。

    -new

        this option generates a new certificate request. 这个选项是生成一个新证书的请求。

    -key

        This specifies the file to read the private key from. It also accepts PKCS#8 format private keys for PEM format files.  这是指定读取的私钥在哪,也支持PKCS#8格式的私钥,PEM格式的文件。

    -out

        This specifies the output filename to write to or standard output by default  指定输出文件名

开始制作:

# openssl req -new -key mytckey  -out myreq.csr

接下来要输入所在国家,省份,城市,部门等信息。

这就创建好了一个证书的签署请求。

wKioL1N_ENngQkdjAANDnGJsDCM137.jpg

CA才可以签署证书

所以我们现在来看下,如何自建CA。

openssl配置文件CA的部分配置:

wKiom1OBa5zAXAZuAAQVvPFxgEI878.jpg

# cd /etc/pki/CA/

1、为CA生成一个私钥:

# (umask 077; openssl genrsa -out private/cakey.pem 4096)

wKioL1N_FFqDPba0AAO8QspF-DU172.jpg

 # openssl req -new -x509 -key private/cakey.pem  -out cacert.pem -days 3656 

自签证书

# touch serial index.txt

# echo 01 > serial

创建签证数据库文件,和序列号文件,并且给serial一个初始序列。

CA自建好了,现在可以给别人签证了。

wKioL1OBdt_Bh4kbAAJWslW1iSY754.jpg

我们先来签一个刚刚我们刚刚做好的请求

# openssl ca -in myreq.csr  -out mycert.crt -days 3655

这就给别人签好了一张证书。

wKioL1OBltrCMxcgAAKOiVgkzLM076.jpg

 接下来,我们在脚本里实现自建CA和签署证书的操作:

以下是小菜写的脚本:

wKiom1OCGQ3wXYukAAPwcvuiDbY374.jpg

这一块内容完成,有问题欢迎与我交流QQ1183710107。

 

 



本文转自qw87112 51CTO博客,原文链接:http://blog.51cto.com/tchuairen/1415425

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
redo log-Transaction(2)—mysql进阶(六十)
redo log-Transaction(2)—mysql进阶(六十)
9 0
Docker搭建Nginx并配置ssl证书
Docker搭建Nginx并配置ssl证书
464 0
Nginx的安装使用卸载及配置ssl证书
nginx的安装以及基本配置,添加https证书,也就是ssl证书。
2950 0
如何在容器集群环境中使用Let's Encrypt HTTPS证书
本文介绍了Let's Encrypt单域名和通配型HTTPS证书的申请与更新,以及如何在容器集群环境中自动化地实现证书更新
3690 0
用 Flask 来写个轻博客 (9) — M(V)C_Jinja 语法基础快速概览
#目录 前文列表 扩展阅读 Jinja 变量名 注释 控制语句 if 语句 循环 过滤器 无参数调用 带参数调用 宏 定义宏 调用宏 结果 兼容 JavaScript 前文列表 用 Flask 来写个轻博客 (1) — 创建项目 用...
1191 0
轻松把玩HttpClient之配置ssl,采用设置信任自签名证书实现https
在上篇文章《HttpClient配置ssl实现https简单示例——绕过证书验证》中简单分享了一下如何绕过证书验证。如果你想用httpclient访问一个网站,但是对方的证书没有通过ca认证或者其他问题导致证书不被信任,比如12306的证书就是这样的。
2373 0
Oracle 11g Flashback_transaction_query的undo_sql列为空
SQL> select table_name,operation,row_id,undo_sql      from flashback_transaction_query where t...
661 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载