Linux-HTTPS

HTTPS

一、概述

基于http协议,传输的时候进行加密

如果不使用https,数据传输都是明文的

应用场景:

目前大部分都是使用https加密

企业想使用http 2.0 基于https

部署https加密的流程

  1. 申请域名
  2. 根据域名申请https证书(私钥与公钥(ca证书)
  3. 进行配置web/lb

证书类型

image

二、Https加密流程与http跳转https

温馨提示

申请的https证书与网站域名一致,才能正常使用,否则用户访问会有警告与提示

[root@web01 ~]# mkdir -p /etc/nginx/ssl_keys/
[root@web01 ~]# unzip 8458094_ssl.yuanliunx.cn_nginx.zip -d /etc/nginx/ssl_keys
Archive:  8458094_ssl.yuanliunx.cn_nginx.zip
Aliyun Certificate Download
  inflating: /etc/nginx/ssl_keys/8458094_ssl.yuanliunx.cn.pem  
  inflating: /etc/nginx/ssl_keys/8458094_ssl.yuanliunx.cn.key  
[root@web01 ~]# cd /etc/nginx/ssl_keys/
[root@web01 /etc/nginx/ssl_keys]# ll
total 8
-rw-r--r-- 1 root root 1679 Feb 20 15:01 8458094_ssl.yuanliunx.cn.key
-rw-r--r-- 1 root root 3809 Feb 20 15:01 8458094_ssl.yuanliunx.cn.pem
[root@web01 /etc/nginx/ssl_keys] rename 8458094_ '' *   #修改名字,方便后期升级,替换
[root@web01 /etc/nginx/ssl_keys]# ll
total 8
-rw-r--r-- 1 root root 1679 Feb 20 15:01 ssl.yuanliunx.cn.key
-rw-r--r-- 1 root root 3809 Feb 20 15:01 ssl.yuanliunx.cn.pem


[root@web01 /etc/nginx/conf.d]# cat ssl.yuanliunx.cn.conf 
server{
	listen 80;
	server_name ssl.yuanliunx.cn;
	return 302 https://ssl.yuanliunx.cn$request_uri;			#设置跳转
        #rewrite ^(.*)$ https://ssl.yuanliunx.cn$1 permanent;
}

server {
  listen 443 ssl;			#修改这一行,记得加ssl
  server_name  ssl.yuanliunx.cn ; 
  root /app/code/ssl;
  error_log   /var/log/nginx/ssl-error.log notice; 
  access_log  /var/log/nginx/ssl-access.log main;

  #ssl key  增加证书
  ssl_certificate     /etc/nginx/ssl_keys/ssl.yuanliunx.cn.pem;
  ssl_certificate_key /etc/nginx/ssl_keys/ssl.yuanliunx.cn.key;
 
  location / {
    index index.html;
  }

}

三、命令行创建https证书

#创建私钥
openssl genrsa -idea -out server.key 2048

#根据私钥创建 证书
openssl req -days 36500 -x509 -sha256 -nodes -newkeyrsa:2048 -keyout server.key -out server.crt

四、网站集群https配置

[root@lb01 ~]# cat /etc/nginx/conf.d/ssl.yuanliunx.cn.conf 
upstream ssl_pools{
	server 10.0.0.7:443;    #修改为443

}
server {
	listen 80;
	server_name ssl.yuanliunx.cn;
	return 302 https://ssl.yuanliunx.cn$request_uri;			#跳转修改为https
}
server { 
	listen 443 ssl;				#修改为443
	server_name ssl.yuanliunx.cn;
    ssl_certificate     /etc/nginx/ssl_keys/ssl.yuanliunx.cn.pem;    #添加证书
    ssl_certificate_key /etc/nginx/ssl_keys/ssl.yuanliunx.cn.key;	   #添加证书
	error_log  /var/log/nginx/ssl.cn-error.log notice;				
    access_log  /var/log/nginx/ssl.cn-access.log  main;
	
	location / {
    	proxy_pass https://ssl_pools;     #注意这里是https
		proxy_set_header Host $http_host;
		proxy_set_header X-Real-Ip $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;	
	}
}


[root@web01 ~]# cat /etc/nginx/conf.d/ssl.yuanliunx.cn.conf 
server{
	listen 80;
	server_name ssl.yuanliunx.cn;
	return 302 https://ssl.yuanliunx.cn$request_uri;
        #rewrite ^(.*)$ https://ssl.yuanliunx.cn$1 permanent;
}
server {
  listen 443 ssl;
  server_name  ssl.yuanliunx.cn ; 
  root /app/code/ssl;
  error_log   /var/log/nginx/ssl-error.log notice; 
  access_log  /var/log/nginx/ssl-access.log main;

  #ssl key 
  ssl_certificate     /etc/nginx/ssl_keys/ssl.yuanliunx.cn.pem;
  ssl_certificate_key /etc/nginx/ssl_keys/ssl.yuanliunx.cn.key;
 
  location / {
    index index.html;
  }

}

温馨提示:

php配置https要加上

fastcgi_param HTTPS on; #前面部分的请求是https

五、https优化与监控

1.优化

https === http over tls

server {
       listen              443 ssl;
       keepalive_timeout   70;
       ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;         #指定ssl加密协议的版本
       ssl_ciphers   AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5;                       #加密算法.需要排除算法 排除null空算法, md5算法
       ssl_certificate    /usr/local/nginx/conf/cert.pem;
	   ssl_certificate_key  /usr/local/nginx/conf/cert.key;
        #设置https 会话缓存
       ssl_session_cache   shared:SSL:10m;
        #超时时间 10分钟
       ssl_session_timeout 10m;
      
   }

2.监控

过期时间.

流程:

通过命令获取证书的过期日期

与当前日期对比(30天之前)

获得剩余的时间

[root@web03 ~]# curl -vL   https://www.baidu.com |& grep 'expire date'
* 	expire date: Aug 06 05:16:01 2023 GMT
[root@web03 ~]# curl -vL   https://www.baidu.com |& grep 'expire date'|awk -F ': ' '{print $2}'

温馨提示:

| 只传输正确输出

|& 表示把管道前面标准输出(正确)和标准错误输出 都传递给后面的命令.

[root@web03 ~]# vim /server/scripts/check_ssl.sh
#!/bin/bash
#author:wh
#desc:检查证书的到期时间

url=https://www.baidu.com
#获取过期时间
expire_date=`curl -vL ${url} |& grep 'expire date'|awk -F ': ' '{print $2}'`
#格式化过期时间
expire_date_day=`date -d "${expire_date}" +%F`

#过期时间装换为秒
expire_date_second=`date -d "${expire_date}" +%s`
#现在的时间装换为秒
date_now_second=`date +%s`

#过期的时间
expire_days=`echo "(${expire_date_second}-${date_now_second})/60/60/24" |bc`

echo "网站${url}过期时间是:${expire_date_day}"
echo "网站${url}证书过期倒计时:${expire_days}天"

posted @ 2023-02-22 21:18  wh459086748  阅读(249)  评论(1)    收藏  举报