热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

使用openSSL和nginx搭建本地https服务一.写在前面的话二、实验过程1.实验环境及物料2.证书中的信息说明3.Win64OpenSSLv1.1.1i下载4.OpenSS




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


  • 一.写在前面的话
  • 二、实验过程
    • 1.实验环境及物料
    • 2.证书中的信息说明
    • 3.Win64 OpenSSL v1.1.1i下载
    • 4.OpenSSL自建服务端证书请求
      • 1.生成服务端私钥
      • 2.由私钥生成待签名证书
      • 3.查看CSR文件中的信息

    • 5.OpenSSL自建CA根证书
      • 1.创建CA私钥
      • 2.生成CA待签名证书
      • 3.生成CA根证书

    • 6.OpenSSL生成服务端证书
    • 7.nginx中配置证书
      • 1.Nginx开启SSL模块
      • 2.上传证书文件到服务器
      • 3.在nginx上配置证书文件
      • 4.启动nginx
      • 5.自制的CA证书加入到可信任根证书



一.写在前面的话

这里在主要介绍在本地环境下,搭建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
在这里插入图片描述
下载到本地,然后按照提示,直接傻瓜式安装就行,这里我就不再演示了,我在本机的安装位置:
C:\Program Files\OpenSSL-Win64
在这里插入图片描述


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

进入OpenSSL的安装目录中的bin目录:找到OpenSSL.exe,通过这个可执行文件来进行下面一系列的操作。
在这里插入图片描述


1.生成服务端私钥

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

在这里插入图片描述
注意这个过程中要输入密码,执行完成后,我们看到目录中生成了server,key这个文件.
在这里插入图片描述


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

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

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

在这里插入图片描述
这个中间需要输入在第一步中设置的密码,然后填写证书请求信息。执行完成后,我们看到输出目录中出现pub.csr文件。
在这里插入图片描述


3.查看CSR文件中的信息

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

在这里插入图片描述
在这里插入图片描述


5.OpenSSL自建CA根证书

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


1.创建CA私钥

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

在这里插入图片描述
执行完成后,输出目录中生成ca.key这个文件。
在这里插入图片描述


2.生成CA待签名证书

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

在这里插入图片描述
执行完成后,输出目录会出现ca.csr文件。
在这里插入图片描述


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

在这里插入图片描述
执行完成后,输出目录中生成ca.crt文件。
在这里插入图片描述


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

在这里插入图片描述
执行完成后,输出目录中生成了server.crt证书文件。
在这里插入图片描述
证书制作完毕。


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

在这里插入图片描述


  • 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
在这里插入图片描述


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

在这里插入图片描述
这时候需要输入密码,就是我们最开始输入的密码。这样nginx就配置完成了。
如果不想输入密码,我们可以用OpenSSL下面的命令:

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

在这里插入图片描述
输出目录中生成了unsecure-server.key,把这个key上传的服务器,然后将nginx配置中
ssl_certificate_key /usr/local/openssl/server.key
改为
ssl_certificate_key /usr/local/openssl/unsecure-server.key
在这里插入图片描述
到此为止,nginx就配置完成了。
我们先访问下看看:
我在本地设置了host:

192.168.15.31 51donkey.com

http://51donkey.com/
https://51donkey.com/
当访问https的时候,出现如下:
在这里插入图片描述
本地浏览器直接阻止了。我点击高级,虽然站点也能访问,但是查看证书时,
在这里插入图片描述
下面我就要在本机将自制的CA证书加入到可信任根证书。


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

双击本地生成的ca.crt证书文件:
在这里插入图片描述
点击安装证书,安装到“受信任的根证书颁发机构”
在这里插入图片描述
这样就可以了。



推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 集成电路企业在进行跨隔离网数据交换时面临着安全性问题,传统的数据交换方式存在安全性堪忧、效率低下等问题。本文以《Ftrans跨网文件安全交换系统》为例,介绍了如何通过丰富的审批流程来满足企业的合规要求,保障数据交换的安全性。 ... [详细]
  • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
  • 如何搭建服务器环境php(2023年最新解答)
    导读:本篇文章编程笔记来给大家介绍有关如何搭建服务器环境php的相关内容,希望对大家有所帮助,一起来看看吧。本文目录一览:1、怎么搭建p ... [详细]
  • charles3.11.1抓https包
    结论先行:用的是安卓测试机,没加固之前的生产环境的安装包,可以抓到https请求加固之后的包【也就是要上应用市场的包】,抓不到https请求电脑上的操作:1.安装证书【电脑上安装了 ... [详细]
  • 本人新手,用Unity3D想做一个简单的赛车游戏,现在的问题是转弯的时候很容易出现翻车的情况,求解决思路比如说你的中心是在(0,0,0),你把他设置成(0,-1.0,0)之类的就可 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 本文介绍了在交换型网络环境下使用嗅探器ARPSniffer的方法,包括检测嗅探环境、设置嗅探的网卡和启动自动路由功能等步骤。同时指出ARPSniffer也可以在非交换型网络环境下使用来嗅探各种网络信息。 ... [详细]
  • 华为和阿里VPN
    阿里云创建VPN1、 创建VPN网关2、 填写名称,选择对应的VPC,不指定交换机,选择带宽3、购买的是IPSEC-VPN不开启SSLVPN,点击立即购买 4、 创建客户网关  ... [详细]
  • 计算机网络计算机网络分层结构
    为了解决计算机网络复杂的问题,提出了计算机网络分层结构。计算机网络分层结构主要有OSI7层参考模型,TCPIP4层参考模型两种。为什么要分层不同产商 ... [详细]
  • 0x00端口渗透端口扫描端口的指纹信息(版本信息)端口所对应运行的服务常见的默认端口号.尝试弱口令端口爆破hydra端口弱口令NTScanHs ... [详细]
author-avatar
喜欢在他耳边唱歌
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有