阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

加密、解密,以及OpenSSL建立私有CA

215次阅读
没有评论

共计 11290 个字符,预计需要花费 29 分钟才能阅读完成。

一、常见算法

常见的加密算法和协议有对称加密,非对称加密,单向加密

1、对称加密:加密和解密使用一个密钥;依赖于算法和密钥,算法是可以公开的,密钥是不能公共的,因为加密是依赖于密钥的。安全性依赖于密钥,而非算法;

常见算法:

DES(Data Encryption Standard,56bits)、3DES、AES(Advanced EncryptionStandard)、Blowfish、Towfisk、IDEA、RC6、CASTS

特性:

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

2、将明文分隔成固定大小的块,逐个进行加密;

缺陷:

1、密钥过多;

2、密钥分发;

2、非对称加密:公钥加密

密码对儿:私钥(secret key)和公钥(public key);私钥仅允许个人使用;公钥是公开给所有获取;

公钥和私钥不是在创建时就成对出现的,而公钥是从私钥中提取出而来;创建时只需要创建私钥,从私钥中使用某种工具,把公钥从私钥中提取出来就可以了。

工作特性:使用公钥加密的数据,只能使用与此公钥配对儿的私钥解密,反之亦然。

用处:

1、身份认证:私钥拥有者用自己的私钥加密的数据,只要用其公钥解密,即可认证其身份;私钥加密不能保证数据的安全性,只有用于身份认证;

2、密码交换:被通信方通信之前,首先获取到对方的公钥,自己生成一个加密密码(对称加密密码),用对方的公钥加密,并发送给对方;

3、数据加密:

为什么不用非对称加密来加密数据呢?因为非对称加密数据比起对称加密要慢上 10^3 倍,都是用对称加密来加密数据,在用非对称加密来加密对称加密的密钥。

常用算法:

RSA、DSA、ELGamal

特性:

1、密钥长度较大,例如 512bits,2048,4096bits

2、加密解密分别使用密钥对儿中的密钥相对进行;

3、常用于数字签名和密钥交换;

3、单向加密

提出数据的特征码;每一个数据的都一个唯一的特性码,严重的依赖于算法。

特性:

1、定长输出:无论原来的数据是多大级别,其加密结果长度一样;

2、雪崩效应;原始数据的微小改变,将会导致结果巨大变化;

3、不可逆;

算法:

MD5、SHA1、SHA256、SHA384、SHA512

单向加密已经被运行到 CentOS 操作系统中的用户名密码加密 /etc/shadow 文件中,其中 CentOS 5 运行的 MD5,CentOS 6 运行的 SHA512。

用处:数据完整性

二、加密解密通信过程

加密、解密,以及 OpenSSL 建立私有 CA加密、解密,以及 OpenSSL 建立私有 CA

三、数字证书的格式(x.509 v3):

加密、解密,以及 OpenSSL 建立私有 CA

版本号(version)

序列号(serial number):是一个整数,CA 使用唯一标识此证书的号码;

签名算法标志(Signature algorithmidentifier):它是一个带参数的,用于给证书签名本身说明,主要是让用户验证证书是可靠的

发行者的名称:即 CA 自己的名称

有效期:两个日期,起始日期和终止日期;

证书主体名称:证书拥有者的自己名字

证书主体公钥信息:证书拥有者自己的公钥

发行商的唯一标识:(可选)

证书主体的唯一标识:(可选)证书拥有者自己的数字标识

扩展信息:

签名:CA 对此证书的数字签名,用于验证证书是自己的签发的

四、https

加密、解密,以及 OpenSSL 建立私有 CA

客户端和服务端进行通信时要进行三次握手,ssl 也是基于 TCP 来实现的,在进行三次握手之后客户端向服务端要证书,服务端把证书给客户端,此时客户端拿到证书进行验证,先用本地存的根证书找看哪个 CA 给证书签的证,于是在本地找 CA 的证书,如果本地有说明我们信任此证书,接着用 CA 去解密证书中的数字签名,能解密说明此证书是 CA 发的,解密的结果是特征码,然后在用同样的单向加密算法去计算证书的特征码,并比较,比较之后发现结果相同,说明证书可靠,否则证书不可靠;在验证访问的域名(FQDN)必须与证书中的主体保持一致,否则客户端会认为拿的不是服务端的证书,在验证有效期等;

