Linux安全和加解密(二)

本文主要介绍:1、安全协议 2、openssl 3、创建CA和申请证书

一、安全协议

SSL: Secure Socket Layer   安全套阶层协议

TLS: Transport Layer Security     安全传输协议,SSL改名TLS,一个东西,可通称

1995:SSL 2.0 Netscape   1.0不普及

1996: SSL 3.0

1999: TLS 1.0

2006: TLS 1.1 IETF(Internet工程任务组) RFC 4346

2008:TLS 1.2 当前使用   最普遍

2015: TLS 1.3

  • 功能:机密性,认证,完整性,重放保护(防重放,第一次有效第二次失效) 
  • 两阶段协议,分为握手阶段和应用阶段

握手阶段(协商阶段):客户端和服务器端认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件以及主密钥。后续通信使用的所有密钥都是通过MasterSecret生成。

应用阶段:在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信

 

SSL/TLS

Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换

ChangeCipherSpec 协议:一条消息表明握手协议已经完成

Alert 协议:对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,fatal类型错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告

Record 协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等

HTTPS 协议:就是“HTTP 协议”和“SSL/TLS 协议”的组合。HTTP over SSL”或“HTTP over TLS”,对http协议的文本数据进行加密处理后,成为二进制形式传输      用的最多

 

SSL协议的开源实现:OpenSSL

 

三个组件:

openssl: 多用途的命令行工具,包openssl

libcrypto: 加密算法库,包openssl-libs

libssl:加密模块应用库,实现了ssl及tls,包nss

 

openssl命令:

两种运行模式:交互模式  和  批处理模式

openssl version:程序版本号

命令大致分为三类:

标准命令:子命令 enc, ca, req, …

消息摘要命令:子命令 dgst …

加密命令:子命令 enc …

查看更多子命令   openssl ? 

 

1、对称加密:

 

工具:openssl enc, gpg

算法:3des, aes, blowfish, twofish

 

enc命令

帮助:man enc

加密:  openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher

解密:  openssl enc -d -des3 -a -salt -in testfile.cipher -out testfile 生成新文件

 

-e    表示加密

-d    表示解密

-in /PATH/TO/FILE   要加密的文件

-out /PATH/TO/FILE  加密后生成新文件;不加这个选项就只有标准输出,不生成文件

-pass STRING  表示对称加密的秘钥是什么

-a|-base64   表示以base64文本格式进行编码 (大小写字母 / 及 + 的表现形式,不够六位用=补足)

-salt     加杂质使乱码  

 

2、单向加密:

 

工具:md5sum,sha1sum,sha224sum,sha256sum…

openssl dgst

 

dgst命令:

帮助:man dgst

openssl dgst -md5 [-hex默认] /PATH/SOMEFILE

openssl dgst -md5 testfile

md5sum testfile  结果同上,格式不一样

 

 

生成用户密码:   passwd命令

帮助:man sslpasswd

openssl passwd -1  不指定salt,则随机生成

openssl passwd -1 -salt SALT(最多8位)    指定salt

openssl passwd -1 –salt centos 指定盐,则同样的密码加密后生成同样的字符串

图片1

 

生成随机数: rand命令

帮助:man sslrand

openssl rand -base64|-hex NUM

NUM: 表示字节数;-hex时,每个字符为十六进制,相当于4位二进制,出现的字符数为NUM*2  

注:-base64 二进制的六位,指定数字NUM若不是3的倍数,会用=补足

如下图:

图片2

随机数生成器:伪随机数字

键盘和鼠标,块设备中断

/dev/random:仅从熵池返回随机数;随机数用尽,阻塞

/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞

 

3、生成密钥对

 

生成密钥对儿:man genrsa

生成私钥

openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS

    (umask 077; openssl genrsa -out test.key -des 2048) 

生成私钥文件,并设定权限及加密私钥,小括号开启子进程,不改变父进程的umask值

将加密key解密并生成文件

  openssl rsa -in test.key -out test2.key

从私钥中提取出公钥

     openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE

例:openssl rsa –in test.key –pubout –out test.key.pub

 

 

公钥加密:

算法:RSA, ELGamal

工具:gpg,openssl rsautl(man rsautl

数字签名:

算法:RSA, DSA, ELGamal

密钥交换:

算法:dh

DSA: Digital Signature Algorithm

DSS:Digital Signature Standard

RSA:

 

三、创建CA和申请证书

 

创建私有CA:

openssl的配置文件:/etc/pki/tls/openssl.cnf  其中定义了openssl完成CA工作时的相关属性定义

1474551915553921

三种策略:

匹配match:要求申请填写的信息跟CA设置信息必须一致

支持supplied:必须填写这项申请信息

可选optional:可有可无

 

1、创建所需要的文件     (服务器端)   掌握!!!

 

touch /etc/pki/CA/index.txt    生成证书索引数据库文件,内容可为空,但必须有,否则会报错

echo 01 > /etc/pki/CA/serial    指定第一个颁发证书的序列号 没有会报错,十六进制数

 

2、 CA自签证书     (服务器端)     掌握!!!

 

生成私钥

cd /etc/pki/CA/  后续创建的文件夹和目录都要求在此目录下

(umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)   目录及文件名定死了

 

生成自签名证书

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

-x509表示自签名,没有表示申请,签名证书路径名称定死  交互式命令

直接cat /etc/pki/CA/cacert.pem   base64编码看不懂

 

-new: 生成新证书签署请求

-x509: 专用于CA生成自签证书

-key: 生成请求时用到的私钥文件

-days n:证书的有效期限

-out /PATH/TO/SOMECERTFILE: 证书的保存路径

 

  3、颁发证书     掌握!!!

在需要使用证书的主机生成证书请求

 

给web服务器生成私钥    (客户端)

(umask 066; openssl genrsa -out /etc/pki/tls/private/test.key 2048)   路径和名字没规定

 

生成证书申请文件   (客户端)

openssl req -new -key /etc/pki/tls/private/test.key -out /etc/pki/tls/test.csr  交互式命令

-days 365这里不写,有效期由颁发者决定

 

将证书请求文件传输给CA   (客户端)

 scp /etc/pki/tls/test.csr IP:/PATH/TO

 

CA签署证书,并将证书颁发给请求者    (服务器端)

openssl ca -in /tmp/test.csr out /etc/pki/CA/certs/test.crt -days 365  目录定死,有效期默认一年

注意:默认国家,省,公司名称三项必须和CA一致,若想不一致可以更改配置文件设定

 

查看证书中的信息:   (服务器端)

openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|issuer|subject|serial|dates 

         参数:Text格式查看、单看颁发人、单看颁发对象、单看编号、单看有效期

 

查看指定编号的证书状态    (服务器端)

openssl ca -status SERIAL

补充:cat /etc/pki/CA/index.txt 查看所有证书  行首带V表示有效,吊销R

或者传入Windows电脑,改后缀为.crt或 .cer才会变证书图标,即可查看

安装证书:双击证书图标,安装过程中要出现安全警告才正确!在控制面板-Internet选项-内容查看

 

4、吊销证书     (了解)

 

在客户端获取要吊销的证书的serial

openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject

 

在CA上,根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致,吊销证书:

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

 

指定第一个吊销证书的编号,注意:第一次更新证书吊销列表前,才需要执行

echo 01 > /etc/pki/CA/crlnumber

 

更新证书吊销列表

openssl ca -gencrl -out /etc/pki/CA/crl.pem

 

查看crl文件:

openssl crl -in /etc/pki/CA/crl.pem -noout -text

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/99795

发表评论

登录后才能评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班