三、加密算法与openssl的使用

3.1、加密算法的分类

加密是以某种特殊的算法改变原有的信息数据使得未授权的用户即使获得了已加密的信息但因不知解密的方法仍然无法了解信息的内容。在互联网上对数据的加密主要是保证三个方面内容数据的保密性、完整性以及对方的身份验证。

加密类型分为两种对称加密与非对称加密。


对称加密双方采用共同密常见算法有DES、3DES、AES等

特性加密、解密使用同一个密钥将原始数据分割成固定大小的块逐个进行加密。

缺陷密钥过多密钥分发。


非对称加密密钥是成对儿出现常见算法有RSA, DSA, ELGama等

公钥公开给所有人pubkey    私钥自己留存必须保证其私密性secret key

特点用公钥加密的数据只能使用与之配对儿的私钥解密

主要应用

数字签名主要在于让接收方确认发送方身份

密钥交换发送方用对方的公钥加密一个对称密钥并发送给对方

数据加密加密数据信息


单向加密常见算法MD5,SHA1等。

只能加密不能解密提取数据指纹

特性定长输出、雪崩效应原数据的微小改变导致加密后的数据指纹完全变化。

在互联网上进行上方的数据交互时为了保证数据的保密性与完整性以及确认对方的身份需要进行一套复杂的加密算法。


1、对需要发送的数据采用单向加密算法提取摘要信息利用A的私钥加密摘要信息加密后的摘要信息成为数字签名放在明文之后。

2、在利用A的私密加密成为密文。

3、再使用对称加密使用B公钥加密密码成为数据信封完成保密性。

3.2、SSL协议与openssl

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全Transport Layer SecurityTLS是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。主要提供的服务为认证用户和服务器确保数据发送到正确的客户机和服务器加密数据以防止数据中途被窃取维护数据的完整性确保数据在传输过程中不被改变。

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

Openssl的组成主要可以分为三个部分

libcrypto: 加密库

libssl: TLS/SSL实现基于会话的、实现身份认证、数据机密性和会话完整性的TLS/SSL库

openssl: 多用途命令行工具实现加密的工具。

openssl命令的用法


openssl command [ command_opts ] [ command_args ]

openssl [ list-standard-commands | list-message-digest-commands | list-cipher-commands         | list-cipher-algorithms | list-message-digest-algorithms | list-public-key-

algorithms]

STANDARD COMMANDS

asn1parse、ca、ciphers、cms、crl、crl2pkcs7、dgst、dh、dhparam、dsa、dsaparam

ec         ecparam    enc       engine    errstr    gendh    gendsa

genpkey    genrsa     nseq      ocsp      passwd    pkcs12   pkcs7

pkey       pkeyparam  pkeyutl   rand      req       rsa      rsautl

s_client   s_server   s_time    sess_id   smime     speed    spkac

ts         verify     x509

MESSAGE DIGEST COMMANDS

md2      md5      mdc2    rmd160   sha   sha1    sha224

sha256   sha384   sha512

ENCODING AND CIPHER COMMANDS

base64    Base64 Encoding

bf bf-cbc bf-cfb bf-ecb bf-ofb

cast cast-cbc

cast5-cbc cast5-cfb cast5-ecb cast5-ofb

des des-cbc des-cfb des-ecb des-ede des-ede-cbc des-ede-cfb des-ede-ofb des-ofb

des3 desx des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb

idea idea-cbc idea-cfb idea-ecb idea-ofb

rc2 rc2-cbc rc2-cfb rc2-ecb rc2-ofb

rc4

rc5 rc5-cbc rc5-cfb rc5-ecb rc5-ofb

对称加密


openssl enc -des3 -a -salt -in /path/to/input_file  -out cipher_file    #加密

openssl enc -d -des3 -a -salt -in /path/to/cipher_file  -out clear_file #解密

[[email protected] home]# cat test.py    #查看文件内容
#!/usr/bin/python3

def add(num1,num2):

        ‘‘‘
        >>> add(12,23)
        35
        ‘‘‘

        return num1+num2

if __name__ == ‘__main__‘:
        import doctest
        doctest.testmod()
[[email protected] home]# openssl enc -des3 -a -salt -in test.py -out cipher.py  #对文件加密
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:
[[email protected] home]# cat cipher.py                 #加密后的文档
U2FsdGVkX1/UmevKTgGU4h+9lzx024oU9uI9ifaddQZ008Sg+FGEpFVXMZe77/NH
REcx8lgonK+05Qilx9lbFtIO0qY8jsEQF9yyiQEF4H0sYzIVnh5W5fq6k3RvZRfF
pPaIw0L3OMdj+N8i5hxLsjusD/aPvpAtzial/VDOFZ8TJulXotzpRMjUvlKum8Og
MUxzTNwAHKZbAaPL2vdQoPpvLuM3bL2VYTkJyn/tWv0=
[[email protected] home]# openssl enc -d -des3 -a -salt -in cipher.py -out test1.py #解密
enter des-ede3-cbc decryption password:
[[email protected] home]# cat test1.py                  #解密后的文档
#!/usr/bin/python3

