在讲如何让网站实现https访问之前,先了解一下 http 和 https 的区别,以及https实现安全通信的原理

http 和 https 的区别

  • 安全性

    • HTTP:数据以明文形式传输,缺乏加密保护,容易被拦截和窃取。

    • HTTPS:在 HTTP 基础上增加了 SSL/TLS 加密层,对数据进行加密传输,保护数据的机密性和完整性,防止中间人攻击。

  • 端口

    • HTTP:默认使用端口 80。

    • HTTPS:默认使用端口 443。

  • 证书

    • HTTP:不使用数字证书。

    • HTTPS:使用由权威 CA(Certificate Authority)颁发的数字证书来验证服务器的身份,确保通信的真实性和安全性。

  • 性能

    • HTTP:由于没有加密和解密过程,传输速度相对较快。

    • HTTPS:由于需要进行加密和解密操作,增加了握手过程,初次连接时可能会有略微的性能开销。

  • URL 形式

    • HTTP:URL 以 http:// 开头。

    • HTTPS:URL 以 https:// 开头。

  • SEO(搜索引擎优化)

    • HTTP:搜索引擎对 HTTP 站点的信任度较低,影响排名。

    • HTTPS:搜索引擎(如 Google)更倾向于信任 HTTPS 站点,HTTPS 站点在搜索排名中可能会有优势。

  • 浏览器行为

    • HTTP:现代浏览器通常会警告用户某些网站使用 HTTP 传输,提示不安全。

    • HTTPS:浏览器会在地址栏显示一个锁的图标,表明连接是安全的。

https 实现安全通信的原理

  • SSL/TLS 加密

    • HTTPS 使用 SSL/TLS 协议来加密数据。SSL/TLS 协议通过加密算法确保客户端和服务器之间传输的数据是加密的,从而防止中间人攻击、数据窃听等安全问题。

  • 握手过程

    • 当客户端(如浏览器)请求与服务器建立 HTTPS 连接时,会首先进行一个称为“握手”的过程。在握手过程中,客户端和服务器协商使用的加密算法,并交换加密密钥。

  • 证书验证

    • 服务器会提供一个数字证书(通常由权威的证书颁发机构 CA 签发),客户端会验证该证书的合法性,以确保服务器的身份是可信的。

了解完这些,实现网站的https访问,我们需要一个SSL证书,这里以阿里云免费SSL证书举例,在购买获取到免费证书后,进行证书创建。

证书创建

证书申请

DNS验证

这个是在DNS控制台区添加它所说的DNS解析记录,然后进行验证。验证通过后,下发证书,然后下载证书即可。阿里云SSL证书支持多种服务器类型,如:Tomcat、Apache、Nginx、IIS、JKS、其他及根证书下载。

证书下载

在Nginx服务器安装证书

  • 执行以下命令,在Nginx的conf目录下创建一个用于存放证书的目录。

cd /usr/local/nginx/conf  #进入Nginx默认配置文件目录。该目录为手动编译安装Nginx时的默认目录,如果您修改过默认安装目录或使用其他方式安装,请根据实际配置调整。
mkdir cert  #创建证书目录,命名为cert。
  • 将证书文件和私钥文件上传到Nginx服务器的证书目录(/usr/local/nginx/conf/cert)。

  • 编辑Nginx配置文件nginx.conf,修改与证书相关的配置。

    • 执行以下命令,打开配置文件。vim /usr/local/nginx/conf/nginx.conf

    • 在nginx.conf中定位到server属性配置。

    server {
        listen 443 ssl;
        server_name <yourdomain>;
        ssl_certificate cert/<cert-file-name>.pem;
        ssl_certificate_key cert/<cert-file-name>.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;
        ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        location / {
                proxy_pass http://halo;
                proxy_set_header HOST $host;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    • 可选:设置HTTP请求自动跳转HTTPS。

server {
	 listen 80;
	 listen [::]:80;
	 server_name <yourdomain>;
	 client_max_body_size 1024m;
	 location / {
	    return 301 https://$host$request_uri;
	 }
}
  • 执行以下命令,重启Nginx服务。

cd /usr/local/nginx/sbin  #进入Nginx服务的可执行目录。
./nginx -s reload  #重新载入配置文件。