PKI - 借助Nginx 实现Https 服务端单向认证、服务端客户端双向认证

文章目录


Openssl

https://www.openssl.net.cn/

openssl是一个功能丰富且自包含的开源安全工具箱。

它提供的主要功能有:

  • SSL协议实现(包括SSLv2、SSLv3和TLSv1)
  • 大量软算法(对称/非对称/摘要)
  • 大数运算
  • 非对称算法密钥生成
  • ASN.1编解码库
  • 证书请求(PKCS10)编解码
  • 数字证书编解码
  • CRL编解码
  • OCSP协议
  • 数字证书验证
  • PKCS7标准实现
  • PKCS12个人数字证书格式实现等功能

openssl采用C语言作为开发语言,这使得它具有优秀的跨平台性能。openssl支持Linux、UNIX、windows、Mac等平台。openssl目前最新的版本是0.9.8e.


操系统默认的CA证书的公钥位置

centos 下 被信任的证书在此文件中

bash 复制代码
/etc/pki/t1s/cert$/ca-bunde.crt

Nginx Https 自签证书

创建和配置 Nginx 使用 HTTPS 自签名证书的步骤如下:

  1. 生成自签名证书和私钥:

openssl genrsa -out server.key 2048

  • 该命令生成一个 RSA 密钥对,并将私钥保存到 server.key 文件中。参数 2048 指定了密钥长度为 2048 位。

openssl req -x509 -new -nodes -key server.key -subj "/CN=artisan.com" -days 10000 -out server.crt

  • 这个命令生成一个自签名的 X.509 证书。解释如下:
    • -x509:表示生成自签名证书。
    • -new:创建一个新的证书请求。
    • -nodes:不加密生成的私钥。
    • -key server.key:指定使用之前生成的私钥文件 server.key
    • -subj "/CN=yandun.com":指定证书的主题(Subject)。在这里,/CN=yandun.com 表示通用名称(Common Name)为 yandun.com
    • -days 10000:指定证书的有效期为 10000 天。
    • -out server.crt:将生成的证书保存到 server.crt 文件中。

openssl x509 -in server.crt -noout -text

  • 该命令用于查看生成的证书的详细信息,包括主题、颁发者、有效期等。解释如下:
    • -in server.crt:指定要查看的证书文件。
    • -noout:不打印证书内容到标准输出。
    • -text:以文本形式显示证书内容。

这些命令可以用来生成自签名的证书并查看证书的详细信息。


  1. 配置 Nginx 使用 HTTPS:

    编辑 Nginx 的配置文件(通常位于 /etc/nginx/nginx.conf/etc/nginx/sites-available/default),并确保以下配置项已经添加或更新:

json 复制代码
 server {
   
   .....
   .....
 	ss1 on;
 	ss1_certificate /cert/server.crt;
	ss1_certificate_key /cert/server.key;
	
	#ss1_client_certificate /cert/client.crt;
	#ssI_verify_client on;

	ss1_session_cache shared:ssL:1m;
	ss1_session_timeout 10m;
	ss1_ciphers HIGH:!aNULL:!MD5;
 	ss1_prefer_server_ciphers on; 

 .....
   .....
   }

每个指令的含义如下:

  1. ss1 on;

    • 启用 SSL/TLS 加密。这表示流模块将使用 SSL/TLS 加密来保护与客户端的通信。
  2. ss1_certificate /cert/server.crt;

    • 指定用于 SSL/TLS 加密的服务器证书文件路径。在这里,/cert/server.crt 是服务器证书的路径。
  3. ss1_certificate_key /cert/server.key;

    • 指定用于 SSL/TLS 加密的服务器私钥文件路径。在这里,/cert/server.key 是服务器私钥的路径。
  4. #ss1_client_certificate /cert/client.crt;

    • 用于指定客户端证书的文件路径。这是可选的,如果您希望服务器验证客户端的证书,则取消注释并指定客户端证书的路径。
  5. #ss1_verify_client on;

    • 用于指定是否验证客户端证书。取消注释并设置为 on 可以启用客户端证书验证。
  6. ss1_session_cache shared:ssL:1m;

    • 指定用于缓存 SSL/TLS 会话的共享内存区域名称和大小。在这里,会话缓存名称为 ssL,大小为 1MB。
  7. ss1_session_timeout 10m;

    • 指定 SSL/TLS 会话的超时时间。在这里,会话超时时间为 10 分钟。
  8. ss1_ciphers HIGH:!aNULL:!MD5;

    • 指定 SSL/TLS 加密算法的优先级和允许使用的加密套件。在这里,使用了 HIGH 表示使用高强度加密算法,同时禁用了一些不安全的加密套件,如 NULLMD5
  9. ss1_prefer_server_ciphers on;

    • 指定是否优先使用服务器端提供的加密套件。设置为 on 表示优先使用服务器端提供的加密套件。

这些指令配置了 Nginx 流模块的 SSL/TLS 加密功能,包括了服务器证书、私钥、会话缓存等参数。


  1. 重启 Nginx 服务:

    完成配置后,通过以下命令重启 Nginx 服务,以使更改生效:

    bash 复制代码
    sudo systemctl restart nginx

现在,Nginx 应该已经配置为使用自签名证书进行 HTTPS 加密通信。请确保防火墙已正确配置以允许流量通过 HTTPS 端口(默认为 443)。


Nginx Https 使用CA签发证书

客户端使用自签证书供服务端验证

客户端使用 根证书 签发客户端证书 供服务端验证

相关推荐
baihb102415 分钟前
Jenkins 构建流水线
运维·jenkins
BUG 40420 分钟前
LINUX--shell
linux·运维·服务器
菜鸟小白:长岛icetea26 分钟前
Linux零基础速成篇一(理论+实操)
linux·运维·服务器
Java小白中的菜鸟3 小时前
centos7的磁盘扩容
linux·运维·服务器
黑客老陈4 小时前
面试经验分享 | 北京渗透测试岗位
运维·服务器·经验分享·安全·web安全·面试·职场和发展
橘子师兄4 小时前
如何在自己的云服务器上部署mysql
运维·服务器·mysql
@泽栖4 小时前
Docker 常用命令
运维·服务器·docker
鲁正杰6 小时前
在一个服务器上抓取 Docker 镜像并在另一个服务器上运行
运维·服务器·docker
aherhuo6 小时前
基于openEuler22.09部署OpenStack Yoga云平台(一)
linux·运维·服务器·openstack
WebDeveloper20017 小时前
如何使用美国域名中心US Domain Center和WordPress创建商业网站
运维·服务器·css·网络·html