def add(num1,num2):

        ‘‘‘
        >>> add(12,23)
        35
        ‘‘‘

        return num1+num2

if __name__ == ‘__main__‘:
        import doctest
        doctest.testmod()
[[email protected] home]#

单向加密


openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] [-out filename]

somefile

[[email protected] home]# ls
date     loganalyzer-3.6.6  python_web  shell    wswp-code
dow.zip  __pycache__        samba       test.py
[[email protected] home]# openssl md5 test.py    #提取test.py的md5特征码
MD5(test.py)= cafc9ca93649c2b9d67f33075402ce24

公钥加密公钥加密(一般不会用来加密数据)私钥解密数据

密钥交换获得对方的公钥、数据加密使用对方的公钥、身份认证使用自己的私钥


openssl genrsa -out /PATH/TO/KEYFILENAME NUMBITS 生成私钥rsa

openssl rsa -in /PATH/TO/KEYFILENAME -pubout提取公钥

[[email protected] home]# openssl genrsa -out private.pem 2048  #生成私钥
Generating RSA private key, 2048 bit long modulus
..........................................................+++
.................................................+++
e is 65537 (0x10001)
[[email protected] home]# openssl rsa -in private.pem -pubout -out pub.pem  #私钥中提取公钥
writing RSA key
[[email protected] home]# ls
cipher.py  dow.zip            private.pem  __pycache__  samba  test.py
date       loganalyzer-3.6.6  pub.pem      python_web   shell  wswp-code
[[email protected] home]# cat date 
ls -l
date
[[email protected] home]# openssl rsautl -encrypt -in date -inkey pub.pem -pubin -out date.en    #利用公钥加密date文件
[[email protected] home]# cat date.en   #加密后文件
)L:vsnWiyc$[%v4,ogqNwktU1]W}YB&u$q {F[[email protected] home]# 
[[email protected] home]# openssl rsautl -decrypt -in date.en -inkey private.pem -out date.de    #使用私钥解密文件
[[email protected] home]# cat date.de  #解密后文件
ls -l
date

3.3、签发证书与CA

在网上通信时,通常需要将数据进行加密,对于一个使用了SSL的web网站拥有者必须要产生一个CSR(Certificate Signing Request,签发证书请求),CSR是一个数字文件,其中包含一个公钥和一个公司名称,‘证书‘必须由一个称为CA(Certificate Authority,证书授权机构)的可信来源签发。

CA服务器的生成

1、确定CA的工作目录

[[email protected] CA]# vim /etc/pki/tls/openssl.cnf 
certificate     = $dir/cacert.pem       # The CA certificate
serial          = $dir/serial           # The current serial number
crlnumber       = $dir/crlnumber        # the current crl number
                                        # must be commented out to leave a V1 CRL
...
[ CA_default ]
dir             = /etc/pki/CA           # Where everything is kept  #工作目录
...

2、自签证书

[[email protected] ~]# cd /etc/pki/CA/
[[email protected] CA]# ls
certs  crl  newcerts  private
[[email protected] CA]# umask  077
[[email protected] CA]# openssl  genrsa -out private/cakey.pem 2048   #生成私钥
Generating RSA private key, 2048 bit long modulus
.......................+++
...............................................................+++
e is 65537 (0x10001)
[[email protected] CA]# openssl rsa -in private/cakey.pem -text -noout  #可以查看公钥
Private-Key: (2048 bit)
modulus:
    00:a3:a5:32:18:d8:3f:8a:6a:b7:8c:f2:3f:85:b9:
    d5:ea:d4:21:47:c3:11:9c:1b:65:22:b8:02:ac:2f:
    51:e0:d5:0a:bd:e1:d9:5c:de:cd:80:3a:3a:b3:15:
    c0:38:db:b4:b7:4d:34:32:6f:7a:90:85:8a:b5:68:
    c2:04:9c:71:e9:0f:5a:e4:06:77:93:ef:5b:be:32:
    ba:0f:d8:aa:90:19:b0:2f:f2:13:06:a2:7b:a3:72:
    c7:28:34:a3:d9:0f:d7:35:1b:28:4e:73:cf:5c:ca:
    7e:4d:56:c1:56:82:83:c2:c7:d9:31:f5:9a:0d:9a:
    53:63:21:40:99:81:ee:6a:80:37:47:4a:b0:4f:5e:
    7c:3b:e1:79:85:de:99:d7:85:fd:f8:5c:c8:c7:16:
    7f:d3:b6:36:1e:54:08:be:7a:27:a2:3c:c4:7c:c2:
    76:e8:26:56:17:24:3c:f4:cb:ba:80:97:f1:17:11:
    6b:2d:b5:93:df:04:54:14:dc:1f:cf:49:43:31:f7:
    fe:ae:99:a0:34:cc:d1:85:61:c5:55:e7:27:4b:60:
    3d:6e:a4:71:1a:43:58:9b:3f:27:29:66:04:41:c4:
    7e:41:bb:08:82:be:ec:68:56:37:b1:fa:7d:53:09:
    10:8a:4c:39:81:28:c2:83:33:88:63:f0:3e:bb:f4:
    bb:37
...
[[email protected] CA]# openssl req -x509 -new -key private/cakey.pem -out cacert.pem -days 365    #生成证书
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.‘, the field will be left blank.
-----
Country Name (2 letter code) [XX]:CH
State or Province Name (full name) []:AH   
Locality Name (eg, city) [Default City]:AQ
Organization Name (eg, company) [Default Company Ltd]:UJS
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server‘s hostname) []:
Email Address []:

