Nginx配置SSL证书部署HTTPS网站

转载 2017年09月05日 13:27:05

一、什么是 SSL 证书,什么是 HTTPS

SSL 证书是一种数字证书,它使用 Secure Socket Layer 协议在浏览器和 Web 服务器之间建立一条安全通道,从而实现:
1、数据信息在客户端和服务器之间的加密传输,保证双方传递信息的安全性,不可被第三方窃听;
2、用户可以通过服务器证书验证他所访问的网站是否真实可靠。
HTTPS 是以安全为目标的 HTTP 通道,即 HTTP 下加入 SSL 加密层。HTTPS 不同于 HTTP 的端口,HTTP默认端口为80,HTTPS默认端口为443。

二、什么网站需要使用SSL证书

1、购物交易类网站
不用多说,网上银行、支付宝、Paypal等肯定会全程加密以保护你的信息安全。
2、注册与登陆
一些大的网站,比如电子邮箱,注册会员或者登陆的时候,会专门通过SSL通道,保证密码安全不被窃取。
3、某些在线代理
这个。。。嗯哼,就不说了。
4、装B
比如我……

三、自行颁发不受浏览器信任的SSL证书

为晒晒IQ网颁发证书。ssh登陆到服务器上,终端输入以下命令,使用openssl生成RSA密钥及证书。

# 生成一个RSA密钥 
$ openssl genrsa -des3 -out 33iq.key 1024
 
# 拷贝一个不需要输入密码的密钥文件
$ openssl rsa -in 33iq.key -out 33iq_nopass.key
 
# 生成一个证书请求
$ openssl req -new -key 33iq.key -out 33iq.csr
 
# 自己签发证书
$ openssl x509 -req -days 365 -in 33iq.csr -signkey 33iq.key -out 33iq.crt
第3个命令是生成证书请求,会提示输入省份、城市、域名信息等,重要的是,email一定要是你的域名后缀的。这样就有一个 csr 文件了,提交给 ssl 提供商的时候就是这个 csr 文件。当然我这里并没有向证书提供商申请,而是在第4步自己签发了证书。

编辑配置文件nginx.conf,给站点加上HTTPS协议

server {
    server_name YOUR_DOMAINNAME_HERE;
    listen 443;
    ssl on;
    ssl_certificate /usr/local/nginx/conf/33iq.crt;
    ssl_certificate_key /usr/local/nginx/conf/33iq_nopass.key;
    # 若ssl_certificate_key使用33iq.key,则每次启动Nginx服务器都要求输入key的密码。
}
重启Nginx后即可通过https访问网站了。
自行颁发的SSL证书能够实现加密传输功能,但浏览器并不信任,会出现以下提示:

四、受浏览器信任的证书

要获取受浏览器信任的证书,则需要到证书提供商处申请。证书授证中心,又叫做CA机构,为每个使用公开密钥的用户发放一个数字证书。浏览器在默认情况下内置了一些CA机构的证书,使得这些机构颁发的证书受到信任。VeriSign即是一个著名的国外CA机构,工行、建行、招行、支付宝、财付通等网站均使用VeriSign的证书,而网易邮箱等非金融网站采用的是中国互联网信息中心 CNNIC颁发的SSL证书。一般来说,一个证书的价格不菲,以VeriSign的证书为例,价格在每年8000元人民币左右。
据说也有免费的证书可以申请。和VeriSign一样,StartSSL也 是一家CA机构,它的根证书很久之前就被一些具有开源背景的浏览器支持(Firefox浏览器、谷歌Chrome浏览器、苹果Safari浏览器等)。后 来StartSSL竟然搞定了微软:在升级补丁中,微软更新了通过Windows根证书认证(Windows Root Certificate Program)的厂商清单,并首次将StartCom公司列入了该认证清单。现在,在Windows 7或安装了升级补丁的Windows Vista或Windows XP操作系统中,系统会完全信任由StartCom这类免费数字认证机构认证的数字证书,从而使StartSSL也得到了IE浏览器的支持。

