一、概念

1.1、TLS

传输层安全协议 Transport Layer Security
作为SSL协议的继承者,成为下一代网络安全性和数据完整性安全协议

1.2、SSL

安全套接字层 Secure Socket Layer
位于TCP/IP中的网络传输层,作为网络通讯提供安全以及数据完整性的一种安全协议

1.3、HTTPS

HTTP+SSL(secure socket layer)/TLS(Transport Layer Security)协议,HTTPS协议为数字证书提供了最佳的应用环境

1.4、OpenSSL

相当于SSL的一个实现,如果把SSL规范看成OO中的接口,那么OpenSSL则认为是接口的实现。接口规范本身是安全没问题的,但是具体实现可能会有不完善的地方,比如之前的"心脏出血"漏洞,就是OpenSSL中的一个bug.

1.5、CA

数字证书颁发认证机构 Certification authority
包含多种密码学算法:

  • 消息摘要算法:MD5、和SHA(对数字证书本省做摘要处理,用于验证数据完整性服务器)
  • 对称加密算法:RC2、RC4、IDEA、DES、AES(对数据进行加密/解密操作,用于保证数据保密性服务)
  • 非对称加密算法:RSA、DH(对数据进行加密/解密操作,用于保证数据保密性服务)
  • 数字签名算法:RSA、DSA(对数据进行签名/验证操作,保证数据的完整性和抗否认性)。

1.6、KEY

通常指私钥

1.7、CSR

Certificate Signing Request的缩写,即证书签名请求,这不是证书,可以简单理解成公钥,生成证书时要把这个提交给权威的证书颁发机构。

1.8、CRT

certificate的缩写,即证书。

1.9、X.509

一种证书格式.对X.509证书来说,认证者总是CA或由CA指定的人,一份X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息。
X.509的证书文件,一般以.crt结尾,根据该文件的内容编码格式,可以分为以下二种格式:

  • PEM - Privacy Enhanced Mail,打开看文本格式,以"-----BEGIN…"开头, "-----END…"结尾,内容是BASE64编码. Apache和*NIX服务器偏向于使用这种编码格式.

  • DER - Distinguished Encoding Rules,打开看是二进制格式,不可读.Java和Windows服务器偏向于使用这种编码格式

二、证书签发过程

这里使用证书工具OpenSSL: Win64OpenSSL_Light-3_0_0.exe
安装后进入安装bin目录,进入命令行操作(或者配置环境变量进行命令行操作)
在这里插入图片描述

2.1、证书申请流程

在这里插入图片描述

2.2、申请者准备csr、key

  1. 生成key:
openssl genrsa -out D:\keys\cloudweb.key 4096
  1. 生成crs
openssl req -new -sha256 -out D:\keys\cloudweb.csr -key D:\keys\cloudweb.key -config ssl.conf 

其中包含配置文件ssl.conf

[ req ]
default_bits       = 4096
distinguished_name = req_distinguished_name
req_extensions     = req_ext

[ req_distinguished_name ]
countryName                 = Country Name (2 letter code)
countryName_default         = cn
stateOrProvinceName         = State or Province Name (full name)
stateOrProvinceName_default = sc
localityName                = Locality Name (eg, city)
localityName_default        = cd
organizationName            = Organization Name (eg, company)
organizationName_default    = my
organizationalUnitName            = Organizational Unit Name (eg, section)
organizationalUnitName_default    = as
commonName                  = Common Name (e.g. server FQDN or YOUR name)
commonName_max              = 64
commonName_default          = www.baidu.com

[ req_ext ]
subjectAltName = @alt_names


[alt_names]
IP.1    = 192.168.11.112
DNS.1 = www.baidu.com
DNS.2 = map.baidu.com

3.查看crs

openssl req -text -noout -verify -in D:\keys\cloudweb.csr

在这里插入图片描述
在这里插入图片描述

2.3、CA机构为申请者生成crt

CA机构得到申请者crs和相关申请、线上线下验证申请者信息,为申请者制作证书。

证书中签名:使用申请者公开信息计算得到摘要,并使用CA的私钥进行加密得到签名。

  1. 生成crt
openssl x509 -req -days 3650 -in D:\keys\cloudweb.csr -signkey D:\keys\cagroup.key -out D:\keys\cloudweb.crt -extensions req_ext -extfile cassl.conf

特别说明:如果cagroup.key就是cloudweb.key,cassl.conf就是ssl.conf,那么此时就是自己给自己签发证书,即自签名证书。

  1. 查看crt
openssl x509 -in D:\keys\cloudweb.crt -text -noout

在这里插入图片描述
在这里插入图片描述

注意事项:

  1. 申请证书不需要提供私钥,确保私钥永远只能服务器掌握
  2. .证书=公钥+申请者与颁发者信息+签名

三、HTTPS请求

3.1、单向证书过程

在这里插入图片描述

3.2、nginx服务器配置

  1. 服务器需要安装SSL模块

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make

  1. nginx.conf配置文件中修改如下:
server {
		listen 443 ssl;
		server_name www.myweb.com;     #需要访问的域名,不用加https
		ssl on; 
		ssl_certificate D://keys//myweb.crt;      #这里是ssl crt文件存放的绝对路径
		ssl_certificate_key D://keys//myweb.key;   #这里是ssl key文件存放的绝对路径

		ssl_session_cache shared:SSL:1m;
		ssl_session_timeout 5m; 
		ssl_ciphers HIGH:!aNULL:!MD5;
		ssl_prefer_server_ciphers on;

		location / {
			proxy_pass http://192.168.6.45:8343/; #跳转路径
		}
	}

server { 
    listen 80;
    server_name www.myweb.com;
    rewrite ^(.*)$  https://$host$1 permanent;
}	

3.3、Tomcat服务器配置

修改server.xml文件,Service节点下添加:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="true" 
			   sslProtocol="TLS" keystoreFile="D:\keys\myweb.crt"
			   truststoreFile="D:\keys\myweb.keystore" truststorePass="jsonliu@123" />

属性说明:

  • clientAuth:设置是否双向验证,默认为false,设置为true代表双向验证
  • keystoreFile:服务器证书文件路径
  • truststoreFile:用来验证客户端证书的根证书,此例中就是服务器证书
  • truststorePass:根证书密码

最后:

  • 要访问https请求 需要访问8443端口,访问http请求则访问Tomcat默认端口(你自己设置的端口,默认8080)即可。

3.4、浏览器安装CA证书

如果是公认的CA机构,那么浏览器一般已经安装好了证书。如果是自签名证书,需要自己手动安装CA证书到受信任的根证书颁发机构。
在这里插入图片描述

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