一、概念
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
- 生成key:
openssl genrsa -out D:\keys\cloudweb.key 4096
- 生成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的私钥进行加密得到签名。
- 生成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,那么此时就是自己给自己签发证书,即自签名证书。
- 查看crt
openssl x509 -in D:\keys\cloudweb.crt -text -noout
注意事项:
- 申请证书不需要提供私钥,确保私钥永远只能服务器掌握
- .证书=公钥+申请者与颁发者信息+签名
三、HTTPS请求
3.1、单向证书过程
3.2、nginx服务器配置
- 服务器需要安装SSL模块
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module make
- nginx.conf配置文件中修改如下:
server {
listen 443 ssl;
server_name www.myweb.com;
ssl on;
ssl_certificate D://keys//myweb.crt;
ssl_certificate_key D://keys//myweb.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证书到受信任的根证书颁发机构。
|