如果以上都是合法的,在从证书中提取对方的公钥信息,并且双方开始建立协商,双方使用哪种对称加密算法,使用哪种单向加密算法,使用哪种公钥加密算法;而后客户端生成一个临时加密密钥,并使用对方的公钥加密之后发送给服务端,于是服务器就已经拿到客户端访问请求的页面,把页面使用对称加密后发送给客户端,客户端拥有私钥解密就能在浏览器中显示;

加密、解密,以及 OpenSSL 建立私有 CA

第一步:验证证书主体、有效期、有没有在证书吊销列表中等;

第二步:从证书中提取对方的公钥信息;

第三步:生成对称加密的密钥,使用对方的公钥加密密钥,传送给服务端;

第四步:服务端使用私钥解密密文;

第五步:使用对称加密密钥加密客户端请求页面,发送给客户端;

第六步:客户端使用对称加密密钥解密请求页面,并在浏览器显示页面;

通过 OpenSSL 提供 FTP+SSL/TLS 认证功能,并实现安全数据传输 http://www.linuxidc.com/Linux/2013-05/84986.htm

利用 OpenSSL 签署多域名证书 http://www.linuxidc.com/Linux/2014-10/108222.htm

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2015-04/116773p2.htm

五、使用 OpenSSL 构建私有 CA
  CA 和申请证书都在同一台机器上进行的。
1、CA 端操作流程
操作步骤:
    1、生成私钥文件;
    2、生成自签署证书;
    3、相关辅助文件
        touch/etc/pki/CA/index.txt
        echo01 > /etc/pki/CA/serial
再次说明:
(1)私钥用于签发证书时,向证书添加数字签名使用;
(2)证书:每个通信方都导入此证书至“受信任的证书颁发机构”;
1)、配置文件
  /etc/pki/tls/openssl.cnf,此文件格式为 INI 格式的
………省略……………
####################################################################
[ca]
default_ca      =CA_default        # The default casection
 
####################################################################
[CA_default]  #定义 Openssl 做为 CA 时自己的相关路径
 
dir            =/etc/pki/CA # Where everythingis kept  #指明 CA 自己的工作目录
certs          =$dir/certs  # Where the issuedcerts are kept #已颁发证书的存取位置
crl_dir        =$dir/crl    # Where the issuedcrl are kept #已吊销证书的吊销链表存取位置
database        =$dir/index.txt  # database indexfile.  #证书索引文件
#unique_subject = no          # Set to ‘no’ to allowcreation of
                    #several ctificates with same subject.
new_certs_dir  =$dir/newcerts    # default place fornew certs.  #新证书的存放位置
     
certificate    =$dir/cacert.pem  # The CAcertificate    #指 CA 自己证书文件名
serial          =$dir/serial  # The currentserial number #序列号,下一个要发的证书的序列号,每签一个序列号会怎么加 1
crlnumber      =$dir/crlnumber  # the current crlnumber  #吊销证书列表的编号
                  # mustbe commented out to leave a V1 CRL
crl            =$dir/crl.pem # The current CRL  #当前正在使用的吊销链
private_key    =$dir/private/cakey.pem# The private key  #CA 自己的私钥文件
RANDFILE        =$dir/private/.rand # private randomnumber file #随机数的获取位置
 
x509_extensions = usr_cert        # The extentions to add to thecert #定义了 x.509 的扩展信息中记录为“用户证书”
 
…………省略……………………

2)、工作目录
  /etc/pki/CA/
  注意:CentOS 要想构建 CA 必须是基于 /etc/pki/CA 目录进行
[root@node-2 ~]# cd /etc/pki/CA
[root@node-2 CA]# ll
total 16
drwxr-xr-x  2 root root4096 Oct 15  2014 certs        #证书文件存放位置,
drwxr-xr-x  2 root root4096 Oct 15  2014 crl          #证书吊销列表存取文件
drwxr-xr-x. 2 root root 4096 Oct 15  2014 newcerts      #新创建证书存取位置
drwx——. 2 root root 4096 Oct 15  2014 private        #CA 自己私钥存储位置

