Nginx配置并兼容HTTP实现代码解析
使用 openssl 生成 ssl key 和 csr 文件
配置 https 要用到私钥 example.key 文件和 example.crt 证书文件,申请证书文件的时候要用到 example.csr 文件,openssl 命令可以生成 example.key 文件和 example.csr 证书文件。
csr:cerificate signing request,证书签署请求文件,里面包含申请者的 dn(distinguished name,标识名)和公钥信息,在第三方证书颁发机构签署证书的时候需要提供。证书颁发机构拿到 csr 后使用其根证书私钥对证书进行加密并生成 crt 证书文件,里面包含证书加密信息以及申请者的 dn 及公钥信息
key:证书申请者私钥文件,和证书里面的公钥配对使用,在 https 『握手』通讯过程需要使用私钥去解密客戶端发來的经过证书公钥加密的随机数信息,是 https 加密通讯过程非常重要的文件,在配置 https 的時候要用到
使用 openssl命令可以在系统当前目录生成 example.key 和 example.csr 文件:
openssl req -new -newkey rsa:2048 -sha256 -nodes -out example_com.csr -keyout example_com.key -subj "/c=cn/st=shenzhen/l=shenzhen/o=example inc./ou=web security/cn=example.com"
下面是上述命令相关字段含义:
- c:country ,单位所在国家,为两位数的国家缩写,如: cn 就是中国
- st 字段: state/province ,单位所在州或省
- l 字段: locality ,单位所在城市 / 或县区
- o 字段: organization ,此网站的单位名称;
- ou 字段: organization unit,下属部门名称;也常常用于显示其他证书相关信息,如证书类型,证书产品名称或身份验证类型或验证内容等;
- cn 字段: common name ,网站的域名;
生成 csr 文件后,提供给 ca 机构,签署成功后,就会得到一個 example.crt 证书文件,ssl 证书文件获得后,就可以在 nginx 配置文件里配置 https 了。
配置 https
基础配置
要开启 https 服务,在配置文件信息块(server block),必须使用监听命令 listen 的 ssl 参数和定义服务器证书文件和私钥文件,如下所示:
证书文件会作为公用实体發送到每台连接到服务器的客戶端,私钥文件作为安全实体,应该被存放在具有一定权限限制的目录文件,并保证 nginx 主进程有存取权限。
私钥文件也有可能会和证书文件同放在一個文件中,如下面情況:
ssl_certificate www.example.com.cert;
ssl_certificate_key www.example.com.cert;
这种情況下,证书文件的的读取权限也应该加以限制,仅管证书和私钥存放在同一个文件里,但是只有证书会被发送到客戶端
命令 ssl_protocols 和 ssl_ciphers 可以用来限制连接只包含 ssl/tls 的加強版本和算法,默认值如下:
ssl_protocols tlsv1 tlsv1.1 tlsv1.2;
ssl_ciphers high:!anull:!md5;
由于这两个命令的默认值已经好几次发生了改变,因此不建议显性定义,除非有需要额外定义的值,如定义 d-h 算法:
#使用dh文件
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_protocols tlsv1 tlsv1.1 tlsv1.2;
#定义算法
ssl_ciphers "eecdh+ecdsa+aesgcm eecdh+arsa+aesgcm eecdh+ecdsa+sha384 eecdh+ecdsa+sha256 eecdh+arsa+sha384 eecdh+arsa+sha256 eecdh+arsa+rc4 eecdh edh+arsa !anull !enull !low !3des !md5 !exp !psk !srp !dss !rc4";
#...
http强制转https
另外配置一个server块,监听80端口,再加上rewrite。
server配置参考
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。