OpenSSL

一、什么是OpenSSL

在电脑网络上,OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通讯,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。其主要库是以C语言所写成,实现了基本的加密功能,实现了SSL与TLS协议。

OpenSSL由三部分组成:

    libencrypto库

    libssl库

    openssl多用途命令行工具

二、OpenSSL加密算法和协议

1、对称加密算法

    特性:

        加密、解密使用同一个密钥

        将原始数据分割成为固定大小的块,逐个进行加密

    缺陷:

        密钥过多

        密钥分舵困难

 常用算法:

    DES、3DES、AES、Blowfish、Twofish等等

2、公钥加密算法

    密钥分为公钥与私钥:

        公钥:从私钥中提取产生;可以公开给所有人

        私钥:通过工具闯将,使用者自己留存,必须保证其私密性

        特点:用公钥加密的数据,只能使用与之对应的私钥解密,反之亦然

    用途:

        数字签名:主要用于让接收方确认发送放的身份

        密钥交换:发送发用对方公钥加密一段对称密钥,并发送给对方

    算法:

        RSA:1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的,RSA就是他们三人姓氏开头字母拼在一起组成的。

        DSA:Digital Signature Algorithm 数字签名算法

3、单向加密

    特性:定长输出、雪崩效应

        # 雪崩效应指,其中以为发生变化,都会给结果带来翻天覆地的变化

    功能:数据完整性

    算法:

        md5:Message Digest 5, 128bits 消息摘要

        sha1:Secure Hash Algorithm 1, 160bits 安装的hash算法

        sha224、sha256、sha384、sha512(都为sha家族,224长度为224位,其他意义相同)

4、密钥交换

    公钥加密:通过获取对方的公钥对数据进行加密,只有对方的私钥才能解密

    DH算法(Deffie-Hellman):由两个人名组成

三、公钥加密解密过程图解

spacer.gif公钥加密过程_看图王.png

四、各加密算法管理命令

openssl:默认在Centos 7上面默认安装,可以直接使用,有很多子命令可以分别管理。

    子命令分为三类:

        标准命令

        信息摘要命令(dgst命令)

        加密命令(enc子命令)

    标准命令:enc,ca,req,genrsa等等

1、对称加密

    工具:openssl enc

    支持的算法:3des,aes,blowfish,towfish

    enc命令:

        加密:# openssl  enc  -e  -des3  -a  -salt  -in fstab   -out fstab.ciphertext

解密:# openssl  enc  -d  -des3  -a  -salt  -out fstab   -in fstab.ciphertext

spacer.gif对称加密解密.gif

2、单向加密

    工具:openssl dgst,md5sum,sha1sum,sha224sum等等

    dgst命令:

        # openssl  dgst  -md5  /PATH/TO/SOMEFILE

# openssl dgst -md5 /etc/fstab 
MD5(/etc/fstab)= e5ee5d6d40cf1983771c8650df455135
# md5sum /etc/fstab 
e5ee5d6d40cf1983771c8650df455135  /etc/fstab
# sha1sum /etc/fstab 
5f3a9f070f56a355ca68d86028c95dca5c4bcb2f  /etc/fstab
# sha224sum /etc/fstab 
fd8e80dc3e6479d254b50e7f0c05d7897a99ed951c3f81ec1fec362a  /etc/fstab
# sha512sum /etc/fstab 
9893ded3aa749d79e6e714dd3ca81454e05243f7655633cef06719365c1e7b27a372705752ac751a2adeced881952627d02767c9aa305db31ee1de87b428804a  /etc/fstab

3、生成用户密码

    工具:passwd,openssl passwd

# openssl passwd -1 -salt $(openssl rand -hex 10)
Password: 
$1$0d9d2f2e$Ty3KtAwkijG5zIU08ixay.

4、生成随机数

    工具:openssl rand

# openssl  rand  -hex  NUM

# openssl  rand  -base  NUM

# openssl rand -hex 10
6d989f629da63bb40948
# openssl rand -base64 10
3JXUSebo5uMlfw==

# 注意复制base64的随机数时,不要复制后门的“==”号

5、公钥加密

    生成密钥:

生成私钥: # (umask 077;  openssl  genrsa  -out  /PATH/TO/PRIVATE_KEY_FILE  NUM_BITS)

提出公钥: #  openssl  rsa  -in  /PATH/FROM/PRIVATE_KEY_FILE  -pubout

    # 注意:因为私钥必须保证其安全,所以其umask应该为077,放在括号中执行,表示在子shell中执行,可以不影响当前shell

# (umask 077;openssl genrsa -out /opt/http)
Generating RSA private key, 1024 bit long modulus
.........................++++++
...............++++++
e is 65537 (0x10001)
# openssl rsa -in /opt/http -pubout
writing RSA key
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCw554Lm/+x+eGJRfqk5YpDLkLj
NvAO2t8P6DQHc5l2pnm1vw6KnWTPB0V4S2P87E2fI1QV0RplTD832FBpina/fsz4
iGjv1CfjA8kwQ0wMJfrqqtOHAsmeKUmAqJvtSGhLy8b0Lx1AWxGBPKg32PmmhCQE
tnROn/cXwb8Od80unwIDAQAB
-----END PUBLIC KEY-----

五、PKI及创建私有CA

PKI:公钥基础设施(Public Key Infrastructure)

        签证机构:CA

        注册机构:RA

        证书吊销列表:CRL

        整数存取库

