Nginx+Https配置
现在越来越多的站点使用了https加密,这里结合密钥的创建到nginx的https配置分别进行下介绍。TLS或传输层安全( transport layer security),它的前身是SSL(安全套接字层secure sockets layer),是Web协议用来包裹在一个受保护,加密封装正常通道。采用这种技术,服务器和客户端之间可以安全地进行交互,而不用担心消息将被拦截和读取。证书系统帮助用户在核实它们与连接站点的身份。
一、创建RSA SSL认证
1# mkdir -p /etc/nginx/ssl
2# openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
3Generating a 2048 bit RSA private key
4.+++
5......................+++
6writing new private key to '/etc/nginx/ssl/nginx.key'
7-----
8You are about to be asked to enter information that will be incorporated
9into your certificate request.
10What you are about to enter is what is called a Distinguished Name or a DN.
11There are quite a few fields but you can leave some blank
12For some fields there will be a default value,
13If you enter '.', the field will be left blank.
14-----
15Country Name (2 letter code) [XX]:CN
16State or Province Name (full name) []:zhejiang
17Locality Name (eg, city) [Default City]:hangzhou
18Organization Name (eg, company) [Default Company Ltd]:mycompany
19Organizational Unit Name (eg, section) []:361way
20Common Name (eg, your name or your server's hostname) []:361way.com
21Email Address []:[email protected]
这里创建了有效期100年,加密强度为RSA 2048的SSL密钥key和X509证书文件。具体的参数说明如下:
req: 配置参数-x509指定使用 X.509证书签名请求管理(certificate signing request (CSR)).”X.509″ 是一个公钥代表that SSL and TLS adheres to for its key and certificate management.
-nodes: 告诉OpenSSL生产证书时忽略密码环节.(因为我们需要Nginx自动读取这个文件,而不是以用户交互的形式)。
-days 36500: 证书有效期,100年
-newkey rsa:2048: 同时产生一个新证书和一个新的SSL key(加密强度为RSA 2048)
-keyout: SSL输出文件名
-out:证书生成文件名
它会问一些问题。需要注意的是在common name中填入网站域名,如wiki.361way.com即可生成该站点的证书,同时也可以使用泛域名如*.361way.com来生成所有二级域名可用的网站证书。
二、配置nginx SSL认证
首先配置HTTP请求重定
1server {
2 listen 80;
3 server_name www.yourdomain.com;
4 rewrite ^ https://$http_host$request_uri? permanent; # force redirect http to https
5 #return 301 https://$http_host$request_uri;
6 }
7server {
8 listen 443 ssl;
9 ssl_certificate /etc/nginx/ssl/nginx.crt;
10 ssl_certificate_key /etc/nginx/ssl/nginx.key;
11 keepalive_timeout 70;
12 server_name www.yourdomain.com;
13 #禁止在header中出现服务器版本,防止黑客利用版本漏洞攻击
14 server_tokens off;
15 #如果是全站 HTTPS 并且不考虑 HTTP 的话,可以加入 HSTS 告诉你的浏览器本网站全站加密,并且强制用 HTTPS 访问
16 #add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";
17 # ......
18 fastcgi_param HTTPS on;
19 fastcgi_param HTTP_SCHEME https;
20 access_log /var/log/nginx/wiki.361way.com.access.log;
21 error_log /var/log/nginx/wiki.361way.com.error.log;
22 }
如果想同时启用HTTP和HTTPS:
1server {
2 listen 80;
3 listen 443 ssl;
4 server_name www.example.com;
5 ssl_certificate www.example.com.crt;
6 ssl_certificate_key www.example.com.key;
7 ...
8}
重启nginx后生效。常见的证书格式如下:
1.crt:自签名的证书
2.csr:证书的请求(用于向证书颁发机构申请crt证书时使用,nginx配置时不会用到)
3.key:SSL Key (分为不带口令和带口令版本)。
我们自签名证书配置nginx需要的是.crt证书,和不带口令的SSL Key的.key文件。如果想要配置https又不想花钱,可以使用Let’s Encrypt家的免费服务,不过https证书需要三个月更新一次。
三、其他
除了上面用到的RSA算法,还会有des3、PKCS12格式的Keystore,生成方法如下:
1openssl genrsa -des3 -out private-rsa.key 1024
命令执行过程中的提示信息Enter pass phrase 的含义是输入用来保护私钥文件的密码(最好不要超过6位)。
1openssl pkcs12 -export -name test-alias -in public-rsa.cer -inkey private-rsa.key -out user-rsa.pfx
另外还有格式转换和信息查看相关的命令如下:
1从pfx格式的证书提取出密钥和证书
2set OPENSSL_CONF=openssl.cnf
3openssl pkcs12 -in my.pfx -nodes -out server.pem
4openssl rsa -in server.pem -out server.key
5openssl x509 -in server.pem -out server.crt
6PEM格式的证书与DER格式的证书的转换
7openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER
8openssl x509 -in ca.cer -inform DER -out ca.pem -outform PEM
9打印出证书的内容:
10openssl x509 -in cert.pem -noout -text
11打印出证书的系列号
12openssl x509 -in cert.pem -noout -serial
13打印出证书的拥有者名字
14openssl x509 -in cert.pem -noout -subject
15以RFC2253规定的格式打印出证书的拥有者名字
16openssl x509 -in cert.pem -noout -subject -nameopt RFC2253
17在支持UTF8的终端一行过打印出证书的拥有者名字
18openssl x509 -in cert.pem -noout -subject -nameopt oneline -nameopt -escmsb
19打印出证书的MD5特征参数
20openssl x509 -in cert.pem -noout -fingerprint
21打印出证书的SHA特征参数
22openssl x509 -sha1 -in cert.pem -noout -fingerprint
23把PEM格式的证书转化成DER格式
24openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER
25把一个证书转化成CSR
26openssl x509 -x509toreq -in cert.pem -out req.pem -signkey key.pem
27给一个CSR进行处理,颁发字签名证书,增加CA扩展项
28openssl x509 -req -in careq.pem -extfile openssl.cnf -extensions v3_ca -signkey key.pem -out cacert.pem
29给一个CSR签名,增加用户证书扩展项
30openssl x509 -req -in req.pem -extfile openssl.cnf -extensions v3_usr -CA cacert.pem -CAkey key.pem -CAcreateserial
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/nginx-https/6316.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.