HTTPS的N种获取渠道与打开方式

引言

HTTP是过去很长一段时间我们经常用到的一种传输协议。HTTP协议传输的数据都是未加密的,这就意味着用户填写的密码、账号、交易记录等机密信息都是明文,随时可能被泄露、窃取、篡改,从而被黑客加以利用,因此使用HTTP协议传输隐私信息非常不安全。

HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安全,可防止数据在传输过程中被窃取、改变,确保数据的完整性。

根据证书颁发机构(CA)安全委员会的一项研究表名,只有2%的客户会继续浏览一个 “不受信任链接” 的网站,SSL可以防止这些错误造成的客户流失

百度百科:以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL/TLS 层,HTTPS 的安全基础是 SSL/TLS,因此加密的详细内容就需要 SSL/TLS。

阿里云 :SSL证书就是遵守SSL安全套接层协议的服务器数字证书,而SSL安全协议最初是由美国网景Netscape Communication公司设计开发,全称为安全套接层协议(Secure Sockets Layer)。SSL证书指定了在应用程序协议(如HTTP、Telnet、FTP)和TCP/IP之间提供数据安全性分层的机制。它是在传输通信协议(TCP/IP)上实现的一种安全协议,采用公开密钥技术,它为TCP/IP连接提供数据加密、服务器认证、消息完整性以及可选的客户机认证。由于此协议很好地解决了互联网明文传输的不安全问题,很快得到了业界的支持,并已经成为国际标准。

SSL证书由浏览器中受信任的根证书颁发机构在验证服务器身份后颁发,具有网站身份验证和加密传输双重功能。

HTTPS的哲学三连

是什么:HTTP + SSL/TLS = HTTPS, 即HTTPS是HTTP的安全版

为什么:很简单,因为你的HTTP是明文传输 不安全,数据容易被窃取,所以需要HTTPS ,HTTPS实现高强度双向加密传输,防止传输数据被泄露或篡改

怎么用:

HTTPS的工作原理

  • 客户端通过发送Client Hello报文开始SSL通信。报文中包含客户端支持的SSL的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密匙长度等);
  • 服务器可进行SSL通信时,会以Server Hello报文作为应答。和客户端一样,在报文中包含SSL版本以及加密组件。服务器的加密组件内容时从接收到的客户端加密组件内筛选出来的;
  • 服务器发送证书报文。报文中包含公开密匙证书;
  • 最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束;
  • SSL第一次握手结束之后,客户端以Client Key Exchange报文作为回应。报文包含通信加密中使用的一种被称为Pre-master secret的随机密码串。该报文已用步骤3中的公开密匙进行加密;
  • 接着客户端继续发送Change Cipher Spec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret密匙加密;
  • 客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准;
  • 服务器同样发送Change Cipher Spec报文;
  • 服务器同样发送Finished报文;
  • 服务器和客户端的Finished报文交换完毕之后,SSL连接就算建立完成。当然,通信会收到SSL的保护。从此处开始进行应用层协议的通信,即发送HTTP请求;
  • 应用层协议通信,即发送HTTP相应;
  • 最后由客户端断开连接。断开连接时,发送close_notify报文。上图做了一些省略,这步之后再发送TCP FIN报文来关闭与TCP的通信。

 

HTTPS的获取渠道与部署方式(Nginx为例)

阿里云

Easy SSL

CA 自签

腾讯云

Cert BOT

Let's Encrypt

个人推荐 Let's Encrypt 与 阿里云,获取方式大都是千篇一律,并且网上教程众多,远比我方式简单,操作优秀。

 

  • 阿里云的获取方式

购买之后会在SSL证书控制台产生一个未申请的证书

 

点击申请填写相应的域名 大约2~5个小时可申请下来 当然 你填的真实的话

验证成功之后会在域名控制台生成一个DNS解析值

域名控制台:解析设置

继续回到SSL证书控制台,开始部署,可点击相应的SSL一站式服务,或DNS域名解析自动部署,本章选择下载证书导入至服务器进行Nginx代理部署,当然,你可以选择对应的容器方式,如:Tomcat Apache等

下载之后改名放到自创建的文件夹,配置Nginx的配置文件,如果是手动安装的Nginx 配置文件在nginx/conf/nginx.conf,docker的话是你自己选择的挂载位置

查看你的Nginx是否开启了SSL模块

/usr/local/nginx/sbin/nginx -V

若没有开启:参考这篇文章 https://www.cnblogs.com/zhizou/p/11295562.html

Nginx配置文件开启SSL

# 操作 nginx 的用户  不能是root 不然有安全风险
user   nobody;
# nginx的进程数量 建议设置为等于CPU总核心数
worker_processes  1;
# 全局错误日志定义类型
# 日志级别分为: debug info notice warn error crit
error_log /usr/local/nginx/logs/error.log debug;

# 进程文件 会默认的生产一个同log平级的目录中
# pid /var/run/nginx.pid;

# 工作模式与连接数上限
events {
	# 参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];
	# epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型.
	# 查看系统版本:cat /proc/version
    #use epoll;

	# 网络连接序列化 防止惊群现象 (惊群:多个睡眠的进程被同时叫醒,但只有一个进程能获得链接,这样会影响系统性能)
	accept_mutex on;

	# 是否允许同时接受多个网络连接 默认为off
	multi_accept on;

	# 单个进程最大连接数(最大连接数=连接数*进程数)
	worker_connections  1024;
}

