• 认真地记录技术中遇到的坑!

nginx搭建和配置HTTPS

Linux 悠悠 1年前 (2017-08-10) 460次浏览 0个评论

HTTPS 目前已经是所有注重隐私和安全的网站的首选,而且支持HTTPS对于网站的SEO也有一定的帮助。下面将介绍如何在nginx下搭建和配置HTTPS。

使用 OpenSSL 生成 SSL Key 和 CSR

OpenSSL 在 Linux、OS X 等常规的系统下默认都安装了,因为一些安全问题,一般现在的第三方 SSL 证书签发机构都要求起码 2048 位的 RSA 加密的私钥。普通的 SSL 证书认证分两种形式,一种是 DV(Domain Validated),还有一种是 OV (Organization Validated),前者只需要验证域名,后者需要验证你的组织或公司。在生成秘钥的过程中,需要填写下列信息:

  1. Common Name:域名
  2. Organization:组织或公司名字
  3. Department:部门,可以不填写
  4. City:城市,如 Shenzhen
  5. State / Province:省份,如 Shenzhen
  6. Country:国家,中国就是 CN
# 1、创建服务器私钥,命令会让你输入一个口令:
openssl genrsa -des3 -out server.key 2048

# 2、创建签名请求的证书(CSR):
openssl req -new -key server.key -out server.csr

# 3、在加载SSL支持的Nginx并使用上述私钥时除去必须的口令:
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key

# 4、最后标记证书使用上述私钥和CSR:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

# 也可以用使用下面一条命令直接生成,注意修改相关的信息
openssl req -new -newkey rsa:2048 -sha256 -nodes -out uusama.csr -keyout uusama.key -subj "/C=CN/ST=Shenzhen/L=Shenzhen/O=uusama Inc./OU=Web Security/CN=uusama.com"

以上命令执行完之后,会在当前目录生成两个文件:uusama.key 和 uusama.csr。这个 csr 文件需要提供给第三方 SSL认证机构,通过认证之后,会给一个 crt 文件,假设为 uusama.crt。

由于只有浏览器或者系统信赖的 CA 才可以让所有的访问者通畅的访问你的加密网站,而不是出现证书错误的提示,所以需要签署第三方可信任的 SSL 证书

Nginx 配置 HTTPS 网站以及增加安全的配置

通过上面的步骤,我们可以得到两个文件: uusama.crt, uusama.key,我们把这两个文件移动到 /etc/nginx/ssl/ 目录下,然后在nginx的conf.d目录下添加一项 ssl.uusama.conf 的配置。可以直接把原来的配置复制过来。然后进行修改。

server {  
    listen 443 ssl;
    server_name uusama.com;

    ssl on;
    ssl_certificate /etc/nginx/ssl/uusama.crt;
    ssl_certificate_key /etc/nginx/ssl/uusama.key;
}

注意还需要开放 443 端口,如果是阿里云服务器,需要去控制到创建443端口的访问规则。

nginx -t && nginx -s reload 重启nginx,可以看看是否成功。

新型主流的HTTPS加密方法

以上方法采用的是SHA-1的加密方式,并不怎么安全,当前主流的方法是使用 迪菲-赫尔曼密钥交换 方式。

# 在当前文件夹生成一个迪菲-赫尔曼秘钥 uusama.pem
openssl dhparam -out uusama.pem 2048

配置方法:在nginx的server配置中加上:

server{
#    listen      80;
    listen 443 ssl;
    server_name uusama.com;
    access_log  /var/log/nginx/ssl_uusama/access.log;
    error_log   /var/log/nginx/ssl_uusama/error.log;

    ssl on;
    ssl_certificate ssl_ali/uusama.pem;
    ssl_certificate_key ssl_ali/uusama.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;
    ssl_prefer_server_ciphers on;

# 下列配置开启全站https
#    add_header Strict-Transport-Security max-age=63072000;
#    add_header X-Frame-Options DENY;
#    add_header X-Content-Type-Options nosniff;
}

可靠的第三方 SSL 签发机构

目前一般市面上针对中小站长和企业的 SSL 证书颁发机构有:

StartSSL

Comodo / 子品牌 Positive SSL

GlobalSign / 子品牌 AlphaSSL

GeoTrust / 子品牌 RapidSSL

其中 Postivie SSL、AlphaSSL、RapidSSL 等都是子品牌,一般都是三级四级证书,所以你会需要增加 CA 证书链到你的 CRT 文件里。

可以在阿里云后台申请20个免费的秘钥,是的,免费,而且审核非常快,10分钟之内,有效期为一年。


转载请注明出处 nginx搭建和配置HTTPS
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

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