JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Nginx服务器使用Let’s Encrypt配置SSL

wys521 2024-09-09 12:02:18 精选教程 28 ℃ 0 评论

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

1、SSL加密

SSL是Netscape公司所提出的安全保密协议,在浏览器(如Internet Explorer、Netscape Navigator)和Web服务器(如Netscape的Netscape Enterprise Server、ColdFusion Server等等)之间构造安全通道来进行数据传输,SSL运行在TCP/IP层之上、应用层之下,为应用程序提供加密数据通道,它采用了RC4、MD5以及RSA等加密算法,使用40 位的密钥,适用于商业信息的加密。同时,Netscape公司相应开发了HTTPS协议并内置于其浏览器中,HTTPS实际上就是HTTP over SSL,它使用默认端口443,而不是像HTTP那样使用端口80来和TCP/IP进行通信。HTTPS协议使用SSL在发送方把原始数据进行加密,然后在接受方进行解密,加密和解密需要发送方和接受方通过交换共知的密钥来实现,因此,所传送的数据不容易被网络黑客截获和解密。 然而,加密和解密过程需要耗费系统大量的开销,严重降低机器的性能,相关测试数据表明使用HTTPS协议传输数据的工作效率只有使用HTTP协议传输的十分之一。假如为了安全保密,将一个网站所有的Web应用都启用SSL技术来加密,并使用HTTPS协议进行传输,那么该网站的性能和效率将会大大降低,而且没有这个必要,因为一般来说并不是所有数据都要求那么高的安全保密级别

2、TLS加密

TLS:安全传输层协议

TLS:Transport Layer Security

安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面。

目前SSL加密免费证书有很多,一般包括Let’s Encrypt,StartSSL,COMODO PositiveSSL,CloudFlare SSL,Wosign沃通SSL(原来免费,现在收费),等等,在这里推荐大家使用Let’s Encrypt

,下面小编写下自己网站使用Let’s Encrypt配置的过程。

1、首先我们到https://github.com/certbot/certbot Let‘s Encrypt网站下载项目,如果您的机器上已安装git,可以直接clone到本地,这里小编就直接下载了

下载Let’s Encrypt资源

2、下载之后,我们将这个文件上传到服务器,解压到某个目录下。例如我的解压到/opt

3、解压之后我们把文件重命名为letsencrypt,然后进入这个目录执行这个命令,这个命令意思是自动安装相关依赖,让客户端将引导您完成交互式获取和安装证书的过程。

./certbot-auto --help all

4、您也可以从命令行准确地告诉它您希望它执行的操作。举例来说,如果你想获得一个证书的example.com, www.example.com以及other.example.com,使用Apache插件都获取并安装证书,你可以这样做:(执行这个命令前提具备完整插件支持的网络服务器,如果没有,可以使用“独立”或“webroot”插件获取证书,参见步骤5,6 这里小编采用的是webroot 的方式

./certbot-auto --apache -d example.com -d www.example.com -d other.example.com

(你运行该命令的第一次,它将使一个帐户,并要求邮件并同意了让我们加密用户协议,您可以自动化那些(–emai和–agree-tos)

5、如果您想使用尚未具备完整插件支持的网络服务器,则仍然可以使用“独立”模式获取证书,多个域名使用多个-d参数,也可以用“,”分割,例如:”-d leepeng.com.cn,www.leepeng.com.cn”

./certbot-auto certonly --standalone --email admin@example.com -d example.com -d www.example.com -d other.example.net

6、如果您想使用尚未具备完整插件支持的网络服务器,则仍然可以使用“webroot ”模式获取证书:(前提要保证服务器能够访问到-w所指定的目录下)

./certbot-auto certonly --webroot -w /var/www/html -d www.leepeng.com.cn

7、执行步骤6后可能出现如下错误404的错误,按照路径错误地址创建相应目录./well-known/acme-challenge创建到这里后面就不需要了。创建完成后再次执行步骤6命令即可,没有出现这个问题请忽略。

8、生成成功后会自动保存在/etc/letsencrypt目录下生成证书文件,目录结构如图,这时候我们可以根据生成的证书配置服务器了,这里建议把把证书备份哈!

SSL证书Nginx配置

1、有了证书之后,我们准备开始配置,配置之前我们需要准备dhparam.pem文件:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

执行后会显示

This is going to take a long time.......+...........................+............................+............................+............++*++*++*

那么这些打印的内容是什么呢? dhparam 算法是在 2^4096 个数字中找出两个质数,所以需要的时间挺长。….. 意思是有可能的质数,+ 是正在测试的质数,* 是已经找到的质数。这就涉及到前向安全性(Forward Secrecy)的概念,客户端和服务器协商一个永不重用的密钥,并在会话结束时销毁它。服务器上的 RSA 私钥用于客户端和服务器之间的 Diffie-Hellman 密钥交换签名。从 Diffie-Hellman 握手中获取的预主密钥会用于之后的编码。因为预主密钥是特定于客户端和服务器之间建立的某个连接,并且只用在一个限定的时间内,所以称作短暂模式(Ephemeral)。

如果使用前向安全机制,攻击者取得了一个服务器的私钥,他是不能解码之前的通讯信息的。这个私钥仅用于 Diffie Hellman 握手签名,并不会泄露预主密钥。Diffie Hellman 算法会确保预主密钥绝不会离开客户端和服务器,而且不能被中间人攻击所拦截。

所有版本的 nginx 都依赖于 OpenSSL 给 Diffie-Hellman 的输入参数。如果不特别声明,将使用 OpenSSL 的默认设置,1024 位密钥。这绝壁是不安全的,因为我们正在使用 2048 位证书,所以要有一个更强大的 DH(更多详细描述请前往:https://www.pupboss.com/nginx-add-ssl/ )

2、接下来我们配置Nginx服务器,首先修改server,请求80端口重定向到https这个域名

server {

listen 80;

return 301 https://www.leepeng.com.cn$request_uri;

server_name www.leepeng.com.cn;

……..

接下来我们配置nginx,添加server,根据自己实际情况配置

server {

listen 443 ssl;

server_name www.leepeng.com.cn;

ssl_certificate /ssl/live/www.leepeng.com.cn/fullchain.pem;

ssl_certificate_key /ssl/live/www.leepeng.com.cn/privkey.pem;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl_prefer_server_ciphers on;

ssl_dhparam /etc/ssl/certs/dhparam.pem;

ssl_ciphers ‘ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA’;

ssl_session_timeout 1d;

ssl_session_cache shared:SSL:50m;

ssl_stapling on;

ssl_stapling_verify on;

add_header Strict-Transport-Security max-age=15768000;

# The rest of your server block

root /var/www/html;

index index.php index.html index.htm;

location / {

try_files $uri $uri/ /index.php?$args;

#root /var/www/html;

#index index.php index.html index.htm;

}

location ~ .*\.(js|css|png|jpg|gif)$

{

if (-f $request_filename) {

expires 1d;

break;

}

}

配置好后重启nginx,在浏览器访问:

最后,点击证书信息后可知是3个月的期限,到期后可以通过执行脚本./certbot-auto renew来更新证书就可以了,哈哈,是不是很方便呢!以上就是SSL在Nginx服务器上配置的过程,供大家参考,谢谢!

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表