3)、创建 CA 自己的私钥
[root@node-2 CA]# pwd
/etc/pki/CA
[root@node-2 CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)
Generating RSA private key, 2048 bit longmodulus
………………………………………………..+++
…………..+++
e is 65537 (0x10001)
[root@node-2 CA]# ll ./private/
total 4
-rw——- 1 root root 1675 Apr 22 22:23cakey.pem

 
4)、生成一个自签署证书
  此自签署证书在 /etc/pki/tls/openssl.cnf 文件中定义必须放在 CA 目录下叫 cacert.pem;从私钥中提取公钥,并构建成证书签署请求,然后让 CA 给签署;
格式:openssl req -new -x509-key  /etc/pki/CA/private/cakey.pem -out/etc/pki/CA/cacert.pem -days #
      -x509:表示自签署证书,不加表示证书签署请求;
      -key:从那个私钥中自动提取出公钥,并创建一个证书签署请求;
      -days:指明给自己签署证书的有效期
12345678910111213141516171819202122 [root@node-2 CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days3360
You are about to be asked to enterinformation that will be incorporated
into your certificate request.
What you are about to enter is what is calleda Distinguished Name or a DN.
There are quite a few fields but you canleave some blank
For some fields there will be a defaultvalue,
If you enter ‘.’, the field will be leftblank.
—–
Country Name (2 letter code) [XX]:CN            #国家代码,必须使用两位数字来描述
State or Province Name (full name) []:HA          #省名或州名
Locality Name (eg, city) [Default City]:ZZ          #城市名
Organization Name (eg, company) [DefaultCompany Ltd]:MagEdu  #组织名或公司名
Organizational Unit Name (eg, section)[]:Ops    #部门
Common Name (eg, your name or your server’shostname) []:www.magedu.com  #此项很重要,证书主题自己的名字,别人和你通信是就使用此名字来联系你,而后你证书中的名字和通信时所使用名字必须要保持一致;否则就认为证书验证无法通过;
Email Address []:caadmin@magedu.com                    #主机的联系人
[root@node-2 CA]# ll
total 20
-rw-r–r–  1 root root 1395 Apr 22 22:40 cacert.pem
drwxr-xr-x  2 root root4096 Oct 15  2014 certs
drwxr-xr-x  2 root root4096 Oct 15  2014 crl
drwxr-xr-x. 2 root root 4096 Oct 15  2014 newcerts
drwx——. 2 root root 4096 Apr 22 22:23 private

注意:构建 Ca 是给通信方签发证书的

5)、生成相关的辅助文件
[root@node-2 ~]# cd /etc/pki/CA/
[root@node-2 CA]# ls
cacert.pem certs  crl  newcerts private
[root@node-2 CA]# touch index.txt
[root@node-2 CA]# echo 01 > serial
[root@node-2 CA]# cat serial
01

2、给节点发证书
操作步骤:
    1、节点申请证书
    在证书申请的主机上进行如下步骤;
(1)生成私钥
(2)生成证书签署请求;
(3)把请求发送给 CA;
    2、CA 签发证书
(1)验证请求者信息
(2)签署证书
(3)把签署好的证书发还给请求者
1)、以 http 目录为示例,本机给本地签署证书:
123 [root@node-2 ~]# cd /etc/httpd/
[root@node-2 httpd]# mkdir ssl
[root@node-2 httpd]# cd ssl/

