基于nginx与OpenSSL实现https访问
Posted 瞧一瞧,看一看嘞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于nginx与OpenSSL实现https访问相关的知识,希望对你有一定的参考价值。
注意!!首先在nginx安装时添加--with-http_ssl_module模块,否则将会报错,后续的添加模块请参考这篇文章。
本文所提到是自建证书,要想真的还需要通过CA认证的证书才可以,可自行去购买,本文已于2020.11.19重新编辑,添加购买证书后的操作
1.自建证书:
通过openssl命令(软件包:openssl ;openssl-devel) 1)创建私钥: openssl genrsa -out server.key 1024 2)证书请求: openssl req -new -out server.csr -key server.key //填写信息,注意!!将Common Name (eg, your name or your server\'s hostname行填写成服务器的IP地址) 3)自签署证书: openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt 4)将证书变成浏览器支持的.p12格式 openssl pkcs12 -export -clcerts -in server.crt -inkey server.key -out server.p12
修改nginx配置文件
server { listen 80; listen 443 default ssl; //这样可以设置一个虚拟主机同时支持HTTP和HTTPS server_name localhost; //由于我是根据IP访问,所以这里不做修改 ssl_certificate /root/server.crt; //指定证书文件 ssl_certificate_key /root/server.key; //指定密钥文件 ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1; //指定密码为openssl支持的格式 ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location { 略 } }
将自建证书加入到浏览器中(以Chrome为例)
路径:设置-设置-设置-高级-隐私设置和安全性-管理证书-导入
注意,这时候可能还会提示安全问题,点击 高级,选择继续即可进入
补充:由于创建私钥后,每次开启nginx都需输入密码,用以下命令即可无需输入
1 cp server.key server.key.org
2 openssl rsa -in server.key.org -out server.key
2.经CA认证的证书
我是在阿里云上购买的证书,审核通过后根据自己的Web服务器来选择下载。下载完成后,zip包里有两个文件;一个.pem结尾的认证证书,一个是.key的秘钥文件
首先在nginx目录下的conf下创建cert文件夹并将下载的两个文件放进文件夹内
mkdir cert ls cert
burukku.com.pem burukku.com.key
nginx配置文件nginx.conf
善用nginx.conf中的include
server { listen 443 ssl; #配置HTTPS的默认访问端口号为443。此处如果未配置HTTPS的默认访问端口,可能会造成Nginx无法启动。Nginx 1.15.0以上版本请使用listen 443 ssl代替listen 443和ssl on。 server_name www.burukku.com; root html; index index.html index.htm; ssl_certificate cert/burukku.com.pem; #证书的文件名称。 ssl_certificate_key cert/burukku.com.key; #证书的密钥文件名称。 ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #使用此加密套件。 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #使用该协议进行配置。 ssl_prefer_server_ciphers on; location / { root html; #站点目录。 index index.html index.htm; } }
3.问题总结
缺少模块
如果重启Nginx服务器出现the "ssl" parameter requires ngx_http_ssl_module
报错,需要重新编译Nginx并在编译安装的时候加上--with-http_ssl_module
配置。
文件地址错误
如果重启Nginx服务器出现
"/cert/3970497_pic.certificatestests.com.pem":BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen(\'/cert/3970497_pic.certificatestests.com.pem\',\'r\') error:2006D080:BIO routines:BIO_new_file:no such file)
错误
需要去掉证书相对路径最前面的/
。
例如,需要去掉/cert/3970497_pic.certificatestests.com.pem
最前面的/
,使用正确的相对路径cert/3970497_pic.certificatestests.com.pem,
也可以直接使用文件的绝对路径。
以上是关于基于nginx与OpenSSL实现https访问的主要内容,如果未能解决你的问题,请参考以下文章