http {

	# 文件扩展名与文件类型映射表
    include       mime.types;
	# 默认文件类型
    default_type  application/octet-stream;

	# Nginx服务的Banner隐藏状态
    server_tokens off;

	# 开启错误页面
	fastcgi_intercept_errors on;

	# 隐藏Nginx后端服务X-Powered-By头
	proxy_hide_header X-Powered-By;
	proxy_hide_header Server;

	# 默认编码 放置区域不同效果不同 此处默认HTTP所有体
	charset utf-8;

	# 防止网络阻塞
	tcp_nopush on;
	# 防止网络阻塞
	tcp_nodelay on;

	# 服务器名字的hash表大小
	# server_names_hash_bucket_size 128;

	# 自定义HTTP体内所有记录的日志格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

	# 设置客户端连接保持活动的超时时间,在超过这个时间后服务器会关闭该链接
    keepalive_timeout 60;

	

	# 动态代理
    server {
        listen       80;
		# 此域名为动态服务器专用域名
        server_name  www.baidu.com;
		# HTTP 强制跳转 HTTPS
        rewrite ^(.*) https://$server_name$1 permanent;
    }


    # HTTPS serverlocalhost

    server {
		listen       443 ssl;
		server_name  www.baidu.com;
		ssl on;
		# 配置域名证书
		ssl_certificate      /usr/local/nginx/security/security.pem;
		ssl_certificate_key  /usr/local/nginx/security/security.key;
		ssl_session_cache    shared:SSL:1m;

		ssl_session_timeout  5m;

		ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

	 	# Nginx SSL协议的加密策略进行加固
		ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers  on;

		# 动态主机访问监控记录
        access_log  /usr/local/nginx/logs/server/ssl/access.log  main;
		error_log	/usr/local/nginx/logs/server/ssl/error.log debug;

		# 上传文件大小限制 (头)(请求头的大小)
		# 查看系统分页大小:getconf PAGESIZE
		client_header_buffer_size 128k;
		# 上传文件大小限制 (体)(请求体内的大小)
		client_body_buffer_size 512m;
		# 请求报文大小
		client_max_body_size 512m;
		# Rabbitmq 之 WEb-SOCKET 接口配置代理
		
		location / {
			# websocket配置跨域文件
			proxy_http_version 1.1;
			proxy_set_header Upgrade $http_upgrade;
			proxy_set_header Connection $connection_upgrade;
			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   you project main;
		}

    }

}

此后,进入到 nginx/sbin目录 ./nginx -t 测试文件是否正常

[root@rfbl sbin]# ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@rfbl sbin]# ./nginx -s reload
[root@rfbl sbin]# 

如果你开启了firewall 安全访问模块 需要添加开放端口:

[root@rfbl sbin]# firewall-cmd --zone=public --add-port=443/tcp --premanent
[root@rfbl sbin]# firewall-cmd --reload

阿里云服务器开启443端口

至此 你可以看到

 

 

  • 自签 CA

自签CA需要 OpenSSL 支持

OpenSSL 安装方式:sudo yum install openssl-devel

私钥 公钥

//服务器端
//私钥
openssl genrsa -out security.key 1024
//公钥
openssl rsa -in security.key -pubout -out security.pem

CA 私钥

//CA 私钥
openssl genrsa -out ca.key 1024

openssl req -new -key ca.key -out ca.csr

上面命令会出现以下需要填写的项目,可以直接回车跳过,但是Common Name那一项建议填写你的域名,如果是本地的话,可以写localhost 

Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:域名
Email Address []:邮箱

生成CA 证书

openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt

生成服务器证书

//服务器端需要向 CA 机构申请签名证书,在申请签名证书之前依然是创建自己的 CSR 文件
openssl req -new -key security.key -out security.csr
//向自己的 CA 机构申请证书,签名过程需要 CA 的证书和私钥参与,最终颁发一个带有 CA 签名的证书
openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in security.csr -out security.crt

生成cer文件

//使用openssl 进行转换
openssl x509 -in security.crt -out security.cer -outform der

配置nginx 我们拿到CA签发的这个证书后,需要将证书配置在nginx中。 首先,我们将security.crt和security.key拷贝到nginx的security目录中,配置方式如阿里云相同

这两个改一下

# 配置域名证书
ssl_certificate      /usr/local/nginx/security/security.crt;
ssl_certificate_key  /usr/local/nginx/security/security.key;

 

结束语

在越来越重视信息安全的今天,HTTPS协议站点无疑已经成为主流。就目前形势而言,以下网站必须启用HTTPS协议加密:

  • 电商平台及其相关支付系统网站
  • 银行系统、金融机构等高私密性网站
  • 政府、高校、科研机构及其相关网站
  • 以搜索引擎为主要流量来源的网站
  • 以邮箱为主的企业交流平台

长远来看,HTTPS协议网站已是必然趋势。启用HTTPS协议加密是当今网站建设的关键要点。不仅局限于上述网站类型,启用HTTPS协议加密既是网站安全的必然需要,也是公司发展的提前布局。

 参考文献

【1】https://www.cnblogs.com/surplus/p/11423201.html

【2】https://drcloud.aliyun.com/home

【3】http://www.52im.net/thread-1890-1-1.html

【4】https://www.cnblogs.com/awkflf11/p/12942559.html

友情链接

HTTPS的加密原理:https://www.cnblogs.com/awkflf11/p/12942559.html

HTTPS的传输协议及其加密原理分析:https://blog.csdn.net/qq_20597727/article/details/80849031

HTTPS的对称加密:https://www.jb51.net/hack/191962.html

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值