HTTP与HTTPS
SSL/TSL
SSL(Secure Socket Layer,安全套接字层):1994年为 Netscape 所研发,位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。
TLS(Transport Layer Security,传输层安全):用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。其前身是 SSL,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0)由网景公司开发,1999年从 3.1 开始被 IETF 标准化并改名,发展至今已经有 TLS 1.0、TLS 1.1、TLS 1.2 、TLS1.3四个版本。SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到。
SSL证书
SSL Certificate一般去如阿里云、腾讯云等云服务提供商,或者去专门的服务商网站免费申请或者购买。
SSL 证书就是一份证明,证明某公钥确实是某网站的公钥。这里面需要用到 CA(证书的签发机构) 这个中间机构。
PS:项目开发过程中有接触过的可能就BJCA(北京数字认证股份有限公司),不知道有没有个人DV服务。
证书认证级别:
DV:域名认证,这种证书仅需要验证域名所有权。通过 DV 证书,使用者唯一可以确定的是这枚公钥是某个DNS域名的公钥。因为证书上只有域名这一项信息。免费证书都是 DV 证书。https://letsencrypt.org/zh-cn/
OV:组织认证,这种证书里面除了注明了域名之外还添加了公司名(Organization)等信息。
EV:扩展认证,CA 会对证书持有人进行更加全面的认证。
安装SSL证书
申请或购买成功后,下载得到的证书文件,主要一般是后缀为.crt
、.key
、.csr
、.pem
文件。
把.crt
、.key
对应的文件上传到Linux服务器指定位置即可。
Nginx SSL模块
针对部署的Nginx没有安装SSL模块时(一般都是安装了的),需要单独进行安装。
Nginx SSL配置
在nginx配置文件的http下的server下配置SSL即可完成HTTPS的访问。
user www www;
worker_processes auto;
error_log /www/wwwlogs/nginx_error.log crit;
pid /www/server/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
events {
use epoll;
worker_connections 51200;
multi_accept on;
}
http {
include mime.types;
#include luawaf.conf;
include proxy.conf;
default_type application/octet-stream;
server_names_hash_bucket_size 512;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 50m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
server_tokens off;
access_log on;
server {
#########################配置SSL#########################
## 不同的nginx版本可能存在差异
#SSL 访问端口号为 443
listen 443 ssl;
#填写绑定证书的域名
server_name 你的域名1;
#证书文件路径
ssl_certificate 你的证书位置.crt;
#私钥文件名称
ssl_certificate_key 你的证书key位置.key;
#缓存有效期
ssl_session_timeout 5m;
# 安全链接可选的加密协议
ssl_protocols TLSv1.2 TLSv1.3;
#加密算法
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
#启用服务器端的首选算法
ssl_prefer_server_ciphers on;
#########################配置跨域#########################
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
#########################配置资源路径#########################
# 域名访问 反向代理
location / {
root /;
index index.html index.htm;
proxy_pass 服务地址;
}
access_log /www/wwwlogs/access.log;
}
# HTTP 自动跳转 HTTPS 的安全配置(可选)
server {
listen 80;
#填写绑定证书的域名
server_name 你的域名1;
#把http的域名请求转成https
return 301 https://$server_name$request_uri;
}
## 多个域名需要多个证书,安装上面修改证书、域名、服务地址配置即可(待验证)
## ...
}
重载配置或重启nginx后生效,配置后确保防火墙放开了端口。
评论区