openssl是一个功能丰富且自包含的开源安全工具箱。
它提供的主要功能有:
openssl采用C语言作为开发语言,这使得它具有优秀的跨平台性能。openssl支持Linux、UNIX、windows、Mac等平台。openssl目前最新的版本是0.9.8e.
centos 下 被信任的证书在此文件中
/etc/pki/t1s/certs/ca-bunde.crt
创建和配置 Nginx 使用 HTTPS 自签名证书的步骤如下:
openssl genrsa -out server.key 2048
server.key
文件中。参数 2048
指定了密钥长度为 2048 位。
openssl req -x509 -new -nodes -key server.key -subj "/CN=artisan.com" -days 10000 -out server.crt
-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
:以文本形式显示证书内容。这些命令可以用来生成自签名的证书并查看证书的详细信息。
Issuer 和 Subject 是同一个机构, 说明是自签证书。
CA: TRUE 说明它是一个CA签发结构。
编辑 Nginx 的配置文件(通常位于 /etc/nginx/nginx.conf
或 /etc/nginx/sites-available/default
),并确保以下配置项已经添加或更新:
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;
.....
.....
}
每个指令的含义如下:
ss1 on;
:
ss1_certificate /cert/server.crt;
:
/cert/server.crt
是服务器证书的路径。ss1_certificate_key /cert/server.key;
:
/cert/server.key
是服务器私钥的路径。#ss1_client_certificate /cert/client.crt;
:
#ss1_verify_client on;
:
on
可以启用客户端证书验证。ss1_session_cache shared:ssL:1m;
:
ssL
,大小为 1MB。ss1_session_timeout 10m;
:
ss1_ciphers HIGH:!aNULL:!MD5;
:
HIGH
表示使用高强度加密算法,同时禁用了一些不安全的加密套件,如 NULL
和 MD5
。ss1_prefer_server_ciphers on;
:
on
表示优先使用服务器端提供的加密套件。这些指令配置了 Nginx 流模块的 SSL/TLS 加密功能,包括了服务器证书、私钥、会话缓存等参数。
完成配置后,通过以下命令重启 Nginx 服务,以使更改生效:
sudo systemctl restart nginx
现在,Nginx 应该已经配置为使用自签名证书进行 HTTPS 加密通信。请确保防火墙已正确配置以允许流量通过 HTTPS 端口(默认为 443)。
我们可以看到 开启了Https以后,直接使用http的方式访问是行不通的
curl: (60) Peer's certificate issuer has been marked as not trusted by the user
More details here: http;//curl.haxx.se/docs/sslcerts.html
通过web访问 会弹出警告信息
If you'd like to turn off curl's verification of the certificate, use
the -k (or --insecure) option.
curl https://192.168.3.103 -k
可以通过在 curl
命令中添加 -k
或 --insecure
选项来关闭 curl
对证书的验证,从而允许直接访问未经验证的 HTTPS 网站。这样做会绕过证书验证过程,可能会存在安全风险,因此建议仅在测试或特殊情况下使用。
可以使用的命令:
curl https://192.168.3.103 -k
这个命令将直接访问 https://192.168.3.103
,而不会验证服务器证书的有效性。
请注意,使用 -k
选项会将连接置于不安全的状态,因为它不验证服务器证书的真实性,可能容易受到中间人攻击。因此,在生产环境中应避免使用此选项,以确保通信的安全性。
cur https://192.168.3.103 --cacert /cert/server.crt
curl: (51) Unable to communicate securely with peer: requested domain name does not match the server's certificate.
证书绑定的域名和当前请求域名不匹配
cur1 https://artisan.com --cacert /cert/server.crt artisan.com:443:192.168.3.103
可以使用 curl 命令的 --resolve 参数来指定域名解析,将请求的域名解析为服务器的 IP 地址。这样,即使请求的域名与服务器证书绑定的域名不匹配,也能够建立连接。
这种方法只适用于测试或特殊情况,因为它绕过了域名验证的重要步骤,存在一定的安全风险。
让客户端解析 artisan.com
为 ip 192.168.3.103
echo "192.168.3.103 artisan.com' >> /etc/hosts
将服务器的域名解析为服务器的 IP 地址,以确保请求的域名与服务器证书绑定的域名匹配。通过编辑客户端的 hosts 文件来实现,将域名解析为正确的 IP 地址。
这种方法更安全,因为它保留了域名验证的重要性,并且不会绕过任何安全检查。
cat /cert/server.crt >> /etc/pki/tls/certs/ca-bundle.crt
curl https://artisan.com
会报错,curl: (7) Failed connect to artisan.com:443; Connection refused
可以采用如下命令
curl https://artisan.com --resolve artisan.com:443:192.168.3.103
在这个命令序列中, 将服务器证书 server.crt
的内容附加到根证书存储库 /etc/pki/tls/certs/ca-bundle.crt
中,然后使用 curl
命令来访问 https://artisan.com
网站。
首先尝试将服务器证书 server.crt
的内容追加到系统的根证书存储库中,然后使用 curl
命令来访问 https://artisan.com
。然而,遇到了连接被拒绝的错误。
使用 --resolve
参数来模拟 DNS 解析,将 artisan.com
解析为 IP 地址 192.168.3.103
。这样做可以绕过 DNS 解析,并直接将域名与 IP 地址对应,从而解决了连接被拒绝的问题。
curl https://artisan.com --resolve artisan.com:443:192.168.3.103
这个命令中的 --resolve artisan.com:443:192.168.3.103
参数指示 curl
使用指定的 IP 地址来访问 artisan.com
,而不是通过 DNS 解析。
这种方法适用于在本地测试环境中模拟特定域名与 IP 地址的关联,但在生产环境中应避免使用,因为它绕过了域名解析的安全检查。
PKI - 借助Nginx 实现Https_使用CA签发证书
PKI - 借助Nginx实现_客户端使用自签证书供服务端验证
PKI - 借助Nginx实现_客户端使用CA根证书签发客户端证书