热爱技术
专注分享

Linux下Nginx开启SSL加密连接的方法(阿里云免费证书)

       Nginx是一款Linux上轻量级的HTTP代理器,通过Nginx我们可以在Linux服务器上搭建自己的网站,是Linux系统上的一个web server。前面我已经写过一篇如何在Linux利用Nginx搭建网页服务器的教程,参见:从0开始,选购VPS,搭建LNMP环境+绑定域名解析+WordPress个人网站

   

   

   

   

   
    SSL加密连接可以加密服务器与浏览器之间的连接,访问方式也从http(明文传输)变成了https。对于网站的登录、注册等页面非常实用,可以防止信息被窃取。虽然对于我们自己的小网站来说并没有什么用,但是加上了还算是逼格满满的。SSL加密连接的效果如下:

   

   blob.png

   blob.png

   

   

   
网上有很多种方法,万变不离其宗,我就分享一下自用的方法吧。特点是简单方便,没有过于复杂的步骤,即可完成整个网站的SSL加密连接。

   
需要准备的软件: XSHELL和Wincsp 自行百度下载。自己服务器的地址和root密码

   

   第一步 申请证书

   
对于证书,我们可以自己制作,但是我们自己制作的证书不会被浏览器信任,提示证书风险,所以我们要去申请专业证书服务提供商所签发的证书,这里我们选择阿里云里的Symantec Basic DV CA免费证书。

   
打开阿里云首页 www.aliyun.com  右上角有一个 控制台 打开,用自己的淘宝/支付宝账号登录。

   
看到左侧的导航栏,打开安全–证书服务,然后点击购买证书。

   
选择免费型DV证书。

   

   blob.png

   

   
购买完成之后,回到安全–证书服务,可以看到证书已经出现在列表里了,接下来需要我们给这个证书绑定域名。

   blob.png

   
点右边的“补全”,进入信息填写界面。

   
这里我们需要填写自己网站的域名,个人信息等等。

   
补全信息界面的第二步的域名验证,我们选择DNS验证或者文件验证都可以,具体的验证内容在提交审核之后会通过邮件发给你。操作方法附在审核后的步骤中。

   补全信息界面的第三步的证书CSR文件,我们选择系统生成的CSR,点创建。  虽然也可以用OPEN SSL自己生成证书,但是不推荐,因为经常会抽风,导致审核失败,SSL证书风险。

   blob.png

全都完成后,提交审核。等大概1分钟,会收到一个验证域名的邮件。上面我们有DNS验证和文件验证两种方法。

  • DNS验证:如果选择了DNS验证,你会通过邮件收到一条TXT记录值。打开申请域名的网页,添加一条TXT解析记录。如我是阿里云,那么打开控制台–域名与万网–云解析DNS,添加一条解析记录:

   
    记录类型:txt   主机记录:@    记录值:邮件里的值

  • 文件验证:如果选择了文件验证,你会通过邮件收到一个验证文件。根据邮件里的方法,将文件下载下来,打开winscp连上自己的网站,进入网站目录中,创建相应的文件夹,将文件放入文件夹中,然后验证。

   
验证成功后回到 安全–证书服务 下载自己的SSL证书。

   

   第二步,配置SSL证书到服务器。

   
在上一步我们下载了自己的证书,解压得到两个文件,一个是pem证书文件,一个是key秘钥文件。

   
为了规范起见,把这两个文件命名为你的网址(不能用中文字符),比如我把两个文件分别命名为xiaoweigod.com.pem和xiaoweigod.com.key,然后打开winscp,连接自己的服务器,把这两个文件上传到 /etc/ssl/certs目录中,如果没有这个目录,自己新建一个。

提示:由于https连接需要服务器开启443端口,博主用的是阿里云,默认安全策略关闭了443端口,需要开启服务器的443端口才能正常访问,需要去控制台添加安全组规则,将443端口开放。其他主机提供商也类似,如果是系统自带iptable防火墙,请设置允许443端口开放。

   

   第三步,配置Nginx支持SSL。

   
如果你的Nginx只挂了一个网站,没有用vhost,那么配置文件是 /usr/local/nginx/conf/nginx.conf,如果你的Nginx挂了多个网站或者启用了vhost,那么配置文件是 /usr/local/nginx/conf/vhost/你的域名.conf

   
打开配置文件。在 server{   } 中加入以下内容:

listen 443;
    ssl on;
        ssl_certificate /etc/ssl/certs/_certificate_key /etc/ssl/certs/        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;
        ssl_prefer_server_ciphers on;

   
以下为代码解释,方便排查问题。

   

listen 443;   服务器监听443端口(常规SSL端口)
    ssl on;   开启SSL加密
        ssl_certificate /etc/.../xx.pem;   指明证书文件的路径
        ssl_certificate_key /etc/.../xx.key;    指明证书秘钥的路径
        ssl_session_timeout 5m;    超时等待时间5分钟
        ssl_ciphers ...;   SSL握手密码
        ssl_protocols...;    仅使用TLS
        ssl_prefer_server_ciphers on;    握手密码服务器偏好

   
配置完成后,打开xshell连上服务器,执行

service nginx restart

   
重启nginx 服务。

   
重启过程中如果出现如下等错误,请根据提示检查刚才更改的Nginx配置文件有没有语法错误。这里很详细的提示了具体哪个文件哪一行有错误。

Stoping nginx... nginx: [emerg] unknown directive in /usr/local/nginx/conf/vhost/www.xiaoweigod.com.conf:6
 failed. Use force-quit

   

   
做完这些步骤,在浏览器中清空缓存,访问 https://你的域名 应该就可以看到效果了,SSL加密完成。

   
特别注意,如果引入了http(非加密)外链,会使页面出现安全警告,所以请保证页面上所有的外链资源都是https开头或者是本地服务器资源。

   
如要自动(强制)http跳转https访问,请看我下一篇文章:Nginx下SSL强制跳转https的方法(100%可用)

赞(3) 打赏
未经允许不得转载:小伟博客 » Linux下Nginx开启SSL加密连接的方法(阿里云免费证书)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