Nginx 配置自签名证书支持 https
当前HTTPS正在迅速普及,为了保证用户信息安全以及网站不被运营商等劫持,百度京东等很多网站已经全站切换https。由于系统上线前需要先在测试及预发布环境进行测试,而部门的静态资源测试机不支持https请求,给测试工作造成一定的不便,因此决定给nginx配置一个自签名证书。
https原理介绍
首先简单了解一下https的工作原理,https即安全版的http,在应用层http和传输层之间添加了一层ssl/tsl层,主要用于web浏览器和服务器之间的身份认证和加密数据传输。
*.crt文件
)传回给客户端,这个数字证书不但包含了用于非对称加密的公钥,还包含公钥算法、证书的颁发机构及过期时间等信息。
*.key文件
)将该随机值进行解密,然后将需要返回给客户端的内容使用该随机值(密钥)进行对称加密。
创建自签名证书
安装openssl
创建自签名证书需要安装openssl,OpenSSL是一个密码库,包含主要的加密算法、ssl协议及证书封装功能等,安装步骤如下:
rz
上传),例如
/usr/local/openssl
tar -zxvf openssl-1.0.2k.tar.gz
,然后进入到openssl-1.0.2k目录
1 |
# ./configure //配置 |
生成证书
生成证书的命令较为繁琐,不过网上有人公开的脚本可以自动生成证书,
点击
将该脚本保存为
gencert.sh
文件上传至服务器。
在该目录下执行
./gencert.sh
,这时可能会告知没有权限,执行
chmod 777 gencert.sh
,然后再次执行
./gencert.sh
,根据提示填入域名及几次密码信息即可,多次输入的密码保持一致,貌似后面也没有用到这个密码。
执行完以后会生成以下4个文件:
static.360buyimg.com.crt:自签名的证书
static.360buyimg.com.csr:证书的请求
static.360buyimg.com.key:不带口令的Key
static.360buyimg.com.origin.key:带口令的Key
Web服务器会把
static.360buyimg.com.crt
(公钥证书)发给浏览器验证,然后用
static.360buyimg.com.key
(私钥)解密浏览器发送的数据,剩下两个文件后续没有用到。
配置Nginx
支持https访问需要在Nginx配置中监听443端口并配置证书路径,完成配置如下所示:
1 |
server { |
然后重启Nginx:
1 |
# ps -ef|grep nginx //查看Nginx进程 |
这个时候你可能会看到如下的报错信息,这是因为nginx缺少http_ssl_module模块,需要在编译安装的时候带上
--with-http_ssl_module
参数,具体的操作方法详见
参考文档三
.
the “ssl” parameter requires ngx_http_ssl_module in …