记录下nginx给网站和后端api添加ssl证书
SSL(Secure Sockets Layer)是一种用于保护在Internet上进行数据传输的加密协议。它是一种为网络通信提供安全性的协议,最初由网景公司(Netscape)开发。SSL的目标是通过对数据进行加密和身份验证,确保敏感信息在用户与网站之间的传输中得到保护。
SSL通过在通信的两端之间建立安全的连接来实现其目标。这个安全连接使得通过互联网传输的数据在被发送和接收时都是加密的,从而防止第三方拦截和窃取敏感信息。同时,SSL还提供了身份验证机制,确保用户与他们交互的网站确实是他们期望的网站,而不是恶意的冒充者。
在SSL的基础上,后来发展出了TLS(Transport Layer Security)协议,它是SSL的继任者。TLS和SSL的基本目标相同,都是提供安全的通信渠道,但TLS的一些版本被广泛应用于当前的网络安全实践。
主要SSL/TLS的工作流程包括:
握手阶段: 客户端向服务器端发起连接请求,服务器端回应并返回其数字证书以及支持的加密算法等信息。客户端验证证书的合法性,并生成一个用于加密通信的密钥。
密钥协商: 客户端和服务器使用握手阶段生成的密钥进行加密通信的密钥协商。这确保了双方都拥有相同的密钥,用于加密和解密数据。
数据传输: 客户端和服务器使用协商好的密钥进行加密通信,确保在传输过程中的数据保持机密性和完整性。
连接关闭: 当通信结束时,客户端和服务器会安全地关闭连接。
SSL证书是SSL/TLS协议的一部分,用于证明服务器的身份,并在通信中传递公钥,以便进行加密。SSL证书通常由经过验证的证书颁发机构(CA)签发,以确保证书的真实性和可信度。
SSL/TLS协议和相关的证书系统在保护互联网上的敏感信息、防范网络攻击和确保通信安全性方面起到了重要作用。
SSL(Secure Sockets Layer)证书是一种用于在网络上加密数据传输的安全协议。为网站添加SSL证书有几个重要的原因:
数据加密: SSL证书通过加密用户和网站之间的数据传输,防止中间人攻击。如果没有SSL,敏感信息(如登录凭据、信用卡信息等)在传输过程中可能会被黑客截取和窃取。
信任和认证: SSL证书通过数字签名和身份验证来确认网站的身份。当访问者连接到一个启用SSL的网站时,浏览器会检查SSL证书,确保它是由受信任的证书颁发机构(CA)签发的。这提高了用户对网站的信任感,因为他们知道他们正在与真实的网站进行通信,而不是一个潜在的恶意站点。
搜索引擎排名: 搜索引擎(如Google)在其搜索算法中考虑网站是否启用SSL。使用SSL有助于提高网站在搜索引擎结果页面上的排名,因此对于SEO(搜索引擎优化)至关重要。
安全性和合规性: 在一些国家和地区,特别是涉及在线支付和个人隐私的领域,使用SSL是法律和合规要求。加密用户数据对于保护用户隐私和遵循法规至关重要。
通过为网站添加SSL证书,可以提高用户的安全感,防止数据泄露和潜在的网络攻击,同时符合法规要求并在搜索引擎中获得更好的可见性。
选择证书类型: 首先,您需要选择适合您需求的SSL证书类型。常见的SSL证书类型包括:
选择证书供应商: 选择一个信誉良好的SSL证书供应商。一些常见的供应商包括Let’s Encrypt、Comodo、Symantec(现在是Digicert)、GoDaddy等。
购买SSL证书: 在所选供应商的网站上购买SSL证书。在购买过程中,您需要提供有关您和您的网站的一些信息,这些信息将用于证书的颁发。
验证域名: 对于DV和OV证书,您需要验证您拥有该域名。这通常通过在域名的DNS记录或通过向特定邮箱发送确认邮件来完成。
生成证书签发请求(CSR): 在购买证书后,您需要生成一个CSR文件。这个文件包含了将在证书颁发过程中使用的公钥。
安装SSL证书: 颁发机构将会提供您的SSL证书文件。您需要将这些文件安装到您的Web服务器上,同时配置服务器以使用SSL。
更新和续订: SSL证书通常有一个有效期(例如,一年)。在证书过期之前,您需要更新或续订证书,以确保持续的安全通信。
请注意,如果您使用的是免费的Let’s Encrypt证书,证书的颁发和更新过程可能有所不同。Let’s Encrypt提供了自动化的工具,使证书的管理变得更加简便。
每个SSL证书供应商可能会有一些特定的步骤和要求,因此在购买证书前,请查看供应商的文档或提供的指南。
# HTTPS配置
server {
listen 443 ssl; # 配置HTTPS的默认访问端口为443。
# 如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
# 如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
server_name www.test.com; # 需要将yourdomain.com替换成证书绑定的域名。
ssl_certificate /etc/nginx/ssl/www.test.com_cert_chain.pem; # 需要将cert-file-name.pem替换成已上传的证书文件的名称。
ssl_certificate_key /etc/nginx/ssl/www.test.com_key.key; # 需要将cert-file-name.key替换成已上传的证书私钥文件的名称。
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
# 表示使用的加密套件的类型。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 表示使用的TLS协议的类型。
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log combined;
root /home/dist;
index home.html index.html;
error_page 404 /404.html;
location ~ .*\.(gif|jpg|jpeg|png|eot|json|svg|ttf|woff|woff2|ico|gz|zip|TTC|js|css) {
root /home/dist;
}
location / {
root /home/dist;
index index.html home.html;
}
}
# HTTP重定向至HTTPS配置
server {
listen 80;
listen 443 ssl; # 配置HTTPS的默认访问端口为443。
server_name test.com;
rewrite ^(.*) https://www.test.com$1 permanent;
}
# HTTP重定向至HTTPS配置
server {
listen 80;
server_name www.test.com;
rewrite ^(.*) https://www.test.com$1 permanent;
}
# 这里面需要注意,如果域名加了cdn,或者全站加速里面有做强制http -> https,不用加80的跳转
server {
listen 443 ssl;
# 配置HTTPS的默认访问端口为443。
# 如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
# 如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
server_name api.test.com;
# 需要将yourdomain.com替换成证书绑定的域名。
ssl_certificate /etc/nginx/ssl/api.test.com_cert_chain.pem;
# 需要将cert-file-name.pem替换成已上传的证书文件的名称。
ssl_certificate_key /etc/nginx/ssl/api.test.com_key.key;
# 需要将cert-file-name.key替换成已上传的证书私钥文件的名称。
ssl_session_timeout 5m;
# 设置SSL会话超时时间为5分钟。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
# 表示使用的加密套件的类型。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# 表示使用的TLS协议的类型。
ssl_prefer_server_ciphers on;
# 优先使用服务端配置的加密套件。
access_log /var/log/nginx/access.log combined;
# 配置访问日志路径和格式。
location / {
proxy_redirect off;
# 禁止Nginx修改后端返回的Location头信息。
proxy_set_header Host $host;
# 设置后端请求头中的Host信息为当前请求的Host。
proxy_set_header X-real-ip $remote_addr;
# 设置后端请求头中的X-real-ip信息为当前请求的客户端IP地址。
proxy_set_header X-Forwarded-For $http_x_forwarded_for;
# 设置后端请求头中的X-Forwarded-For信息为当前请求的客户端IP地址。
proxy_set_header X-Forwarded-Proto $scheme;
# 设置后端请求头中的X-Forwarded-Proto信息为当前请求的协议类型(http/https)。
proxy_cookie_path / /;
# 关键配置,确保Cookie路径正确传递。
proxy_pass http://127.0.0.1:8080;
# 配置代理转发到后端服务的地址,此处假设后端服务运行在本地的8080端口。
}
}
ssl证书申请有很多种方式,简单介绍一种常用的平台申请,国内有阿里云可以申请免费证书,国外的可以托管到cloudflare申请证书,配置完成之后可以通过访问网站检查,显示连接是安全的就是配置成功了。