目录
一、介绍
1. SSL简介
2. Nginx简介
二、OpenSSL 下载与安装
三、OpenSSL自建服务端证书请求
编辑1. 生成服务端私钥
编辑2. 由私钥生成待签名证书
四、OpenSSL自建CA根证书
1. 创建私钥
2. 生成CA待签名证书
3. 创建自签名的根证书
4. OpenSSL生成服务端证书
五、在Nginx中配置证书
1. 安装 Nginx
2. 启动 Nginx 服务
3. Nginx中配置证书文件
4. 重启Nginx
5. 验证搭建https服务器是否可行
写在最后
本文将对SSL、Nginx和OpenSSL自建CA根证书的介绍非常全面,适用于想要学习搭建安全Web服务器的读者哈。
SSL(安全套接层)是一种用于在计算机网络上保护信息安全的协议。SSL 最初由网景公司开发,后来演变为 TLS(传输层安全),但人们仍然普遍使用术语 SSL 来指代这种安全协议。
SSL/TLS 的主要目标是通过加密通信内容,确保数据在客户端和服务器之间的传输过程中不被窃听或篡改。它使用公钥和私钥体系,对数据进行加密和解密,以确保通信的机密性和完整性。
SSL/TLS 的工作流程通常包括以下步骤:
握手阶段(Handshake): 客户端向服务器发送一个“客户端hello”消息,服务器回应一个“服务器hello”消息。在握手过程中,双方协商加密算法和密钥。
认证阶段: 服务器通常需要提供数字证书,以便客户端验证其身份。这有助于确保客户端正在与预期的服务器通信,而不是遭到中间人攻击。
密钥交换阶段: 在握手期间,客户端和服务器协商共享密钥,用于加密和解密数据。这确保了通信的保密性。
加密通信: 握手成功完成后,客户端和服务器使用共享密钥对通信进行加密。这使得即使有人能够截获通信,也无法轻松解密其中的内容。
SSL/TLS 在 Web 安全中起着关键作用,尤其是在保护网站上的敏感信息,如登录凭据和信用卡数据方面。最新的 TLS 版本不断改进安全性,并强调抵御不同类型的攻击。
Nginx是一个轻量级、高性能的开源Web服务器,由Igor Sysoev创建,并于2004年首次发布。它以其卓越的性能、低资源消耗以及高度可扩展性而闻名。
以下是Nginx的一些关键特点和用途:
高性能: Nginx设计的目标之一是处理高并发连接,它采用异步事件驱动的架构,可以有效地处理大量并发请求而不会导致性能下降。
低内存消耗: 相对于一些传统的Web服务器,Nginx使用较少的内存来处理相同数量的请求,这使得它在资源受限的环境中表现出色。
反向代理: Nginx可以作为反向代理服务器,将客户端的请求转发给后端服务器。这对于负载均衡、提高安全性以及实现更灵活的架构都非常有用。
负载均衡: 作为反向代理的一部分,Nginx可以分配流量到多个服务器,以确保请求在各个服务器之间均衡分布,提高系统的稳定性和性能。
静态文件服务: Nginx非常擅长提供静态文件服务。它能够快速地传送静态内容,减轻动态应用服务器的负担。
模块化设计: Nginx的模块化设计使得用户可以根据需要灵活配置和扩展功能,例如SSL支持、gzip压缩等。
总体而言,Nginx是一个强大而灵活的工具,适用于构建高性能、可扩展和稳定的Web服务器环境。
OpenSSL是一个开源的加密和安全套接字层工具包,它实现了SSL(Secure Sockets Layer)和TLS(Transport Layer Security)协议。它提供了一系列用于处理安全通信的函数和工具。我们用到它的功能主要是自签证书来自建https服务器。
你可以从官方网站(https://www.openssl.org/)下载并安装适合你操作系统的版本。我这里下载的是v1.1.1版本,步骤如下:
下载好之后按照提示安装即可,这里就不再演示了。
打开Windows命令行终端(Win+r然后cmd),进入OpenSSL目录中的bin目录,然后自建一下存储证书的地址,我这里建的是 C:/openssl
后续几步也都是通过openssl.exe可执行文件来进行操作。
openssl.exe genrsa -des3 -out c:/openssl/server.key 2048
该过程中要输入密码,记住它,执行完成后,我们看到目录中生成了server.key。
这里利用上一步生成的server.key生成待签名证书,即证书生成请求.CSR文件。中间需要输入在第一步中设置的密码,然后填写证书请求信息。
openssl.exe req -new -key c:/openssl/server.key -out c:/openssl/pub.csr
注意:这里的信息根据你自己情况如实填写或者填过都可以。
创建 OpenSSL 自建 CA(Certificate Authority) 根证书是确保安全通信的关键步骤。
使用以下命令生成CA的私钥。这个私钥将用于签署其他证书。
openssl.exe genrsa -out c:/openssl/ca.key 2048
openssl.exe req -new -key c:/openssl/ca.key -out c:/openssl/ca.csr
使用私钥生成自签名的根证书。
openssl.exe x509 -req -in c:/openssl/ca.csr -extensions v3_ca -signkey c:/openssl/ca.key -out c:/openssl/ca.crt
执行完成后,输出目录中生成ca.crt文件。
openssl.exe x509 -days 365 -req -in c:/openssl/pub.csr -extensions v3_req -CAkey c:/openssl/ca.key -CAcreateserial -out c:/openssl/server.crt -CA c:/openssl/ca.crt
执行完成后,输出目录中生成了server.crt证书文件,到此证书就制作完毕了。
现在,已经成功创建了一个自建的CA根证书。记得妥善保管私钥,因为它对于签署其他证书是关键的。在实际应用中,你可以使用这个CA根证书来签署其他实体(服务器、客户端)的证书,建立安全的通信。
在 CentOS 7 中使用 Nginx 的过程可以分为以下步骤(其他地方大致操作一致,Ubuntu中使用apt下载即可),包括安装 Nginx、配置站点等。以下是一个基本的流程:
使用 yum
包管理器安装 Nginx。
sudo yum install nginx
安装完成后,启动 Nginx 服务:
sudo systemctl start nginx
你也可以将 Nginx 设置为开机自启动:
sudo systemctl enable nginx
但是一般在 CentOS 7 中root权限下直接这样即可启动,前提是你在/usr/sbin目录中,其他地方的话加上该目录就行。
nginx -s reload
nginx
(1)上传server.crt 和 server.key 到docker容器。
docker cp 目标文件 目标容器名:/root/
(2)证书地址记一下,后续配置nginx.conf文件时要使用(pwd打印)。
(3) 然后进入nginx工作目录。
cd /etc/nginx
(4)vim 编辑器进入nginx.conf。
vim nginx.conf
在nginx.conf中找到server并编辑如下内容:
server {
listen 443 ssl; #端口号(必须433 ssl)
server_name x86docker.com; #可随意
ssl_certificate /root/opensslserver/server.crt; #证书对应地址
ssl_certificate_key /root/opensslserver/server.key; #key地址
location / {
alias html/; #路径(需要https服务器提供下载服务的路径)
autoindex on; #下载权限(开)
}
一般在 CentOS 7 中root权限下直接这样即可启动,前提是你在/usr/sbin目录中,其他地方的话加上该目录就行。
nginx -s reload
nginx
这里其实输入PEM密码的形式会在某些系统下不支持,因此我们还需将其修改为无密码模式最好,如遇到则可(使用 cat 命令)从日志/var/log/nginx/error.log中显示密码错误,将其修改为无密码格式:
openssl rsa -in /root/opensslserver/server.key -out /root/opensslserver/server_nopass.key
然后把/root/opensslserver/server_nopass.key替换到nginx.conf 中即可(替换后记得重新加载nginx)。
在本地安装证书(Windows下)打开openssl然后右键点击ca.crt。
等待完成后将 CentOS 7 docker容器内的hosts中的设置为本机地址和server_name(我这里是想从libreoffice中下载的文件,因此我的地址该地址,你可根据具体需求更换,如果是自建Web把自己的写上去即可)
这时候应该就可以去对https服务器进行一个访问了,如果有报错的话可以根据提示信息检查一下对应的那一步是否操作正确,不报403或者5开头错误就是可以了。
本文向读者介绍了SSL、Nginx和OpenSSL自建CA根证书的重要概念和实践步骤。
在SSL的部分,详细阐述了SSL的起源、演进到TLS的过程,并强调SSL/TLS在Web安全中的关键作用。对Nginx的介绍包含了该服务器的关键特点和广泛应用领域,为读者提供了对Nginx的基本了解。
在OpenSSL自建CA根证书的步骤中,以实际操作为例,逐步指导读者生成服务端私钥、待签名证书和自签名的根证书,以创建安全通信的基础。
最后,通过在CentOS 7中配置Nginx,演示了如何将生成的证书应用于实际的Web服务器,使读者能够亲身体验搭建安全通信环境的过程。
这篇博客是我学习过程的一个记录,也是我与读者分享知识和经验的平台。如果读者在实践中遇到问题,欢迎在评论区指正,共同学习进步。
更多C/C++语言、Linux系统、数据结构和ARM板实战相关文章,关注专栏:
手撕C语言
玩转linux
脚踢数据结构
系统、网络编程
探索C++
6818(ARM)开发板实战
一键三连喔
~