五、只针对注册、登陆进行https加密处理
既然HTTPS能保证安全,为什么全世界大部分网站都仍旧在使用HTTP呢?使用HTTPS协议,对服务器来说是很大的负载开销。从性能上考虑,我 们无法做到对于每个用户的每个访问请求都进行安全加密(当然,Google这种大神除外)。作为一个普通网站,我们所追求的只是在进行交易、密码登陆等操 作时的安全。通过配置Nginx服务器,可以使用rewrite来做到这一点。
在https server下加入如下配置:

if ($uri !~* "/logging.php$")
{
    rewrite ^/(.*)$ http://$host/$1 redirect;
}
在http server下加入如下配置:
if ($uri ~* "/logging.php$")
{
    rewrite ^/(.*)$ https://$host/$1 redirect;
}
这样一来,用户会且只会在访问logging.php的情况下,才会通过https访问。
更新:有一些开发框架会根据 $_SERVER['HTTPS'] 这个 PHP 变量是否为 on 来判断当前的访问请求是否是使用 https。为此我们需要在 Nginx 配置文件中添加一句来设置这个变量。遇到 https 链接重定向后会自动跳到 http 问题的同学可以参考一下。
server {
    ...
    listen 443;
    location \.php$ {
        ...
        include fastcgi_params;
        fastcgi_param HTTPS on; # 多加这一句
    }
}
 
server {
    ...
    listen 80;
    location \.php$ {
        ...
        include fastcgi_params;
    }
}

参考链接:

Nginx下只针对logging.php进行https处理的重写规则 http://www.linuxidc.com/Linux/2013-08/88272.htm
全球可信并且唯一免费的HTTPS(SSL)证书颁发机构:StartSSL http://www.linuxidc.com/Linux/2011-11/47478.htm

其他参考文章:http://www.cnblogs.com/yanghuahui/archive/2012/06/25/2561568.html

相关文章推荐

Linux系统 /dev/mapper/VolGroup-lv_root 100% 解决方案

今天,一大早发现网站登录不上,apk包也上传不上服务器,于是排除问题,最后不经意用了 df -l 命令看了一下,就发现问题所在了。 命令结果显示:/dev/mapper/VolGroup-lv_ro...

Nginx中配置https做反向代理 - 知识林

本文章来自【知识林】在Centos中的Nginx配置https做反向代理跟配置http做反向代理基本一样,只是多了ssl的相关配置,如果不知道如何在Centos中配置Nginx做反向代理可以参考文章《...

Java自定义注解

Java在1.5开始引入了注解,目前流行的框架都在用注解,可想而知注解的强大之处。以下通过自定义注解来深入了解java注解。一、创建自定义注解package com.sam.annotation; i...

在Linux安装配置Tomcat 并部署web应用 ( 三种方式 )

系统版本:centos6.5版本 java版本:1.7一、准备工作1、java -version 检查是否有java环境,没有则需要去安装并配置到环境变量中。2、下载tomcat包,下载地址:h...

openssl制作证书全过程 + 部分修改

昨天在上面一个帖子里面已经通过weblogic新建了

程序员的八重境界

看到一篇有趣的文章The Eight Levels of Programmers。以前似乎看过不少这种程序员的多少个级别、境界,但这篇语言很风趣,而且分类比较细化,让人觉得挺合情合理、无法反驳的。绝大...
  • dc_726
  • dc_726
  • 2017-08-31 04:58
  • 25581

Spring Boot 系列(一)快速入门

简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置...

程序员8月书讯

7月书讯中奖名单: zejian_《 Android编程权威指南(第3版)》 奋斗的镇屌 《Swift编程权威指南(第2版)》 bit_kaki《 Android编程权威指南...

多线程中断机制

在 java中启动线程非常容易,大多数情况下是让一个线程执行完自己的任务然后自己停掉。一个线程在未正常结束之前, 被强制终止是很危险的事情. 因为它可能带来完全预料不到的严重后果,比如会带着自己所持有...

MySQL存储过程中的IN,OUT,INOUT类型

MySQL存储过程中有IN,OUT,INOUT类型 ----------------------------------- ## IN   IN参数只用来向过程传递信息,为默认值。 ## MyS...
  • zajin
  • zajin
  • 2011-10-22 12:08
  • 16
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)