Nginx+Https配置
现在越来越多的站点使用了https加密,这里结合密钥的创建到nginx的https配置分别进行下介绍。TLS或传输层安全( transport layer security),它的前身是SSL(安全套接字层secure sockets layer),是Web协议用来包裹在一个受保护,加密封装正常通道。采用这种技术,服务器和客户端之间可以安全地进行交互,而不用担心消息将被拦截和读取。证书系统帮助用户在核实它们与连接站点的身份。
一、创建RSA SSL认证
# mkdir -p /etc/nginx/ssl # openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt Generating a 2048 bit RSA private key .+++ ......................+++ writing new private key to '/etc/nginx/ssl/nginx.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:zhejiang Locality Name (eg, city) [Default City]:hangzhou Organization Name (eg, company) [Default Company Ltd]:mycompany Organizational Unit Name (eg, section) []:361way Common Name (eg, your name or your server's hostname) []:361way.com Email Address []:itybku@139.com
这里创建了有效期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请求重定向
server { listen 80; server_name www.yourdomain.com; rewrite ^ https://$http_host$request_uri? permanent; # force redirect http to https #return 301 https://$http_host$request_uri; } server { listen 443 ssl; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; keepalive_timeout 70; server_name www.yourdomain.com; #禁止在header中出现服务器版本,防止黑客利用版本漏洞攻击 server_tokens off; #如果是全站 HTTPS 并且不考虑 HTTP 的话,可以加入 HSTS 告诉你的浏览器本网站全站加密,并且强制用 HTTPS 访问 #add_header Strict-Transport-Security "max-age=31536000; includeSubdomains"; # ...... fastcgi_param HTTPS on; fastcgi_param HTTP_SCHEME https; access_log /var/log/nginx/wiki.361way.com.access.log; error_log /var/log/nginx/wiki.361way.com.error.log; }
如果想同时启用HTTP和HTTPS:
server { listen 80; listen 443 ssl; server_name www.example.com; ssl_certificate www.example.com.crt; ssl_certificate_key www.example.com.key; ... }
重启nginx后生效。
常见的证书格式如下:
.crt:自签名的证书 .csr:证书的请求(用于向证书颁发机构申请crt证书时使用,nginx配置时不会用到) .key:SSL Key (分为不带口令和带口令版本)。
我们自签名证书配置nginx需要的是.crt证书,和不带口令的SSL Key的.key文件。如果想要配置https又不想花钱,可以使用Let's Encrypt家的免费服务,不过https证书需要三个月更新一次。
三、其他
除了上面用到的RSA算法,还会有des3、PKCS12格式的Keystore,生成方法如下:
openssl genrsa -des3 -out private-rsa.key 1024
命令执行过程中的提示信息Enter pass phrase 的含义是输入用来保护私钥文件的密码(最好不要超过6位)。
openssl pkcs12 -export -name test-alias -in public-rsa.cer -inkey private-rsa.key -out user-rsa.pfx
另外还有格式转换和信息查看相关的命令如下:
从pfx格式的证书提取出密钥和证书 set OPENSSL_CONF=openssl.cnf openssl pkcs12 -in my.pfx -nodes -out server.pem openssl rsa -in server.pem -out server.key openssl x509 -in server.pem -out server.crt PEM格式的证书与DER格式的证书的转换 openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER openssl x509 -in ca.cer -inform DER -out ca.pem -outform PEM 打印出证书的内容: openssl x509 -in cert.pem -noout -text 打印出证书的系列号 openssl x509 -in cert.pem -noout -serial 打印出证书的拥有者名字 openssl x509 -in cert.pem -noout -subject 以RFC2253规定的格式打印出证书的拥有者名字 openssl x509 -in cert.pem -noout -subject -nameopt RFC2253 在支持UTF8的终端一行过打印出证书的拥有者名字 openssl x509 -in cert.pem -noout -subject -nameopt oneline -nameopt -escmsb 打印出证书的MD5特征参数 openssl x509 -in cert.pem -noout -fingerprint 打印出证书的SHA特征参数 openssl x509 -sha1 -in cert.pem -noout -fingerprint 把PEM格式的证书转化成DER格式 openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER 把一个证书转化成CSR openssl x509 -x509toreq -in cert.pem -out req.pem -signkey key.pem 给一个CSR进行处理,颁发字签名证书,增加CA扩展项 openssl x509 -req -in careq.pem -extfile openssl.cnf -extensions v3_ca -signkey key.pem -out cacert.pem 给一个CSR签名,增加用户证书扩展项 openssl x509 -req -in req.pem -extfile openssl.cnf -extensions v3_usr -CA cacert.pem -CAkey key.pem -CAcreateserial
You can donate through PayPal.My paypal id: itybku@139.comPaypal page: https://www.paypal.me/361way
近期评论