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

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注