柴少鹏的官方网站 技术在分享中进步,水平在学习中升华

nginx系列(六)之HTTPS

一、nginx+ssl搭建HTTPS服务器

1.1 HTTPS介绍

超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器身份的鉴定。HTTPS连接经常被用于万维网上的交易支付和企业信息系统中敏感信息的传输。HTTPS不应与在RFC 2660中定义的安全超文本传输协议(S-HTTP)相混。
HTTPS 目前已经是所有注重隐私和安全的网站的首选,随着技术的不断发展,HTTPS 网站已不再是大型网站的专利,所有普通的个人站长和博客均可以自己动手搭建一个安全的加密的网站。

如果你用HTTP协议,那么账号密码什么的都是明文传输,如果涉及到隐私和金融的问题,不加密确实很可怕。而用了HTTPS所有的HTTP数据都是在SSL/TLS协议封装之上进行传输的。HTTPS协议是在HTTP协议的基础上,添加了SSL/TLS握手以及数据加密传输,也属于应用层协议。Https使用的默认端口是443。

现在只要是稍微有点规模的网站都会用到HTTPS协议,所以这个是我们要掌握的,当然部署很简单因为密钥基本都是买的,我们就是从WoSign那里购买的CA证书。泛域名和单个域名的价钱还是不一样的。全球可信并且唯一免费的HTTPS(SSL)证书颁发机构:StartSSL。

1.2 创建自签证书

# yum install openssl openssl-devel

制作CA证书:

#openssl genrsa -des3 -out ca.key 2048 #制作CA证书,这是需输入两次密码的。

图片.png

#openssl rsa -in ca.key -out ca_nopass.key  #再利用已经创建的ca.key(CA 私钥)创建一个不需要输出密码的ca私钥。因为这个配置文件要添加到nginx的配置文件中去的,如果用上面需要输密码的ca证书,那无法实现nginx的开机自启动,需要有人手工输入密码或者需要例如expect之类的程序帮助一下,如下图:

图片.png

#openssl req -new -x509 -days 3650 -key ca.key -out ca.crt  #创建ca根证书的公钥

图片.png

#从上到下依次为:ca.key创建时候的密码、国家、省份、城市、公司名称、部门名称、个人名称或者主机名称、邮箱地址。

博文来自:www.51niux.com

1.3 nginx配置ssl

其实如果是我们个人自己内部用什么的,到上面那里已经OK了。下面我们nginx配置一下:

 server {
            listen 443 ssl;  #监听442端口
            server_name ssl.51niux.com   #定义一个域名
            ssl on;          #开启ssl
            ssl_certificate  /root/keys/ca.crt;   #指定ca公钥的位置
            ssl_certificate_key /root/keys/ca_nopass.key;  #指定ca无密码秘钥的位置
     }

J)310V(0V(QZJC``SZS@XEH.png

#上图因为这个ca证书是我们自己创建的,所以会提示存在安全问题,我们忽略继续浏览网站(如果证书没问题下图的小钥匙是绿色的图片。)。

图片.png

#通过上图可以看到我们的访问是成功的,但是浏览器安全那里是感叹号,点击可以查看证书信息。点击一下查看一下信息(点击查看证书能看到更详细的信息。):

图片.png

1.4 模拟制作网站的证书并用CA签名认证

# openssl genrsa -des3 -out 51niux.com.pem 2048  #生成51niux.com域名的私钥,也需要输入两次密码。

# openssl rsa -in 51niux.com.pem -out 51niux.com.key  #输入创建51niux.com.pem的密码,就是再准备一份不需要密码的51niux.com的证书秘钥。

# openssl req -new -key 51niux.com.pem -out 51niux.com.csr   #输入创建51niux.com.pem的密码,生成签名请求。

图片.png

#红色框框里分别是:创建51niux.com.pem时的密码,国家、省份、城市、公司名称、部门、域名(一般泛域名)、邮箱、密码、再次确认密码(一般这两次密码都默认回车,不需要密码)

# openssl ca -policy policy_anything -days 365 -cert ca.crt -keyfile ca.key -in 51niux.com.csr -out 51niux.com.crt   #用ca进行证书签名(需要按两次y进行确认)
如果报错:

Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for ca.key:
/etc/pki/CA/index.txt: No such file or directory
unable to open '/etc/pki/CA/index.txt'
140435694843808:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('/etc/pki/CA/index.txt','r')
140435694843808:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:
解决办法:

# touch /etc/pki/CA/index.txt

# echo 00 > /etc/pki/CA/serial

博文来自:www.51niux.com

1.5 nginx再次配置自己的ca证书

上面这种证书才是相对而言规范点的证书,一般CA签证机构办法给我们的证书也是这种。

   server {
            listen 443 ssl;
            server_name ssl.51niux.com
            ssl on;
            ssl_certificate  /root/keys/51niux.com.crt;
            ssl_certificate_key /root/keys/51niux.com.key;
     }

图片.png

#直接通过火狐浏览器看看我们新生成的证书的常规信息吧,最上面颁发给是我们1.4创建的域名证书信息,第二段是我们CA签证机构的信息。

1.6 HTTPS的优化

SSL操作需要消耗CPU资源,所以在多处理器的系统,需要启动多个工作进程,而且数量需要不少于可用CPU的个数。最消耗CPU资源的SSL操作是SSL握手。

有两种方法可以将每个客户端的握手操作数量降到最低:
1. 保持客户端长连接,在一个SSL连接发送多个请求
2. 在并发的连接或者后续的连接中重用SSL会话参数,这样可以避免SSL握手操作。

在http{}中加入:

ssl_session_cache shared:SSL:10m;    #1M缓存可以存放约4000个会话。
ssl_session_timeout 10m;             #默认的缓存超时时间是5m,可以加大这里。


作者:忙碌的柴少 分类:Web环境搭建 浏览:1803 评论:0
留言列表
发表评论
来宾的头像