使用openSSL和nginx搭建本地https服务

使用openSSL和nginx搭建本地https服务

一.写在前面的话

这里在主要介绍在本地环境下,搭建https的过程,关于https的相关理论,可以参考我上一篇博客:
Https原理解析及详细推演过程
这里主要先明确几个概念:

  • SSL/TSL: SSL 的英文全称是 “Secure Sockets Layer” ,中文名为 “ 安全套接层协议层 ” ,它是网景( Netscape )公司提出的基于 WEB 应用的安全协议。 SSL 协议指定了一种在应用程序协议(如 HTTP 、 Telenet 、 NMTP 和 FTP 等)和 TCP/IP 协议之间提供数据安全性分层的机制,它为 TCP/IP 连接提供数据加密、服务器认证、消息完整性以及可选的客户机认证。 TSL的英文全称是“Transport Layer Security”,中文名为 “ 传输层安全性协议 ” ,在1996年,由Netscape和Paul Kocher共同设计的版本SSL 3.0协议发布。SSL 3.0协议获得互联网广泛认可和支持,因特网工程任务组(IETF)接手负责该协议,并将其重命名为传输层安全(TLS)协议。TLS协议的第一个版本(RFC 2246)于1999年1月发布,实质上就是SSL 3.0协议的适度改进版。虽然TLS协议和SSL协议是同一个协议的迭代升级,但是其重命名后在名称上造成的混淆一直延续到今天,业内通常将二者统称为SSL/TLS协议。
  • CSR:CSR的英文全称是“Certificate Signing Request”,是一个证书签名请求,是客户的服务器软件所生成的一串文本字符。客户在注册的过程中首先要在WEB服务器上生成CSR,并把这串字符提供给证书认证中心。CSR中包括国家、省份、城市、组织名称、部门、域名、邮箱等信息,它还不是一个证书,知识一个整数签名的请求文件。
  • CRT:CRT是英文单词Certificate的缩写,即生成的真实的整数;
  • KEY:指利用des3等对称加密算法生成的私钥;
  • X509:由国际电信联盟(ITU-T)制定的数字证书标准
  • OpenSSL:是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

二、实验过程

1.实验环境及物料

win10 操作系统、Win64 OpenSSL v1.1.1i、VMware、centos 7.x、 nginx;

2.证书中的信息说明

  • Country Name (2 letter code) [AU]:CN #请求签署人的国家
  • State or Province Name (full name) [Some-State]:Shandong:#请求签署人的省份
  • Locality Name (eg, city) []:Jining:#请求签署人的城市名字
  • Organization Name (eg, company) [Internet Widgits Pty Ltd]:91donkey :#请求签署人的公司名字
  • Organization Name (eg, company)[Default Company Ltd]:#请求签署人的公司名字
  • Organizational Unit Name (eg, section) []:jishubu:#请求签署人的部门名字
  • Common Name (e.g. server FQDN or YOUR name) []:donkey.com:#这里一般填写请求人的服务器域名

3.Win64 OpenSSL v1.1.1i下载

下载地址:http://slproweb.com/products/Win32OpenSSL.html
使用openSSL和nginx搭建本地https服务
下载到本地,然后按照提示,直接傻瓜式安装就行,这里我就不再演示了,我在本机的安装位置:
C:\Program Files\OpenSSL-Win64
使用openSSL和nginx搭建本地https服务

4.OpenSSL自建服务端证书请求

进入OpenSSL的安装目录中的bin目录:找到OpenSSL.exe,通过这个可执行文件来进行下面一系列的操作。
使用openSSL和nginx搭建本地https服务

1.生成服务端私钥

openssl.exe genrsa -des3 -out d:/study/openssl/server.key 2048

使用openSSL和nginx搭建本地https服务
注意这个过程中要输入密码,执行完成后,我们看到目录中生成了server,key这个文件.
使用openSSL和nginx搭建本地https服务

2.由私钥生成待签名证书

利用上一步生成的server.key生成待签名证书,即证书生成请求,CSR文件。

openssl.exe req -new -key d:/study/openssl/server.key -out d:/study/openssl/pub.csr

使用openSSL和nginx搭建本地https服务
这个中间需要输入在第一步中设置的密码,然后填写证书请求信息。执行完成后,我们看到输出目录中出现pub.csr文件。
使用openSSL和nginx搭建本地https服务

3.查看CSR文件中的信息

openssl.exe  req -text -in d:/study/openssl/pub.csr

使用openSSL和nginx搭建本地https服务
使用openSSL和nginx搭建本地https服务

5.OpenSSL自建CA根证书

我们用的操作系统(windows,linux,unix,android,ios等)都预置了很多信任的根证书,比如VeriSign根证书,那么浏览器在访问服务端的时候,SSL协议握手时服务器就会把它的服务器证书发给用户浏览器,而这本服务器证书又比如说是VeriSign颁发的,自然就能验证通过。
win10系统里要查看证书,右键工具栏左下角windows图标,选择“运行”,然后输入certmgr.msc,回车,这时就会弹出一个窗口就可以查看到了,如下图所示:
使用openSSL和nginx搭建本地https服务

