web网站http转成https
文章目录
前言
随着用户对网站的信息安全越来越重视,众多网站建设者也注意到了网站的安全问题,所以很多网站都开始进行http转https。
网站的通讯协议采取http协议是明文传输,明文传输虽然比较方便,但是对网站的安全是无法保障的,因为是明文传输,所以信息在传输的过程当中,安全性是无法保障的,而且现在很多的网站都涉及了登录、交易、购物等方面的情况,所以网站http明文传输是很危险的。
而网站通讯协议http转https,那么网站的安全性也就是提升了,这也是http转https的意义,在http协议的基础上,给网站配置SSL证书之后,那么网站的通讯协议就会遵守http协议,那么网站的信息传输就是加密的,它对于验证服务器的身份,以及提升网络信息传输的安全都是有保障的。
https配置难不难?
在将https证书申请下来之后,需要对https证书进行配置,但是有些人不知道该如何去配置,其实https配置难度并不是很大,需要将申请好的https证书给下载到相应的文件目录当中,然后去配置证书,这需要将证书导入到服务器当中,之后证书就可以配置好了,在https配置之后需要对服务器重启一次,然后网站就可以通过https协议来进行访问了。
对于网站来说配置https证书是很有意义的,它的目的是为了促进网站的信息安全,如果网络的信息安全保障不了,对网站和用户来说所造成的损失也是很大的。
一、服务器配置https协议
- HTTPS,是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL(即使中间的包被窃取了,也无法解密传输的内容,只保护传输过程的信息,浏览器F12数据还是明文的)
- HTTP默认采用80作为通讯端口,对于传输采用不加密的方式,HTTPS默认采用443,对于传输的数据进行加密传输
- 配置HTTPS就需要证书,证书可以由权威的CA机构付费获得的证书,也可以使用自签名根证书来颁发SSL证书(使用OpenSSL造的证书是不被信任的,浏览器访问的时候会提示不安全),也可以使用提供免费的证书商:StartSSL ,Let’s Encrypt ,腾讯云等提供免费的证书,但是需要把域名转入证书商,而且自2020年9月1日起,全球CA机构将不再颁发2年期证书
- 根据验证,SSL分为DV SSL 、 OV SSL 、EV SSL
- DV SSL证书是只验证网站域名所有权的简易型(Class 1级)SSL证书,可10分钟快速颁发,能起到加密传输的作用,但无法向用户证明网站的真实身份。目前市面上的免费证书都是这个类型的,只是提供了对数据的加密,但是对提供证书的个人和机构的身份不做验证。
- OV SSL提供加密功能,对申请者做严格的身份审核验证,提供可信证明。和DV SSL的区别在于,OV SSL 提供了对个人或者机构的审核,能确认对方的身份,安全性更高。所以这部分的证书申请是收费的
- EV SSL证书遵循全球统一的严格身份验证标准,是目前业界安全级别最高的顶级 (Class 4级)SSL证书。金融证券、银行、第三方支付、网上商城等,重点强调网站安全、企业可信形象的网站,涉及交易支付、客户隐私信息和账号密码的传输。这部分的验证要求最高,申请费用也是最贵的。
- 根据保护域名的数量,SSL证书又分为:
- 单域名版:只保护一个域名,例如 www.abc.com 或者 login.abc.com 之类的单个域名
- 多域名版:一张证书可以保护多个域名,例如同时保护 www.abc.com , www.bcd.com, pay.efg.com 等
- 通配符版:一张证书保护同一个主域名下同一级的所有子域名,不限个数,形如 *.abc.com 。注意,通配符版只有 DVSSL 和 OVSSL 具有, EVSSL 不具有通配符版本。
二、SSL申请的流程
1.使用CA机构付费获得的证书
- 世界云服务3A:亚马逊AWS、微软Azure、阿里云,这里只列举使用阿里云的SSL申请的流程
- 登录阿里云控制台(https://www.aliyun.com/)在安全找到SSL证书
- 找到选购证书,进入如下流程
- 进行配置
- 登录阿里云控制台(https://www.aliyun.com/)在安全找到SSL证书
2.自签名根证书来颁发SSL证书
- 自建一个rootCA,并作为根证书机构给所有内部网站颁发SSL证书,这样所有的内部用户就只需信任一份根证书,证书链体系就会自动信任由它颁发的所有中级证书和子证书
- 为根证书机构生成私钥
openssl genrsa -out rootCA_key.pem 2048
2. 然后使用rootCA的私钥生成rootCA的根证书
openssl req -new -x509 -sha256 -days 3650 -key rootCA_key.pem -out rootCA_cert.pem
几个注意点:
- openssl默认会使用SHA-1作为证书签名算法,而SHA-1(Certificate - insecure (SHA-1))已因安全强度不足而被各大浏览器标记为“不安全”甚至拒绝使用。所以在任何签发证书环节请使用-sha256参数强制使用SHA-256来签名。
- openssl默认签发证书只有一个月有效期。可使用-days 3650参数自行指定证书有效期时长。
3. 生成服务器私钥
openssl genrsa -out local.pilipala.com.key 2048
4. 生成证书请求CSR
openssl req -new -key local.pilipala.com.key -out local.pilipala.com.csr
5. 根证书机构签发证书,v3.ext文件是签发证书时使用的扩展信息(用于解决浏览器访问时的Certificate - Subject Alternative Name missing和Certificate - missing问题),旧的证书中我们都是用Common Name(CN)字段来表达主机地址,也就是证书或者CSR生成时需要输入的Common Name (eg, fully qualified host name) []:这一行。但从Chrome58开始,chrome要求在SSL证书中提供Subject Alternative Name(SAN)扩展字段来标识主机。过去这个字段只是用来做多主机证书,所以有些工具默认不包含这个字段。总之,不管你是自签证书,还是通过自签CA证书签发的证书,需要确保服务器证书里包含一个subjectAltName字段,内有若干个DNS或者IP项。
- ------------------------------------------------------------说明----------------------------------------------------------------
- 所以可以通过-extfile选项传入扩展属性文件local.pilipala.com.v3.ext解决
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = local.pilipala.com
DNS.2 = test.pilipala.com
- 这样签出的证书就可以在详情中看到SAN信息
openssl x509 -in local.pilipala.com.crt -noout -text
Certificate:
Data:
X509v3 extensions:
X509v3 Subject Alternative Name:
DNS:local.pilipala.com
- 根证书机构签发证书
openssl x509 -req -in local.pilipala.com.csr -CA rootCA_cert.pem -CAkey rootCA_key.pem -CAcreateserial -extfile local.pilipala.com.v3.ext -sha256 -days 3650 -out local.pilipala.com.crt
6. 查看证书是否签署妥当
openssl x509 -in local.pilipala.com.crt -noout -text
7. 服务器部署证书(看后面)
8. 将rootCA根证书加入客户端系统信任列表(看后面)
3.使用OpenSSL造的证书
- 可以使用网站(https://myssl.com/csr_create.html)在线生成
4.使用提供免费的证书商
-
腾讯云认证用户可以申请到赛门铁克(Symantec)免费的 TrustAsia DV SSL 证书
-
登录腾讯云管理平台,SSL 证书申请地址在这里: https://console.qcloud.com/ssl,点击申请证书,会弹出下面的框:
-
点击确认按钮。弹出表单你填写你要绑定的域名
-
接下来会验证你的域名,简单说就是验证一下这个域名是不是你的,所以你要在域名解析添加一条 CName 记录,实在不懂的话,官方也有怎么添加的文档。
-
申请通过后,这时候你看到状态是已颁发后,就能下载证书了
三、服务器部署证书(部署后重启服务)
- 服务器端是指Web 服务器(Nginx,Apache,IIS都行)
1.Nginx,详细参考阿里nginx配置https://help.aliyun.com/video_detail/54216.html?spm=a2c4g.11186623.4.1.WbwjQN
# 让http://也走https://
server {
listen 80;
server_name local.pilipala.com;
rewrite ^(.*)$ https://$IP地址$1 permanent;
}
server {
# mapping to local 8080
listen 443 ssl http2; #使用HTTP/2 在底层传输
server_name local.pilipala.com;
# SSL
ssl_certificate /local.pilipala.com.crt;
ssl_certificate_key /local.pilipala.com.key;
ssl_prefer_server_ciphers on;
# ssl on #这个参数开启,http和https将不能共存
ssl_session_timeout 10m;
# ssl_session_cache shared:SSL:10m; #windows机上不能使用共享缓存,windows运行时需要注释
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #配置使用openssl支持的加密套件
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
location / {
root html;
index index.html index.htm;
# 可以让后台获取到SSL证书信息
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://IP地址/ssl/;
}
}
- nginx获取ca证书信息并传递到java后端使用
- nginx内部解析证书后,会把相关信息放到内置的变量中,我们可以使用 加 内 置 变 量 名 使 用 。 如 证 书 内 容 信 息 加内置变量名使用。如证书内容信息 加内置变量名使用。如证书内容信息ssl_client_cert,证书序列号 s s l c l i e n t s e r i a l , 证 书 s u b j e c t 信 息 ssl_client_serial,证书subject信息 sslclientserial,证书subject信息ssl_client_s_dn。
- 配置设置到请求头中,请求头变量名自定义
proxy_set_header X-SSL-Client-Cert $ssl_client_cert;
proxy_set_header X-SSL-serial $ssl_client_serial;
proxy_set_header cert-subject $ssl_client_s_dn;
其中,X-SSL-Client-Cert、X-SSL-serial、cert-subject为自定义变量名,供后边java代码获取header值使用。
- java后台获取
public class CaController {
@GetMapping("/test")
public String caTest(@RequestHeader("X-SSL-serial") String serial, @RequestHeader("X-SSL-Client-Cert") String cert, @RequestHeader("cert-subject") String subject) {
return serial + " \r" + cert + " \r" + subject;
}
}
2.tomcat配置openSSL请参考https://www.cnblogs.com/jifeng/archive/2010/05/10/1731601.html
四、将rootCA根证书加入客户端系统信任列表(双向认证需要)
- 设置
- 安全检查
- 安全
- 管理证书
- 导入生成的根证书(我这里是rootCA_cert.pem)
- 访问
注意:浏览器使用代理的要把代理关掉
参考: https://blog.flyingghost.tech/post/create-self-signed-root-ca-cert/