一文了解SSL

SSL

SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供
安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。

1 简介

Secure Socket Layer,为Netscape所研发,用以保障在Internet上数据传输的安全,利用数据加密(Encryption)技术,可确保数据在网络上的传输过程中不会被截取及窃听。一般通用的规格为40 bit的安全标准,美国则已推出128 bit的更高安全标准。只要3.0版本以上的I.E.或Netscape浏览器即可支持SSL。

当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。

SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL RecordProtocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

2 提供服务

1)认证用户和服务器,确保数据发送到正确的客户机和服务器;
2)加密数据以防止数据中途被窃取;
3)维护数据的完整性,确保数据在传输过程中不被改变。

3 工作流程

服务器认证阶段:

  • 1 客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;
  • 2 服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;
  • 3 客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;
  • 4 服务器回复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。

用户认证阶段:在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。

SSL协议提供的安全通道有以下三个特性:
机密性:SSL协议使用密钥加密通信数据。
可靠性:服务器和客户都会被认证,客户的认证是可选的。
完整性:SSL协议会对传送的数据进行完整性检查。

从SSL 协议所提供的服务及其工作流程可以看出,SSL协议运行的基础是商家对消费者信息保密的承诺,这就有利于商家而不利于消费者。在电子商务初级阶段,由于运作电子商务的企业大多是信誉较高的大公司,因此这问题还没有充分暴露出来。但随着电子商务的发展,各中小型公司也参与进来,这样在电子支付过程中的单一认证问题就越来越突出。虽然在SSL3.0中通过数字签名和数字证书可实现浏览器和Web服务器双方的身份验证,但是SSL协议仍存在一些问题,比如,只能提供交易中客户与服务器间的双方认证,在涉及多方的电子交易中,SSL协议并不能协调各方间的安全传输和信任关系。在这种情况下,Visa和 MasterCard两大信用卡公组织制定了SET协议,为网上信用卡支付提供了全球性的标准。

4 HTTPS

HTTPS(Hypertext Transfer Protocol Secure)安全超文本传输协议。

它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的安全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是像HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40 位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。

https是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,https的安全基础是SSL,因此加密的详细内容请看SSL。

它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

5 Open SSL

OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用于密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。
OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA算法事实上包括了SHA和SHA1两种信息摘要算法。此外,OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSS和DSS1。

openssl使用介绍

5.1 配置文件

/etc/pki/tls/openssl.conf

dir=/etc/pki/CA      <<<指定CA工作目录

certs=$dir/certs    <<<指定撤销存储库的位置

crl_dir=$dir/crl      <<<证书撤销列表

database=$dir/index.txt  <<<已生成的证书信息的索引文件(此文件默认不存在,需要自己创建)

new_certs_dir=$dir/newcerts <<<新签发的证书的保存位置

certificate=$dir/cacert.pem <<

serial  = $dir/serial  <<<记录证书的序号,默认可以从1开始(此文件默认不存在,内容也不能为空,需要手动往里面添加一个数字)

crlnumber = $dir/crlnumber <<<吊销的证书序列号

crl = $dir/crl.pem<<< 吊销的证书的列表

private_key  = $dir/private/cakey.pem <<< CA自己的私钥的位置

RANDFILE   = $dir/private/.rand <<<随机数文件位置

x509_extensions = usr_cert  <<<扩展项

5.2 创建CA

    1.创建不存在的文件

        index,txt

        serial

   2.给自己(CA)创建证书

实现步骤

 2.1创建那些不存在的文件

[root@ ~]# touch /etc/pki/CA/index.txt
[root@ ~]# echo "01">/etc/pki/CA/serial
[root@~]# cat/etc/pki/CA/serial
[root@~]# cat /etc/pki/CA/serial
 

2.2.给CA创建证书

 (1)生成CA的私钥文件

[root@ ~]# openssl genrsa -out /etc/pki/CA/private/cakey.pem 1024  <<<数字越大加密强度越大,然而小消耗系统资源也越多
Generating RSA private key, 1024 bit long modulus
.......++++++
....++++++
e is 65537 (0x10001)

 (2)从私钥文件中抽取公钥,并制作证书

