去年搭的网站,没有安装SSL证书,访问一直显示不安全:
网站部分配置:
原来的请求都是http的,不安全,原因如下:
- 数据传输不加密:HTTP请求的数据传输过程中不加密,因此数据很容易被黑客窃取、篡改或监听。
- 明文传输:HTTP请求传输的内容都是明文的,包括用户的账号密码等敏感信息,容易被攻击者截取和窃取。
- 没有身份验证:HTTP请求并不进行身份验证,任何人都可以发送HTTP请求,导致无法确保请求发送者的真实身份。
- 容易被篡改: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证书: SSL证书是一种数字证书,用于验证网站的身份,并为网站提供加密功能。可以从一些知名的SSL证书颁发机构(CA)购买SSL证书,例如DigiCert、Symantec、Comodo等。
- 安装SSL证书: 在购买SSL证书之后,需要将证书安装到Web服务器上。安装过程可能因Web服务器的不同而有所不同,通常可以参考SSL证书颁发机构提供的安装指南来完成安装过程。
- 配置Web服务器: 在安装完SSL证书后,需要配置Web服务器来启用SSL功能。具体的配置方法也因Web服务器的不同而有所不同,通常可以在Web服务器的配置文件中添加相关配置信息,例如监听SSL端口、指定SSL证书等。
- 验证SSL证书: 为了确保SSL证书的有效性和安全性,可以使用在线工具或浏览器自带的安全工具来验证SSL证书的有效性和可信度。验证的结果应该显示SSL证书颁发机构的名称、有效期、网站的域名等信息。
下面逐过程进行操作。
获取SSL证书的方式有很多种,我在阿里云申请的免费证书,现在证书有效期都是一年。使用免费的证书还是商业证书看个人需求了。
获取SSL证书的方式有以下几种:
- 购买商业SSL证书:可以从一些知名的SSL证书颁发机构(CA)购买商业SSL证书,例如DigiCert、Symantec、Comodo、GlobalSign等。商业SSL证书的价格通常较高,但具有更高的可信度和安全性,适用于需要保护敏感数据的网站和应用程序。
- 使用免费的SSL证书:一些SSL证书颁发机构提供免费的SSL证书,例如Let’s Encrypt、SSL.com、Cloudflare等。这些证书虽然免费,但也提供了一定的加密保护,适用于一些低风险的网站和应用程序。
- 自签名SSL证书:可以自己创建SSL证书并安装在Web服务器上,这种证书被称为自签名SSL证书。自签名SSL证书没有经过第三方机构的验证和认证,安全性较低,通常只适用于内部测试和开发环境。
- 使用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)也能使用这个证书。
申请之后,把证书下载到本地,其中:xxxxx.pem是证书,xxxxxx.key是秘钥。不同类型的证书后缀可能不一样。
把前面下载的证书上传到服务器就行了。
我使用Finalshell直接拖进去(或者WinSCP等软件都可以,我前面的文章都写过)。
证书的位置是任意的,只要在服务器的配置文件中写清楚就行了。
一般安装在web服务器目录下就行了。
如果你也不知道服务器目录在哪:
sudo systemctl status nginx(你的服务器类型)
可以看到服务器目录在/www/server/nginx,后面那个nginx.conf就是配置文件,后面还要修改。
在nginx/目录下新建一个cert目录,把证书和秘钥上传即可。
修改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
现在在浏览器中输入带 https:// 的域名,就能通过SSL连接你的网站了。
但是,可能会显示,网站的部分内容不安全,因为有些内容仍然是使用http传输的,比如图片。或者你仍然可以使用http开头的域名连接网站。
继续修改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
}
如果现在还是部分资源不安全,那就需要将你网站上的http资源替换为https的了。(我之前有个视频是http的)