SEARCH

Nginx环境下正确配置SSL安全加密证书

发布日期:2017年12月20日,网站分类:网站新闻

如今的网站和应用都已开启https,绝大部分网民也对https有所了解,苹果公司2017年1月1日要求强制开启ATS和HTTPS加密,HTTP是非常不安全的明文传输协议,任何通过HTTP协议传输的数据都以明文形式在网络中“裸奔”,任何数据都处在被窃听、篡改、冒充这三大风险之中。HTTP不提供任何方式的数据加密,如果攻击者劫持了HTTP流量,就可以直接读懂其中的信息;而且HTTP并不验证服务器身份的真实性,服务器返回的请求容易被篡改或者假冒,而用户根本无法察觉。因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。


HTTPS协议是Http Over SSL,简单来说就是HTTP的安全版本,在HTTP的基础上增加SSL/TLS加密传输协议,通过HTTPS加密传输和身份认证保证了传输过程的安全性。在登录网银和电子邮箱时,你会常常看到地址栏的网址显示HTTPS前缀,从而轻松判断这个网页是否采用了HTTPS加密连接。但是在移动应用上,网络连接的安全性就没有那么透明了,用户很难知道App连接网络时使用的是HTTP还是HTTPS。


ATS就是因此而诞生的,ATS要求服务器必须支持传输层安全(TLS)协议1.2以上版本;证书必须使用SHA256或更高的哈希算法签名;必须使用2048位以上RSA密钥或256位以上ECC算法等等,不满足条件的证书,ATS都会拒绝连接。强制开启ATS体现了苹果一贯的隐私保护态度。


Nginx环境下正确配置SSL安全加密证书


融网科技小编经常收到客户要求开启https的要求,今天我们会在nginx环境下安装SSL以及部署我们的站点是通过HTTPS访问的。


1、部署HTTPS基础工作

申请SLL证书,这里推荐使用腾讯云或者阿里云,我不是马屁精,就是单单感觉阿里云和腾讯云简单方便易存储证书,到期可自动续费。

申请成功后下载解压修改.pem,.key的前缀,如rongkeji.key,rongkeji.pem,当然有的证书是.crt,而不是.pem,这里就不多做解释,不懂度娘去。


2、上传和部署SSL证书

在root下新建一个ssl文件夹,当然你自己看的去其他地方建,小编的习惯,完整路径/root/ssl

解密私钥和设置权限,登录SSH,执行下面命令,解密私钥和授权。

openssl rsa -in rongkeji.key -out /root/ronghkeji.key chmod 600 /root/rongkeji.key


3、NGINX环境部署站点SSL

这里需要在nginx新添加一个站点,如果有站点就修改conf文件设置就可以。

conf文件具体位置在"/usr/local/nginx/conf/vhost/"目录文件中,找到对应站点的conf文件,然后修改设置如下:

server
    {
        listen 443 ssl http2;
        #listen [::]:443 ssl http2;
        server_name rongkeji.cn www.rongkeji.cn;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /rongkeji.cn;
        ssl on;
        ssl_certificate /root/ssl/rongkeji.pem;
        ssl_certificate_key /root/ssl/rongkeji.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
        ssl_session_cache builtin:1000 shared:SSL:10m;

        include rongwang.conf;
        #error_page   404   /404.html;

        # Deny access to PHP files in specific directory
        #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }

        include enable-php.conf;

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /.well-known {
            allow all;
        }

        location ~ /\.
        {
            deny all;
        }

        access_log off;
    }

最后,我们重启nginx,可以看到SSL证书生效,且HTTPS可以访问站点,但有一个问题是,http不自动跳转https,那么下面我们在说如何设置301。



4、设置http、https 301跳转

分为https www 跳转 顶级域名(https://www.rongkeji.cn 301 https://rongkeji.cn),http www 跳转 https 顶级域名(http://www.rongkeji.cn 301 https://rongkeji.cn)


代码如下:

server
    {
        listen 80;
        server_name rongkeji.cn;
		rewrite ^/(.*) https://rongkeji.cn/$1 permanent;
    }
	
server
    {
        listen 80;
        server_name www.rongkeji.cn;
		rewrite ^/(.*) https://rongkeji.cn/$1 permanent;
    }
server
    {
        listen 443 ssl http2;
        server_name www.rongkeji.cn;
        root  /rongkeji.cn;
        ssl on;
        ssl_certificate /root/ssl/rongkeji.pem;
        ssl_certificate_key /root/ssl/rongkeji.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
        ssl_session_cache builtin:1000 shared:SSL:10m;
        # openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
        ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
		rewrite ^/(.*) https://rongkeji.cn/$1 permanent;
    }


以上都可以直接添加到conf文件内,重启服务器后正常跳转,百度301跳转验证正常通过。


补充内容:

如果使用https加密检查提示下面内容,可对应修改;


1.服务器支持弱Diffie-Hellman(DH)密钥交换参数,修改后后支持http/2

ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";


修改为:

ssl_ciphers "TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";


2.开启 HSTS 功能,max-age建议是15768000,或者是63072000

add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";


详细内容解说:


1.添加add_header


#减少点击劫持
add_header X-Frame-Options DENY;
#禁止服务器自动解析资源类型
add_header X-Content-Type-Options nosniff;
#防XSS攻击
add_header X-Xss-Protection 1;


2.配置ssl_session_cache,配置共享会话缓存大小,视站点访问情况设定


ssl_session_cache builtin:1000 shared:SSL:10m;


3.关闭TLS 1.0,开启支持TLS 1.3(暂时不建议关闭TLS1.0,因为毕竟要考虑到IE用户)


ssl_protocols TLSv1.2 TLSv1.1 TLSv1.3;


4.OCSP Stapling开启


ssl_stapling on;


5.关闭IPV6监听(在不支持IPV6情况下,不建议大家开启)


#listen [::]:80;

#listen [::]:443 ssl http2;


设置完成后,提示信任状态为可信!如果大家有需要了解阿里云IPV6升级改造,可以查看《lnmp网站环境架设ipv6访问配置教程》。


关键词:nginx SSL证书

转载请注明来自:https://rongkeji.cn/news/32.html


上一篇:简单的企业或者个人网站大概需要多少钱?

下一篇:linux服务器SSH登录时自动发送邮件提醒到邮箱

地区分布

  • Da Tong
  • He Fei

大同融网信息科技有限公司

地址:大同格兰云天E座4楼411

提供了定制化的行业网站建设解决方案

合肥融建站网络文化工作室

地址:合肥市包河区绿地中心F座

融建站技术服务,助您打造高端形象

公众号

微信公众号