-new:申请新的证书

-x509:证书版本号,509是给CA自己创建证书的准用选项

-key:指定私钥文件

-days:指定证书有效期
[root@~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem  -days 360 -out /etc/pki/CA/cacert.pem
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]:CN  <<<国家名字,只能用两个字母表示
State or Province Name (full name) []:henan <<<所在省
Locality Name (eg, city) [Default City]:zhengzhou <<< 所在市                
Organization Name (eg, company) [Default Company Ltd]:baidu 组织名(公司名)
Organizational Unit Name (eg, section) []:nuomi <<<组织单位名
Common Name (eg, your name or your server's hostname) []:www.baidu.com <<<公司网站域名(一定不能错,否则证书无效)
Email Address []:[email protected] <<<  邮箱地址               

5.3 给其他主机制作颁发证书的流程

1.客户端生成一个证书请求文件

2.客户端将证书申请文件发送到CA请求证书

3.检查证书请求文件中的信息的真伪,如果为真,则制作证书并颁发个客户端。

 

实现步骤(以给apache颁发证书为例,服务器端10.220.5.67,客户端10.220.5.63)

1.给apache创建私钥文件(用于存放私钥,公钥以及颁发的证书)

 (1)生成客户端私钥

[root@apache ~]# mkdir /etc/httpd/ssl

[root@apache ~]# openssl genrsa -out /etc/httpd/ssl/httpd.key 1024
Generating RSA private key, 1024 bit long modulus
........................................................++++++
........................................++++++
e is 65537 (0x10001)

 (2)生成请求文件

[root@apache ~]# openssl req -new -key /etc/httpd/ssl/httpd.key -days 365 -out /etc/httpd/ssl/httpd.req
 

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]:CN
State or Province Name (full name) []:henan   

Locality Name (eg, city) [Default City]:zhengzhou
Organization Name (eg, company) [Default Company Ltd]:baidu
Organizational Unit Name (eg, section) []:nuomi     
Common Name (eg, your name or your server's hostname) []:www.baidu.com
Email Address []:[email protected]
Please enter the following 'extra' attributesto be sent with your certificate request
A challenge password []: <<<对生成的证书进行加密,这里省略
An optional company name []:

(3)查看生成的文件

[root@apache ~]# ls /etc/httpd/ssl/
httpd.key  httpd.req<<此文件就是生成的请求文件

(4)将请求文件发送到服务器端

[root@apache ~]# scp /etc/httpd/ssl/httpd.req [email protected]:/tmp
The authenticity of host '10.220.5.67 (10.220.5.67)' can't be established.
ECDSA key fingerprint is SHA256:Fi2Rlnl2uce8/7OiRG1JReD158iHVydpZ+bW+IgoutY.
ECDSA key fingerprint is MD5:d0:96:1f:a9:83:fc:0a:bf:1f:20:1b:ec:4d:79:6e:7e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.220.5.67' (ECDSA) to the list of known hosts.
[email protected]'s password:
httpd.req                                                      100%  700   321.8KB/s   00:00   

5.4 服务端检查请求文件中的信息的真实性

在服务端操作
 

[root@e ~]# openssl ca -in /tmp/httpd.req -out /tmp/httpd.crt -days 7000
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: Nov  3 16:53:28 2018 GMT
            Not After : Jan  2 16:53:28 2038 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = henan
            organizationName          = baidu
            organizationalUnitName    = nuomi
            commonName                = www.baidu.com
            emailAddress              = [email protected]
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                90:DA:6B:61:2B:D1:3D:AD:10:45:47:15:6D:9D:A6:B0:AB:7B:80:39
            X509v3 Authority Key Identifier:
                keyid:50:EF:77:9C:65:CD:D1:42:C2:FC:9E:C4:09:82:16:9C:BB:41:0C:18

Certificate is to be certified until Jan  2 16:53:28 2038 GMT (7000 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

复制代码

2)将生成的证书发送给客户端

[root@ ~]# scp /tmp/httpd.crt [email protected]:/etc/httpd/ssl
httpd.crt                                                      100% 3233     1.1MB/s   00:00

你可能感兴趣的:(通信协议,SSL,https,open,ssl使用)