1.创建CA私钥

openssl.exe  genrsa -out  d:/study/openssl/ca.key 2048

使用openSSL和nginx搭建本地https服务
执行完成后,输出目录中生成ca.key这个文件。
使用openSSL和nginx搭建本地https服务

2.生成CA待签名证书

openssl.exe req -new -key d:/study/openssl/ca.key -out d:/study/openssl/ca.csr

使用openSSL和nginx搭建本地https服务
执行完成后,输出目录会出现ca.csr文件。
使用openSSL和nginx搭建本地https服务

3.生成CA根证书

openssl.exe x509 -req -in d:/study/openssl/ca.csr -extensions v3_ca  -signkey d:/study/openssl/ca.key -out d:/study/openssl/ca.crt

使用openSSL和nginx搭建本地https服务
执行完成后,输出目录中生成ca.crt文件。
使用openSSL和nginx搭建本地https服务

6.OpenSSL生成服务端证书

openssl.exe x509 -days 365 -req -in d:/study/openssl/pub.csr -extensions v3_req -CAkey d:/study/openssl/ca.key -CA d:/study/openssl/ca.crt -CAcreateserial -out d:/study/openssl/server.crt

使用openSSL和nginx搭建本地https服务
执行完成后,输出目录中生成了server.crt证书文件。
使用openSSL和nginx搭建本地https服务
证书制作完毕。

7.nginx中配置证书

nginx的搭建过程,我这里就不再详细说明了,不清楚的小伙伴,可以参考我之前的博客:
Nginx搭建静态资源Web服务器

1.Nginx开启SSL模块

在我第一次配置好启动nginx的时候,启动不了,抛出错误如下:

nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:37

原因也很简单,nginx缺少http_ssl_module模块,编译安装的时候带上–with-http_ssl_module配置就行了,但是现在的情况是我的nginx已经安装过了,怎么添加模块,其实也很简单,这里做个简单说明。

  • 切换到源码包:
 cd /soft/nginx-1.18.0/src

使用openSSL和nginx搭建本地https服务

  • configure 生成新的配置信息:
 ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
  • 执行make命令
    运行上面的命令即可,配置完成后,运行命令:
make

这里不要进行make install,否则就是覆盖安装。

  • 备份原有已安装好的nginx
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
  • 覆盖掉原有的nginx
    然后将刚刚编译好的nginx覆盖掉原有的nginx(这个时候nginx要停止状态)
cp ./objs/nginx /usr/local/nginx/sbin/

这样https模块就暗转更好了。

2.上传证书文件到服务器

将server.key和sever.crt文件上传的本地虚拟中的linux服务器上,这里我直接放到
/usr/local/openssl
使用openSSL和nginx搭建本地https服务

3.在nginx上配置证书文件

nginx上开启443端口,同时配置证书地址:
    # HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  51donkey.com;

        ssl_certificate      /usr/local/openssl/server.crt;
        ssl_certificate_key  /usr/local/openssl/server.key
        location / {

            alias html/;
            autoindex on;
            set $limit_rate 2m;
        }

4.启动nginx

./sbin/nginx

使用openSSL和nginx搭建本地https服务
这时候需要输入密码,就是我们最开始输入的密码。这样nginx就配置完成了。
如果不想输入密码,我们可以用OpenSSL下面的命令:

openssl.exe rsa -in d:/study/openssl/server.key -out d:/study/openssl/unsecure-server.key

使用openSSL和nginx搭建本地https服务
输出目录中生成了unsecure-server.key,把这个key上传的服务器,然后将nginx配置中
ssl_certificate_key /usr/local/openssl/server.key
改为
ssl_certificate_key /usr/local/openssl/unsecure-server.key
使用openSSL和nginx搭建本地https服务
到此为止,nginx就配置完成了。
我们先访问下看看:
我在本地设置了host:

192.168.15.31 51donkey.com

http://51donkey.com/
https://51donkey.com/
当访问https的时候,出现如下:
使用openSSL和nginx搭建本地https服务
本地浏览器直接阻止了。我点击高级,虽然站点也能访问,但是查看证书时,
使用openSSL和nginx搭建本地https服务
下面我就要在本机将自制的CA证书加入到可信任根证书。

5.自制的CA证书加入到可信任根证书

双击本地生成的ca.crt证书文件:
使用openSSL和nginx搭建本地https服务
点击安装证书,安装到“受信任的根证书颁发机构”
使用openSSL和nginx搭建本地https服务
这样就可以了。

上一篇:Windows平台Python Pyramid实战从入门到进阶:第一个服务


下一篇:shell study-15day--shell函数