web网站http转成https

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 SSLOV SSLEV 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申请的流程
    1. 登录阿里云控制台(https://www.aliyun.com/)在安全找到SSL证书
      在这里插入图片描述
    2. 找到选购证书,进入如下流程
      在这里插入图片描述
    3. 进行配置
      在这里插入图片描述

2.自签名根证书来颁发SSL证书

  • 自建一个rootCA,并作为根证书机构给所有内部网站颁发SSL证书,这样所有的内部用户就只需信任一份根证书,证书链体系就会自动信任由它颁发的所有中级证书和子证书
    1. 为根证书机构生成私钥
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造的证书

4.使用提供免费的证书商

  • 腾讯云认证用户可以申请到赛门铁克(Symantec)免费的 TrustAsia DV SSL 证书

  • 登录腾讯云管理平台,SSL 证书申请地址在这里: https://console.qcloud.com/ssl,点击申请证书,会弹出下面的框:
    在这里插入图片描述

  • 点击确认按钮。弹出表单你填写你要绑定的域名
    在这里插入图片描述

  • 接下来会验证你的域名,简单说就是验证一下这个域名是不是你的,所以你要在域名解析添加一条 CName 记录,实在不懂的话,官方也有怎么添加的文档。
    在这里插入图片描述

  • 申请通过后,这时候你看到状态是已颁发后,就能下载证书了
    在这里插入图片描述

三、服务器部署证书(部署后重启服务)

# 让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信息 sslclientserialsubjectssl_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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值