3、创建需要的文件:

[[email protected] CA]# touch index.txt serial crlnumber
[[email protected] CA]# echo 01 > serial
[[email protected] CA]# ls
cacert.pem  certs  crl  crlnumber  index.txt  newcerts  private  serial

证书申请方:

1、为某服务生成密钥:

[[email protected] CA]# cd /etc/ssh/
[[email protected] ssh]# ls
moduli       ssh_host_dsa_key      ssh_host_key.pub
ssh_config   ssh_host_dsa_key.pub  ssh_host_rsa_key
sshd_config  ssh_host_key          ssh_host_rsa_key.pub
[[email protected] ssh]# mkdir ssh
[[email protected] ssh]# cd ssh
[[email protected] ssh]# umask 077
[[email protected] ssh]# openssl genrsa 1024 >ssh.key   #生成秘钥
Generating RSA private key, 1024 bit long modulus
....................++++++
.............++++++
e is 65537 (0x10001)
[[email protected] ssh]# openssl req -new -key ssh.key -out ssh.csr    #生成证书签署请求
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.‘, the field will be left blank.
-----
Country Name (2 letter code) [XX]:CA
State or Province Name (full name) []:AH
Locality Name (eg, city) [Default City]:AQ
Organization Name (eg, company) [Default Company Ltd]:UJS
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server‘s hostname) []:www.mylinux.com
Email Address []:

Please enter the following ‘extra‘ attributes
to be sent with your certificate request
A challenge password []:123456
An optional company name []:mylinux

2、将此请求通过某方式传递给CA服务器

#scp ssh.csr  [email protected]:/path/to/somewhere(复制到CA服务器)

3、CA签署证书(在CA服务器上操作),再发送给申请方

[[email protected] ssh]# openssl ca -in ssh.csr -out ssh.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 (0x1)
        Validity
            Not Before: May 16 20:22:46 2017 GMT
            Not After : May 16 20:22:46 2018 GMT
        Subject:
            countryName               = CA
            stateOrProvinceName       = AH
            organizationName          = UJS
            commonName                = www.mylinux.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                02:46:26:FF:10:D9:7F:8A:70:68:41:52:E1:6F:35:46:7C:FF:A6:BB
            X509v3 Authority Key Identifier: 
                keyid:0A:04:7A:44:C6:8B:69:FD:7E:B0:F3:E4:5A:90:F4:DE:83:9B:A1:95
Certificate is to be certified until May 16 20:22:46 2018 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
[[email protected] ssh]# ls
ssh.crt  ssh.csr  ssh.key
# scp vsftpd.crt  [email protected]:/path/to/somewhere(复制到申请方)

openssl中有各后缀名的文件的含义

.key格式:私有的密钥

.crt格式:证书文件,certificate的缩写

.csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写

.crl格式:证书吊销列表,Certificate Revocation List的缩写

.pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式

时间: 2024-10-24 03:05:42

三、加密算法与openssl的使用的相关文章

openssl之对称加密算法命令详解