2)、生成节点私钥:
12345678 [root@node-2 ssl]# (umask 077; openssl genrsa -out httpd.key 1024)
Generating RSA private key, 1024 bit longmodulus
………………..++++++
……++++++
e is 65537 (0x10001)
[root@node-2 ssl]# ll
total 4
-rw——- 1 root root 891 Apr 23 08:19httpd.key

 
3)、生成签署证书请求:
[root@node-2 ssl]# openssl  req -new -key httpd.key-out httpd.csr
You are about to be asked to enterinformation that will be incorporated
into your certificate request.
What you are about to enter is what is calleda Distinguished Name or a DN.
There are quite a few fields but you canleave some blank
For some fields there will be a defaultvalue,
If you enter ‘.’, the field will be leftblank.
—–
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:HA
Locality Name (eg, city) [Default City]:ZZ
Organization Name (eg, company) [DefaultCompany Ltd]:MagEdu
Organizational Unit Name (eg, section)[]:Ops 
Common Name (eg, your name or your server’shostname) []:www.zh.com  #此名称要和证书申请者的 FQDN 的保持一致
Email Address []:webadmin@zh.com
 
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@node-2 ssl]# ls
httpd.csr httpd.key
# 提示:以上的国家、省名、城市名要和 CA 的保持一致
3、CA 签署证书
[root@node-2 ssl]# openssl ca -in /etc/httpd/ssl/httpd.csr -out /etc/httpd/ssl/httpd.crt-days 3360
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:Apr 23 00:30:38 2015 GMT
            Not After :Jul  4 00:30:38 2024 GMT
        Subject:
          countryName          = CN
          stateOrProvinceName      = HA
          organizationName        = MagEdu
          organizationalUnitName      = Ops
          commonName            =www.zh.com
          emailAddress          =webadmin@zh.com
        X509v3 extensions:
            X509v3 BasicConstraints: 
                CA:FALSE
            NetscapeComment: 
                OpenSSLGenerated Certificate
            X509v3 SubjectKey Identifier: 
              C9:1A:C2:19:08:28:FF:1F:B4:85:90:32:00:E1:5B:E8:FF:6E:7E:95
            X509v3Authority Key Identifier: 
              keyid:66:1E:36:DB:E7:40:30:ED:B1:04:24:86:11:08:73:0C:DF:5E:DD:52
 
