基于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访问的主要内容,如果未能解决你的问题,请参考以下文章

基于nginx结合openssl实现https

Windows 64位+Nginx1.8.1 配置SSL实现HTTPS访问

基于openssl实现https访问

Nginx负载均衡实现https访问

Nginx 实现Https访问

Nginx使用自签证书配置SSL实现HTTPS访问