Nginx 配置https

本博客所有文章采用的授权方式为 自由转载-非商用-非衍生-保持署名 ,转载请务必注明出处,谢谢。

声明:
本博客欢迎转发,但请注明出处,保留原作者信息
博客地址:孟阿龙的博客
所有内容为本人学习、研究、总结。如有雷同,实属荣幸


Https简介

简单的理解,在http的基础上增加一层 SSL加密的过程,就实现了https。服务端和客户端传输信息的时候都会通过TLS进行加密。基本的原理如下:

  1. 客户端与服务端建立连接,生成各自的私钥和公钥
  2. 服务端返回给客户端一个公钥
  3. 客户端拿着这个公钥把需要传输给服务端的数据进行加密,形成密文,连同自己的公钥一起返回给服务器
  4. 服务器拿自己的私钥对密文解密之后,将响应数据用客户端的公钥加密,返回到客户端
  5. 客户端拿着自己的私钥解密,将数据呈现出来

搞清楚上边的原理之后,一个http服务要实现https,最关键的环节就是生成自己的证书+私钥。证书的来源基本有如下几种途径:

  1. 自己在服务器上生成。如果是自己做测试使用,推荐这种,简单方便
  2. 在CA证书机构申请免费的证书(目前阿里云、百度云都有提供)。如果服务不是很重要或者主要用来测试,那么也可以用
  3. 在CA证书机构申请付费证书。商用推荐方案

接下来就以第1中方式来记录一下https的服务配置

自己生成免费证书

我用的是nginx,因此在nginx的conf目录下创建ssl目录,之后进入ssl目录生成证书

  1. 生成秘钥key
openssl genrsa -des3 -out server.key 2048

过程中需要输入密码,两次输入一致,记住即可,结束之后生成 server.key文件,后续使用该文件生成其他配置的时候都需要输入这里的密码。如果不想后续输入密码,则执行(建议执行,因为如果不做这一步,后续配置了nginx之后,nginx服务启动的时候都需要让你输入密码):

openssl rsa -in server.key -out server.key
  1. 生成服务器证书的申请文件server.csr
openssl req -new -key server.key -out server.csr

输出的内容如下:

Enter pass phrase for root.key:  输入前面创建的密码 
Country Name (2 letter code) [AU]:CN  国家代号,中国CN 
State or Province Name (full name) [Some-State]:shannxi 省的全名 
Locality Name (eg, city) []:xi'an 市的全名,拼音 
Organization Name (eg, company) [Internet Widgits Pty Ltd]: xxxx 公司名称 
Organizational Unit Name (eg, section) []: 可以不输入,直接回车
Common Name (eg, YOUR name) []: 可以不输入,也可以输入你的域名
Email Address []:admin@mycompany.com 邮箱地址
Please enter the following ‘extra’ attributes 
to be sent with your certificate request 
A challenge password []: 可以不输入,直接回车
An optional company name []: 可以不输入,直接回车
  1. 生成CA证书:
openssl req -new -x509 -key server.key -out ca.crt -days 3650
  1. 生成一个有效期为10年的服务器证书,server.crt
openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt

完成后,在ssl目录下生成的server.crt和server.key就是我们nginx需要的证书

配置Nginx(1)

nginx需要支持https,依赖于nginx编译时打开了ssl编译选项。这一步继续配置之前,可以通过命令查看当前nginx是否支持ssl,执行nginx -V 可以查看--with-http_ssl_module 包含了这个选项

./nginx -V
nginx version: nginx/1.12.1
built by gcc 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
built with OpenSSL 1.0.2g  1 Mar 2016
TLS SNI support enabled
configure arguments: --prefix=/home/work/lnmp/nginx --http-client-body-temp-path=/home/work/lnmp/nginx/tmp/client_body --http-proxy-temp-path=/home/work/lnmp/nginx/tmp/proxy --http-fastcgi-temp-path=/home/work/lnmp/nginx/tmp/fastcgi --http-uwsgi-temp-path=/home/work/lnmp/nginx/tmp/uwsgi --lock-path=/home/work/lnmp/nginx/var/lock/ --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_sub_module --with-http_gzip_static_module --with-http_stub_status_module --with-pcre

配置Nginx(2):

image.png

如上图红框中的内容,我当前的nginx启动的3389端口对应http请求,启动443端口对应https请求。
修改完配置文件重启nginx服务生效即可。
之后就可以通过https://your.domain.name/xxx 来访问你的服务了

注意:

我测试用的是阿里云上的ecs服务器,在阿里云,默认服务器是不开放443端口的,因此需要去你的阿里云对应实例的安全组上,放开 443端口

 

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值