openssl工具详解及自建CA方法

前言:

openssl是一款很强大的多用途的开源加密解密的命令行工具,比如创建私钥,创建证书签名请求,测试各种加密算法耗时等等。

在我们进入openssl工具讲解之前,我们有必要先了解先Linux下的加密解密方式,以及常用的加密算法与协议。

然后最后我们详细讲解使用openssl自建CA的方法

目录:

1. Linux加密解密过程:

如图:

2. 常用密码算法和协议

常用的加密算法有三种:

1. 对称加密算法:

同一个密钥可以同时用作信息的加密和解密,将明文分割成固定大小的块,逐个进行解密,这种加密方法称为对称加密;

对称加密的缺陷就是需要维护的密钥太多。

常用的对称加密算法:DES (56)、3DES、AES (128,192,256,384,512)、Blowfish、Twofish、IDEA、RC6、CAST5等 ;

2. 公钥加密

也叫非对称加密,是由对应的一对唯一性密钥(即公开密钥和私有密钥)组成的加密方法。

常用的公钥加密算法:RSA, DSA, EIGamal等;

3. 单向加密:

是不可解密的加密方法,是非可逆的;并且加密的结果是定长的

常用的公钥加密算法:MD5、SHA1、SHA256、SHA384、SHA512等;

实际上单向加密,一般只是用来提取文件特征码,验证数据或证书的数据完整性,也会被称为数据指纹

4.认证协议:

IKE协议(Internet Key Exchange):常用来确保虚拟专用网络VPN与远端网络或者宿主机进行交流时的安全;

SSL( 安全套接字层): 网络通信提供安全及数据完整性的一种安全协议。

TLS(传输层安全): 是仿照SSL制定,用于在两个通信应用程序之间提供保密性和数据完整性。

3. openssl命令行工具简单应用

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

查看本机openssl版本:

#openssl version

3.1 对文件进行对称加密:

工具: openssl enc

算法:DES, 3DES, AES, Blowfish, Twofish, RC6, idea, CAST5

# openssl enc -des3 -a -salt -in /path/from/somefile -out /path/to/somecipherfile

# openssl enc -d -des3 -a -salt -in /path/from/somecipherfile -out /path/to/somefile

3.2 使用openssl做单向加密:

工具: openssl dgst

# openssl dgst [-md5|-sha1] [-out /path/to/filename] /path/from/somefile

MAC: 消息摘要码,单向加密的一种延伸类的应用

应用:用于实现在网络通信中保证所传输的数据的完整性

机制:

CBC-MAC

HMAC:使用md5或sha1算法

3.3 生成用户密码:

工具: openssl passwd

获取帮助:

#whatis passwd

passwd               (1)  - update user‘s authentication tokens

passwd               (5)  - password file

passwd [sslpasswd]   (1ssl)  - compute password hashes

选择最后那个,然后:

#man passwd sslpasswd

#openssl passwd -1 -salt jingming

Password:  输入密码后,回车

$1$jingming$jmHXxFlxswHGuht5Qbkgk/  #这里显示的第一段$$内容为salt,后面为密码

3.4 生成随机数:

生成随机数,主要是用于生成密码时候作为动态的salt来用

#openssl rand

#openssl rand -hex|-base64 num

#openssl rand -base64 4

例如: 生成一个随机salt的用户密码:

#oepnssl passwd -1 -salt `openssl rand -hex 4`

3.5 公钥加密(非对称加密)

公钥加密用的不多,因为公钥加密速度很慢。。。

算法: RSA, EIGamal

工具: gpg, openssl rsatul

3.6 数字签名

算法: RSA, EIGamal, DSA(只能用来签名,不能用来加密)

这两种表述都是用来做数字签名的

DSA: Digital Signature Algorithm

DSS: Digital Signature Standard

3.7 生成密钥(Private key):

#openssl genrsa -out /path/to/keyfile NUMBEROFBITS(位数:1024/2048/4096...)

#生成的是私钥,但是公钥是包含在private key内的。生成的私钥很重要,所以生成后,一定要更改权限为600或者400

但是我们可以通过下面的方式,来修改权限:

#(umask 077; openssl genrsa -out /path/to/keyfile NUMBEROFBITS)

用()表示在子shell中运行umask命令,及创建私钥, 这样umask只会对这两条命令有效,执行完,返回父shell,umask 077设置就无效了

提出公钥:

#openssl rsa -in /path/from/private_key_file -pubout

4. 利用openssl自建CA

4.1 建立CA服务器:

1、生成密钥

# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

2、自签证书

# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655

req: 生成证书签署请求

-news: 新请求

-key /path/to/keyfile: 指定私钥文件

-out /path/to/somefile:

-x509: 生成自签署证书

-days n: 有效天数

3、初始化工作环境

# touch /etc/pki/CA/{index.txt,serial}

# echo 01 > /etc/pki/CA/serial

4.2 节点申请证书:

(一) 节点生成请求

1、生成密钥对儿

# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)

2、生成证书签署请求

# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr

3、把签署请求文件发送给CA服务

# scp

(二) CA签署证书

1、验正证书中的信息;

2、签署证书

# openssl ca -in /path/to/somefile.csr -out /path/to/somefile.crt -days N

3、发送给请求者;

4.3 吊销证书

(一)节点

1、获取证书serial

# openssl x509 -in /path/to/certificate_file.crt -noout -serial -subject

(二) CA

2、根据节点提交的serial和subject信息来验正与index.txt文件中的信息是否一致;

3、吊销证书

# openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

4、生成吊销证书的编号(如果是第一次吊销)

# echo 00 > /etc/pki/CA/crlnumber

5、更新证书吊销列表

# cd /etc/pki/CA/crl/

# openssl ca -gencrl -out thisca.crl

如果需要,查看crl文件的内容:

# openssl crl -in /path/to/crlfile.crl -noout -text

时间: 2024-10-12 10:18:37

openssl工具详解及自建CA方法的相关文章

在虚拟机里安装VMwareTools工具(详解)

首先要确保 你当前 虚拟机这款软件 是否是正常版本, 因为有些虚拟机软件 简体版,导致无法安装VMwareTools工具. 如果没有问题,就可以进入正题了: 1. 在菜单栏里,选择虚拟机菜单的子菜单安装VMwareTools, 此时你会发现 Linux系统里多了一个VMwareTools光盘, 打开之后,就会发现 有一个压缩包:VMwareTools-5.5.3-34685.tar.gz, 将这个压缩包 复制到 /tmp 目录下,在地址栏里输入/tmp 按回车键,即可转入到/tmp 目录了, 然

convmv编码转换工具详解

convmv编码转换工具详解文件名转码的工具--convmv,convmv能帮助我们很容易地对一个文件,一个目录下所有文件进行编码转换,比如gbk转为utf8等.安装 yum install convmv语法:convmv [options] FILE(S) ... DIRECTORY(S)主要选项:1.-f ENCODING指定目前文件名的编码,如-f gbk2.-t ENCODING指定将要转换成的编码,如-f utf-83.-r递归转换目录下所有文件名4.--list列出所有支持的编码5.

Linux进程管理工具详解:htop、glances、dstat

1.进程相关知识     1.操作系统的功能:文件系统.网络功能.进程管理.内存管理.安全功能.驱动程序(Linux是一个多任务的操作系统,而且是抢占式的多任务操作系统);.OS其实就是提供虚拟的计算机,进而能够将有限的资源借助于"保护"机制分配多个同时运行的程序,即"进程"使用,从而实现了所谓的多任务 2.程序执行环境有2种: 内核模式:cpu运行内核级指令 用户模式:cpu运行普通指令 3.应用程序运行普通指令,其实是直接运行于cpu上:应用程序运行特权指令,是

rpm包安装和卸载,rpm查询,yum工具详解,yum仓库搭建

rpm包安装和卸载 [[email protected] Packages]# rpm -ivh zip-3.0-1.el6.x86_64.rpm    安装rpm包命令   ivh I=安装的意思install    v=可视     h =显示安装进度 mount /dev/cdrom  /mnt/  挂载到mnt下 cd /mnt/ cd packages Ls    查看rpm包 遇到有相互依赖的包,两个包一起安装 卸载也是一样的 两个包同时卸载 rpm -e yp -tools ypb

mysql 自带工具详解

MySQL自带工具使用介绍:1)mysql命令:mysql命令事是使用最多的命令工具了,为用户提供了一个命令行接口来操作管理MySQL的服务器.命令格式:Usage:mysql [OPTIONS][database]例:mysql -e "select user,host from user" mysqlmysql --help 可以得到相应的基础使用帮助信息-e : --execut=name :我们要执行-e后面的命令,但是并不通过mysql连接进入mysql交互界面.此参数在我们

Java定时任务工具详解之Timer篇

Java定时任务调度工具详解 什么是定时任务调度? ◆ 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务. 在Java中的定时调度工具? ◆ Timer       ◆Quartz Timer和Quarzt的区别? ◆ 出身不同(Timer由JDK直接提供,调用方式简单粗暴,不需要别的jar支持) ◆ 能力区别(TImer简单的定时任务,如需要每个星期天的8点,则需要Quarzt) ◆ 底层机制 原文地址:https://www.cnblogs.com/caifenglin/p/

[转帖]前端-chromeF12 谷歌开发者工具详解 Network篇

前端-chromeF12 谷歌开发者工具详解 Network篇 https://blog.csdn.net/qq_39892932/article/details/82493922 blog 也是原作者转帖的 应该是 不过挺好的 可以在1906 里面仔细实验学习一下. 原文链接:https://segmentfault.com/a/1190000010302235 开发者工具初步介绍 chrome开发者工具最常用的四个功能模块: Elements:主要用来查看前面界面的html的Dom结构,和修

[转帖]前端-chromeF12 谷歌开发者工具详解 Sources篇

前端-chromeF12 谷歌开发者工具详解 Sources篇 原贴地址:https://blog.csdn.net/qq_39892932/article/details/82498748 console 里面的东西 前端的不懂啊.. 这次分享的是Chrome开发工具中最有用的面板Sources. Sources面板几乎是我最常用到的Chrome功能面板,也是在我看来决解一般问题的主要功能面板.通常只要是开发遇到了js报错或者其他代码问题,在审视一遍自己的代码而一无所获之后,我首先就会打开So

[转帖]前端-chromeF12 谷歌开发者工具详解 Console篇

前端-chromeF12 谷歌开发者工具详解 Console篇 https://blog.csdn.net/qq_39892932/article/details/82655866 趁着搞 cloud 的学习学一下chrome前端知识等. 大家都有用过各种类型的浏览器,每种浏览器都有自己的特色,本人拙见,在我用过的浏览器当中,我是最喜欢Chrome的,因为它对于调试脚本及前端设计调试都有它比其它浏览器有过之而无不及的地方.可能大家对console.log会有一定的了解,心里难免会想调试的时候用a