【SSL证书】给网站安装SSL证书(Nginx服务器)

Navigator

  • 一、前情提要
  • 二、使用SSL对网站加密
    • 2.1 获取SSL证书
    • 2.2 安装SSL证书
    • 2.3 配置Web服务器
    • 2.4 验证SSL证书

一、前情提要

去年搭的网站,没有安装SSL证书,访问一直显示不安全:

在这里插入图片描述

网站部分配置:

  1. 腾讯云服务器;
  2. 阿里云域名;
  3. Cloudflare域名解析(原来用的阿里云);
  4. ubuntu20.04 系统;
  5. Nginx Web服务器。

原来的请求都是http的,不安全,原因如下:

  1. 数据传输不加密:HTTP请求的数据传输过程中不加密,因此数据很容易被黑客窃取、篡改或监听。
  2. 明文传输:HTTP请求传输的内容都是明文的,包括用户的账号密码等敏感信息,容易被攻击者截取和窃取。
  3. 没有身份验证:HTTP请求并不进行身份验证,任何人都可以发送HTTP请求,导致无法确保请求发送者的真实身份。
  4. 容易被篡改:HTTP请求的内容很容易被篡改,攻击者可以通过中间人攻击等方式修改请求内容,造成安全问题。

因此,为了保证数据传输的安全,应该使用HTTPS协议进行数据传输,HTTPS协议使用SSL/TLS加密技术来保护数据传输的安全性。此外,还应该进行身份验证、防止SQL注入等攻击方式的防范。现在还有XTLS、WS等等加密的方式。

本文使用的是SSL的方式加密。但这里简单介绍一下SSL、TLS和XTLS(我在另一台服务器的某项业务中也是用了XTLS):

SSL和TLS是两种用于加密网络连接的安全协议。它们用于保护网络通信的机密性和完整性,防止数据被窃听、篡改或伪装。SSL(SecureSockets Layer)是早期的加密协议,现已逐渐被TLS(Transport Layer Security)取代。TLS是SSL的升级版,目前广泛用于保护网站、电子邮件、即时通讯和其他网络应用程序的通信安全。

XTLS是一个相对较新的开源加密协议,是基于TLS协议开发的。XTLS在TLS的基础上增加了一些安全性和性能的改进,例如支持多路复用、更高级别的加密算法、更快的握手协议等,使得它比传统的TLS更加安全和快速。XTLS在一些需要高性能和高安全性的应用场景中表现出色,例如代理服务器、VPN等。

二、使用SSL对网站加密

使用SSL协议对网站进行加密,基本有下步骤:

  1. 购买SSL证书: SSL证书是一种数字证书,用于验证网站的身份,并为网站提供加密功能。可以从一些知名的SSL证书颁发机构(CA)购买SSL证书,例如DigiCert、Symantec、Comodo等。
  2. 安装SSL证书: 在购买SSL证书之后,需要将证书安装到Web服务器上。安装过程可能因Web服务器的不同而有所不同,通常可以参考SSL证书颁发机构提供的安装指南来完成安装过程。
  3. 配置Web服务器: 在安装完SSL证书后,需要配置Web服务器来启用SSL功能。具体的配置方法也因Web服务器的不同而有所不同,通常可以在Web服务器的配置文件中添加相关配置信息,例如监听SSL端口、指定SSL证书等。
  4. 验证SSL证书: 为了确保SSL证书的有效性和安全性,可以使用在线工具或浏览器自带的安全工具来验证SSL证书的有效性和可信度。验证的结果应该显示SSL证书颁发机构的名称、有效期、网站的域名等信息。

下面逐过程进行操作。

2.1 获取SSL证书

获取SSL证书的方式有很多种,我在阿里云申请的免费证书,现在证书有效期都是一年。使用免费的证书还是商业证书看个人需求了。

获取SSL证书的方式有以下几种:

  1. 购买商业SSL证书:可以从一些知名的SSL证书颁发机构(CA)购买商业SSL证书,例如DigiCert、Symantec、Comodo、GlobalSign等。商业SSL证书的价格通常较高,但具有更高的可信度和安全性,适用于需要保护敏感数据的网站和应用程序。
  2. 使用免费的SSL证书:一些SSL证书颁发机构提供免费的SSL证书,例如Let’s Encrypt、SSL.com、Cloudflare等。这些证书虽然免费,但也提供了一定的加密保护,适用于一些低风险的网站和应用程序。
  3. 自签名SSL证书:可以自己创建SSL证书并安装在Web服务器上,这种证书被称为自签名SSL证书。自签名SSL证书没有经过第三方机构的验证和认证,安全性较低,通常只适用于内部测试和开发环境。
  4. 使用ACME协议自动获取免费SSL证书:ACME是一种协议,用于自动化获取和部署SSL证书。使用ACME协议可以通过Let’s Encrypt等免费SSL证书颁发机构自动获取和更新SSL证书,方便快捷,适用于需要大量SSL证书的网站和应用程序。