Certificate is to be certified until Jul  4 00:30:38 2024 GMT (3360 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

 
操作过程遇到以下问题 1:
[root@node-2 ssl]# openssl ca -in/etc/httpd/ssl/httpd.csr -out /etc/httpd/ssl/httpd.crt -days 3360
Using configuration from /etc/pki/tls/openssl.cnf
/etc/pki/CA/index.txt:No such file or directory  #没有 /etc/pki/CA/index.txt 文件
unable to open ‘/etc/pki/CA/index.txt’
139960522676040:error:02001002:systemlibrary:fopen:No such file or directory:bss_file.c:398:fopen(‘/etc/pki/CA/index.txt’,’r’)
139960522676040:error:20074002:BIOroutines:FILE_CTRL:system lib:bss_file.c:400:
操作过程遇到以下问题 2:
[root@node-2 CA]# openssl ca -in/etc/httpd/ssl/httpd.csr -out /etc/httpd/ssl/httpd.crt -days 3360
Using configuration from/etc/pki/tls/openssl.cnf
/etc/pki/CA/serial:No such file or directory      #没有 /etc/pki/CA/serial 文件
error while loading serial number
140170056320840:error:02001002:systemlibrary:fopen:No such file ordirectory:bss_file.c:398:fopen(‘/etc/pki/CA/serial’,’r’)
140170056320840:error:20074002:BIOroutines:FILE_CTRL:system lib:bss_file.c:400:
4、查看节点所生成的文件:
[root@node-2 ~]# cd /etc/httpd/ssl/
[root@node-2 ssl]# ll
total 8
-rw-r–r– 1 root root  0 Apr 23 19:47 httpd.crt      #证书文件
-rw-r–r– 1 root root 676 Apr 23 08:22  httpd.csr      #证书请求文件
-rw——- 1 root root 891 Apr 23 08:19  httpd.key      #私钥文件

OpenSSL 的详细介绍:请点这里
OpenSSL 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-04/116773.htm

一、常见算法

常见的加密算法和协议有对称加密,非对称加密,单向加密

1、对称加密:加密和解密使用一个密钥;依赖于算法和密钥,算法是可以公开的,密钥是不能公共的,因为加密是依赖于密钥的。安全性依赖于密钥,而非算法;

常见算法:

DES(Data Encryption Standard,56bits)、3DES、AES(Advanced EncryptionStandard)、Blowfish、Towfisk、IDEA、RC6、CASTS

特性:

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

2、将明文分隔成固定大小的块,逐个进行加密;

缺陷:

1、密钥过多;

2、密钥分发;

2、非对称加密:公钥加密

密码对儿:私钥(secret key)和公钥(public key);私钥仅允许个人使用;公钥是公开给所有获取;

公钥和私钥不是在创建时就成对出现的,而公钥是从私钥中提取出而来;创建时只需要创建私钥,从私钥中使用某种工具,把公钥从私钥中提取出来就可以了。

工作特性:使用公钥加密的数据,只能使用与此公钥配对儿的私钥解密,反之亦然。

用处:

1、身份认证:私钥拥有者用自己的私钥加密的数据,只要用其公钥解密,即可认证其身份;私钥加密不能保证数据的安全性,只有用于身份认证;

2、密码交换:被通信方通信之前,首先获取到对方的公钥,自己生成一个加密密码(对称加密密码),用对方的公钥加密,并发送给对方;

3、数据加密:

为什么不用非对称加密来加密数据呢?因为非对称加密数据比起对称加密要慢上 10^3 倍,都是用对称加密来加密数据,在用非对称加密来加密对称加密的密钥。

常用算法:

RSA、DSA、ELGamal

特性:

1、密钥长度较大,例如 512bits,2048,4096bits

2、加密解密分别使用密钥对儿中的密钥相对进行;

3、常用于数字签名和密钥交换;

3、单向加密

提出数据的特征码;每一个数据的都一个唯一的特性码,严重的依赖于算法。

特性:

1、定长输出:无论原来的数据是多大级别,其加密结果长度一样;

2、雪崩效应;原始数据的微小改变,将会导致结果巨大变化;

3、不可逆;

算法:

MD5、SHA1、SHA256、SHA384、SHA512

单向加密已经被运行到 CentOS 操作系统中的用户名密码加密 /etc/shadow 文件中,其中 CentOS 5 运行的 MD5,CentOS 6 运行的 SHA512。

用处:数据完整性

二、加密解密通信过程

加密、解密,以及 OpenSSL 建立私有 CA加密、解密,以及 OpenSSL 建立私有 CA

三、数字证书的格式(x.509 v3):

加密、解密,以及 OpenSSL 建立私有 CA

版本号(version)

序列号(serial number):是一个整数,CA 使用唯一标识此证书的号码;

签名算法标志(Signature algorithmidentifier):它是一个带参数的,用于给证书签名本身说明,主要是让用户验证证书是可靠的

发行者的名称:即 CA 自己的名称

有效期:两个日期,起始日期和终止日期;

证书主体名称:证书拥有者的自己名字

证书主体公钥信息:证书拥有者自己的公钥

发行商的唯一标识:(可选)

证书主体的唯一标识:(可选)证书拥有者自己的数字标识

扩展信息:

签名:CA 对此证书的数字签名,用于验证证书是自己的签发的

四、https

加密、解密,以及 OpenSSL 建立私有 CA

客户端和服务端进行通信时要进行三次握手,ssl 也是基于 TCP 来实现的,在进行三次握手之后客户端向服务端要证书,服务端把证书给客户端,此时客户端拿到证书进行验证,先用本地存的根证书找看哪个 CA 给证书签的证,于是在本地找 CA 的证书,如果本地有说明我们信任此证书,接着用 CA 去解密证书中的数字签名,能解密说明此证书是 CA 发的,解密的结果是特征码,然后在用同样的单向加密算法去计算证书的特征码,并比较,比较之后发现结果相同,说明证书可靠,否则证书不可靠;在验证访问的域名(FQDN)必须与证书中的主体保持一致,否则客户端会认为拿的不是服务端的证书,在验证有效期等;

如果以上都是合法的,在从证书中提取对方的公钥信息,并且双方开始建立协商,双方使用哪种对称加密算法,使用哪种单向加密算法,使用哪种公钥加密算法;而后客户端生成一个临时加密密钥,并使用对方的公钥加密之后发送给服务端,于是服务器就已经拿到客户端访问请求的页面,把页面使用对称加密后发送给客户端,客户端拥有私钥解密就能在浏览器中显示;

加密、解密,以及 OpenSSL 建立私有 CA

第一步:验证证书主体、有效期、有没有在证书吊销列表中等;

第二步:从证书中提取对方的公钥信息;

第三步:生成对称加密的密钥,使用对方的公钥加密密钥,传送给服务端;

第四步:服务端使用私钥解密密文;

第五步:使用对称加密密钥加密客户端请求页面,发送给客户端;

第六步:客户端使用对称加密密钥解密请求页面,并在浏览器显示页面;

通过 OpenSSL 提供 FTP+SSL/TLS 认证功能,并实现安全数据传输 http://www.linuxidc.com/Linux/2013-05/84986.htm

利用 OpenSSL 签署多域名证书 http://www.linuxidc.com/Linux/2014-10/108222.htm

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2015-04/116773p2.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计11290字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中