SSL:Secure sockets Layer

    由Netscape公司在1994年研发,其版本有V1.0,V2.0,V3.0 其中V3.0最为主流,但是前一段时间google验证出其有bug,所以建议使用TLS

TLS:Transport Layer Security

    有IETF研发:其版本有V1.0, V1.1, V1.2, V1.3主流版本为V1.2

创建私有CA:

    openssl命令:

        配置文件:/etc/pki/tls/openssl.cnf

    在确定配置为CA的服务上生成一个自签证书,并为CA提供所需要的目录及文件即可

    步骤:

        (1) 生成私钥;

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

(2) 生成自签证书;

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

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

-x509:生成自签格式证书,专用于创建私有CA时;

-key:生成请求时用到的私有文件路径;

-out:生成的请求文件路径;如果自签操作将直接生成签署过的证书;

-days:证书的有效时长,单位是day;

(3) 为CA提供所需的目录及文件;

    # mkdir  -pv  /etc/pki/CA/{certs,crl,newcerts}
    # touch  /etc/pki/CA/{serial,index.txt}
    # echo  01 > /etc/pki/CA/serial

测试并申请签署证书:

    步骤:(以httpd为例)

(1) 用到证书的主机生成私钥;

# mkdir  /etc/httpd/ssl 
# cd  /etc/httpd/ssl
# (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  -days  365[object Object]

wKioL1cOXu7Dp-eGABBw7VXrPRg077.gif

(3) 将请求通过可靠方式发送给CA主机;

这里使用scp(本次仅用于测试使用,密钥传输时必须保证其安全,可以使用u盘复制)

# scp httpd.csr 172.18.250.108:/opt/
root@172.18.250.108's password: 
httpd.csr                                              100% 1094     1.1KB/s   00:00

(4) 在CA主机上签署证书;

# openssl ca  -in  /tmp/httpd.csr  -out  /etc/pki/CA/certs/httpd.crt  -days  365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1(0x2)
        Validity
            Not Before: Apr 10 15:45:54 2016 GMT
            Not After : Apr 10 15:45:54 2017 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = beijing
            organizationName          = ops
            organizationalUnitName    = ops
            commonName                = ops.com
            emailAddress              = admin@ops.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                08:A3:DD:98:D3:E0:42:58:5E:B7:24:43:6C:3D:B1:D8:02:34:16:46
            X509v3 Authority Key Identifier: 
                keyid:75:63:44:2C:46:80:2F:84:CE:EF:C6:F1:F2:E7:75:2E:EF:17:37:C2
Certificate is to be certified until Apr 10 15:45:54 2017 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

查看证书中的信息:

# openssl  x509  -in /etc/pki/CA/certs/httpd.crt  -noout  -serial  -subject

对于SSL就写到这里了,感觉写的不错可以给点个赞。 
 作者:Ace QQ1257465991 Linux运维攻城狮一只 
 Q/A:如有问题请慷慨提出

原创文章,作者:Ace,如若转载,请注明出处:http://www.178linux.com/15242

(0)
上一篇 2016-04-25 21:15
下一篇 2016-04-26 11:02

相关推荐

  • 第五周作业

    1、简述rpm与yum命令的常见选项,并举例 rpm 命令 linux的的包管理器,用于对rpm软件包,进行安装、升级、卸载、查询、校验等操作。 使用语法: rpm [OPTIONS] [PACKAGE_FILE] 常用选项: 安装: -i,–install 升级: -U,–update,-F,–freshen 卸载: -…

    Linux干货 2017-12-14
  • 马哥教育网络班21期-第四周课程练习

    Do one thing at a time,and do well. 小僧近期忙的去尿尿的时间都要挤出来…..! 无人能理解 zZzz 复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 编辑/etc/group文件,添加组hadoop。 手动编辑/etc/pass…

    Linux干货 2016-07-29
  • 文本查看及处理工具

    文本查看及处理工具 wc wc命令用来计算数字。利用wc指令我们可以计算文件的Byte数、字数或是列数 语法 wc(选项)(参数) 选项 -c或–bytes或——chars:只显示Bytes数; -l或——lines:只显示列数; -w或——words:只显示字数。 参数 文件:需要统计的文件列表 实例 [root@localhost tmp]# cat …

    Linux干货 2018-03-18
  • KVM基本功能

    前言:本来想写出关于KVM的精品文章,然而学的时间不够长,理解也不够透彻。所以有关KVM的高级功能只能等下一次在写。本次只涉及到KVM的基础核心功能,平时经常会使用的功能.。 一、环境准备: 1、BIOS启用Virtualication。 2、在linux系统上查看系统是否支持硬件虚拟化。Intel系列CPU支持虚拟化标识为vmx,AMD系列CPU标识为sv…

    Linux干货 2015-10-27
  • 网络班第27期第一周作业

    1、         描述计算机的组成及其功能 CPU:主要由控制器和运算器组成,其他还有寄存器和缓存等。 控制器:其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。 运算器:功能是对数据进行各种算术运算和逻…

    2017-07-29
  • rpm命令详解及和yum之间的关系

        RPM 全名是“ RedHat Package Manager ”简称则为 RPM 顾名思义,当初这个软件管理的机制是由 Red Hat 这家公司发展出来的。 RPM 是以一种数据库记录的方式来将你所需要的软件安装到你的 Linux 系统的一套管理机制。    &nbsp…

    Linux干货 2016-08-21