申请证书前,需要清楚你的web服务器类型,可以使用下面方法查看(你做网站,一般都知道自己用的什么服务器):

 curl -i 你的域名

在返回内容中可以看到服务器类型是Nginx:

root@CQUPTLEI:~# curl -i XXXXX.com
HTTP/1.1 200 OK
Server: nginx
Date: Sun, 26 Mar 2023 10:45:04 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding

这里的服务器与你的云服务器不是一个概念,它是一个服务器软件

Web服务器是一种用于处理HTTP请求和响应的软件程序,它通过TCP/IP协议接受来自客户端的HTTP请求,并返回相应的HTTP响应。Web服务器通常用于托管网站和Web应用程序,为用户提供访问和交互的接口。

Web服务器通常由两个主要组件组成:HTTP服务器和应用服务器。HTTP服务器用于处理HTTP请求和响应,可以为请求提供静态文件,例如HTML、CSS、JavaScript、图像等。应用服务器用于处理动态请求,例如在Web应用程序中执行业务逻辑、连接数据库、生成动态内容等。

常见的Web服务器软件包括Apache、Nginx、IIS、Tengine等。这些服务器软件具有高性能、高可靠性、易于配置等优点,可以提供安全、稳定和高效的Web服务。同时,Web服务器也需要采取一些安全措施来保护网站和应用程序的安全性,例如使用SSL证书加密传输、限制访问、防止SQL注入、跨站脚本攻击等。

在阿里云这里直接申请就行了(其他云应该也可以),选择你用的服务器类型即可,绑定域名可以选择通配符域名。比如你的域名是a.com,那么他的次级域名(b.a.com,c.a.com)也能使用这个证书。
【SSL证书】给网站安装SSL证书(Nginx服务器)_第1张图片
申请之后,把证书下载到本地,其中:xxxxx.pem是证书,xxxxxx.key是秘钥。不同类型的证书后缀可能不一样。

2.2 安装SSL证书

把前面下载的证书上传到服务器就行了。

我使用Finalshell直接拖进去(或者WinSCP等软件都可以,我前面的文章都写过)。

证书的位置是任意的,只要在服务器的配置文件中写清楚就行了。

一般安装在web服务器目录下就行了。

如果你也不知道服务器目录在哪:

sudo systemctl status nginx(你的服务器类型)

可以看到服务器目录在/www/server/nginx,后面那个nginx.conf就是配置文件,后面还要修改。
【SSL证书】给网站安装SSL证书(Nginx服务器)_第2张图片
在nginx/目录下新建一个cert目录,把证书和秘钥上传即可。
【SSL证书】给网站安装SSL证书(Nginx服务器)_第3张图片

2.3 配置Web服务器

修改nginx.conf配置文件。

在server块中添加证书和秘钥路径(一般只用修改我添加了注释的地方):

server
    {
        # 修改1:http是80端口,https是443端口
        listen 443 ssl;
        
        server_name phpmyadmin;
        
        # 修改2:根据你的路径来写
        ssl_certificate /www/server/nginx/cert/xxxx.online.pem;
        ssl_certificate_key /www/server/nginx/cert/xxxx.key;
        
        index index.html index.htm index.php;
        .......

修改后看一下是否有错误:

root@CQUPTLEI:~# nginx -t
nginx: the configuration file /www/server/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /www/server/nginx/conf/nginx.conf test is successful

没有就可以重启nginx服务:

nginx -s reload

或者使用systemctl stop/start 的方式:

systemctl stop nginx

2.4 验证SSL证书

现在在浏览器中输入带 https:// 的域名,就能通过SSL连接你的网站了。

但是,可能会显示,网站的部分内容不安全,因为有些内容仍然是使用http传输的,比如图片。或者你仍然可以使用http开头的域名连接网站。
【SSL证书】给网站安装SSL证书(Nginx服务器)_第4张图片

继续修改nginx.conf,参考:

server {
    listen 80;
    server_name yourdomain.com;
    # 重定向http
    return 307 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name yourdomain.com;
    ssl_certificate /path/to/your/certificate.pem;
    ssl_certificate_key /path/to/your/privatekey.pem;
    // other SSL configuration
    // other server configurations
}

OK :
【SSL证书】给网站安装SSL证书(Nginx服务器)_第5张图片

如果现在还是部分资源不安全,那就需要将你网站上的http资源替换为https的了。(我之前有个视频是http的)

你可能感兴趣的:(Website,ssl,https,服务器,nginx)