1.对称加密算法概述 openssl的加密算法库提供了丰富的对称加密算法,我们可以通过openssl提供的对称加密算法指令的方式使用,也可以通过调用openssl提供的API的方式使用. openssl的对称加密算法指令主要用来对数据进行加密和解密处理,openssl基本上为所有其支持的对称加密算法都提供了指令的方式的应用,这些应用指令的名字基本上都是以对称加密算法本身的名字加上位数.加密模式或者其他属性组合而成.例如DES算法的CBC模式,其对应的指令就是des-cbc.可以通过命令查看当前版

https学习笔记三----OpenSSL生成root CA及签发证书

在https学习笔记二,已经弄清了数字证书的概念,组成和在https连接过程中,客户端是如何验证服务器端的证书的.这一章,主要介绍下如何使用openssl库来创建key file,以及生成root CA及签发子证书.学习主要参考官方文档:https://www.feistyduck.com/library/openssl-cookbook/online/ch-openssl.html# 一.openssl 简介 openssl 是目前最流行的 SSL 密码库工具,其提供了一个通用.健壮.功能完备

openssl+http实现https

openssl详解及实现https openssl详解及实现https OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法.常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用. 秘钥算法和协议: 对称加密: 加密和解密使用同一个密钥,原始数据分成固定大小块,算法不同 秘钥过多,秘钥分发困难 DES,3DES  AES  Blowfish  Twofish  IDEA  RC6 CAST5 公钥加密:    分公钥与私钥        公钥:从私钥中提取产

用openssl对文件加密及解密

Openssl是一个开源的用以实现SSL协议的产品,它主要包括了三个部分:密码算法库.应用程序.SSL协议库.Openssl实现了SSL协议所需要的大多数算法. 下面我将单介绍使用Openssl进行文件的对称加密操作. 一.Openssl支持的加密算法有: -aes-128-cbc -aes-128-cfb -aes-128-cfb1 -aes-128-cfb8 -aes-128-ecb -aes-128-ofb -aes-192-cbc -aes-192-cfb -aes-192-cfb1 -

Linux学习之路-OpenSSL和OpenSSH

OpenSSL和OpenSSH 现在电子商务.网络购物的火热现象,背后离不开各种加密技术的应用,各种加密技术的组合应用给互联网的交易带来安全的保障.下面我们来逐一了解这套安全体系. 互联网安全通讯基础:加密算法 按类型可以分为对称加密.非对称加密.单向加密三种. l  对称加密    加密和解密使用同一个密码,安全性依赖于密钥而非算法.加密速度快,常用于大数据的加密.缺点是秘钥多的时候不方便记忆使用,秘钥传输也不安全.常见的算法有DES.3DES.AES.Blowfish.Twofish.IDE

HP Unix openssl、openssh 升级

一.升级前请先启用telnet服务!防止远程ssh连接断开后无法连到服务器上. 二.准备好下面的5个包,这几个包是升级openssh和openssl所依赖的. 下面的包的官网下载地址是http://hpux.connect.org.uk/hppd/packages_popular.html gettext-0.19.8.1-ia64-11.31.depot.gz  libiconv-1.14-ia64-11.31.depot.gz openssh-7.4p1-ia64-11.31.depot.g

常见加密算法分类,用途,原理以及比较

摘自:http://blog.csdn.net/zuiyuezhou888/article/details/7557048   密码学简介 据记载,公元前400年,古希腊人发明了置换密码.1881年世界上的第一个电话保密专利出现.在第二次世界大战期间,德国军方启用“恩尼格玛”密码机,密码学在战争中起着非常重要的作用. 随着信息化和数字化社会的发展,人们对信息安全和保密的重要性认识不断提高,于是在1997年,美国国家标准局公布实施了“美国数据加密标准(DES)”,民间力量开始全面介入密码学的研究和

基于CentOS 6.5   加密、解密、openssl的基本应用及CA的实现过程

一.加密和解密 1.加密方式有:对称加密.单向加密.公钥加密 对称加密: 工具:gpg openssl enc 加密:openssl enc -des3 -a -salt -in /ets/fstab -out /tmp/fstab.cipher 解密:openssl enc -d -dec3 -a -salt -in /tmp/fstab.cipher  -out 文件 单向加密: 工具:sha1sum,md5sum,openssl dgst openssl dgst [-md5|-md4|-

openssl 升级到1.0.1g

先进行支撑包的安装: yum install -y zlib openssl升级步骤: 一. 首先通过 #openssl version –a 查看系统中存在的OpenSSL版本号 1.下载最新版本的openssl源码包 # wget ftp://ftp.openssl.org/source/openssl-1.0.1g.tar.gz 二. 安装openssl 1. tar –xzvf openssl-1.0.1g.tar.gz 2. cd openssl-1.0.1g 3. ./config