nginx双向认证

1、单项认证

1.1 什么是单项认证

  • 单向认证,只有一方需要验证对方的身份。通常是客户端验证服务器的身份。这种情况下,客户端会检查服务器提供的数字证书是否有效,以确定服务器是否合法。服务器不会验证客户端的身份。这种情况下,客户端可以确认它正在与合法的服务器进行通信,但服务器不能确定其与合法客户端通信。单向认证通常用于一些对服务器身份验证要求较高,但对客户端身份验证要求相对较低的场景,如网站访问。
  • image.png
  1. 客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息。
  2. 服务端给客户端返回SSL协议版本号、加密算法种类、随机数等信息,同时也返回服务器端的证书,即公钥证书
  3. 客户端使用服务端返回的信息验证服务器的合法性,包括:
  4. 证书是否过期
  5. 发型服务器证书的CA是否可靠
  6. 返回的公钥是否能正确解开返回证书中的数字签名
  7. 服务器证书上的域名是否和服务器的实际域名相匹配
  8. 验证通过后,将继续进行通信,否则,终止通信
  9. 客户端向服务端发送自己所能支持的对称加密方案,供服务器端进行选择
  10. 服务器端在客户端提供的加密方案中选择加密程度最高的加密方式。
  11. 服务器将选择好的加密方案通过明文方式返回给客户端
  12. 客户端接收到服务端返回的加密方式后,使用该加密方式生成产生随机码,用作通信过程中对称加密的密钥,使用服务端返回的公钥进行加密,将加密后的随机码发送至服务器
  13. 服务器收到客户端返回的加密信息后,使用自己的私钥进行解密,获取对称加密密钥。
  14. 在接下来的会话中,服务器和客户端将会使用该密码进行对称加密,保证通信过程中信息的安全

1.2 配置单项认证

1.2.1 生成CA证书

1、生成CA证书私钥

生成 CA 证书是为了创建一个自签名的根证书,用于签署其他证书。CA(Certificate Authority)是一个被信任的实体,负责验证和签发数字证书,用于加密通信和身份认证

生成CA根证书私钥:为保证安全,生成一个4096位的私钥,并使用aes方式加密,密码为12345678
openssl genrsa -aes256 -out kubesre-ca.key 4096

image.png

2、生成CA根证书
通过CA根私钥签发CA根证书,密码是上面设置的,
openssl req -new -x509 -days 3650 -sha256 -extensions v3_ca -key kubesre-ca.key -out kubesre-ca.cer -subj "/C=CN/ST=shanghai/L=shanghai/O=kubesre/OU=kubesre/CN=8.134.172.125"

1.2.2 生成服务端证书

1、生成服务端密钥
  • 生成服务端证书私钥是为了创建一个安全的 SSL/TLS 连接。SSL/TLS 协议使用公钥/私钥加密技术来保护通信的机密性,其中私钥用于对传输的数据进行加密和签名,而公钥用于解密和验证签名。
  • 在 SSL/TLS 连接中,服务端需要有一个私钥来对传输的数据进行加密和签名。私钥只有服务器拥有,不会被公开或共享。客户端通过公钥验证服务器的身份,并使用公钥加密传输的数据。服务端使用自己的私钥解密数据,并使用私钥对数据进行签名。客户端可以使用服务器的公钥验证签名,确保数据的完整性和真实性。
  • 因此,在创建 SSL/TLS 连接前,服务端需要生成一个私钥,并将该私钥与证书一起使用。证书包含了服务端的公钥,以及一些附加信息,例如证书的颁发者、有效期等。客户端可以使用证书验证服务器的身份,并公开加密通信中的对称密钥。
  • 综上所述,生成服务端证书私钥是 SSL/TLS 安全通信的基础,是服务端对传输数据进行加密和签名的重要手段。
生成服务端证书私钥
openssl genrsa -out kubesre-server.key 2048
2、生成签发请求csr

生成签发请求csr,证书请求文件,这个并不是证书,而是向证书颁发机构获得签名证书的申请文件

生成签发请求csr,证书请求文件,这个并不是证书,而是向证书颁发机构获得签名证书的申请文件
openssl req -new -key kubesre-server.key -out kubesre-server.csr -subj "/C=CN/ST=shanghai/L=shanghai/O=kubesre/OU=kubesre/CN=8.134.172.125"
3、生成服务端证书
  • 生成服务端证书通常是为了在网站上启用 HTTPS 加密连接。服务端证书也称为 SSL 证书或者 TLS 证书,用于对网站进行加密通信和验证身份。
  • 当你在网站上使用服务端证书时,访问者的浏览器会与你的网站建立加密连接,确保通过网络传输的数据是安全的,并且确保访问者正在连接到你的真实网站而不是恶意仿冒的网站。这种加密连接可以提高网站的安全性,防止信息被窃取、篡改或伪造。
  • 通常情况下,你需要向一个受信任的证书颁发机构(CA)申请服务端证书,以获得公开可信的证书。如果你只是在内部网络或者测试环境中使用,也可以自行生成自签名的服务端证书,但在正式环境中使用时,建议还是选择由公共CA颁发的证书,以便访问者的浏览器能够正确地验证你的网站身份。
这个文件影响到ca颁发的证书的序号,而证书序号应该是唯一的,所以这点需要控制好。
echo "01" >  kubesre-ca.srl

用CA证书签发服务端证书
openssl x509 -req  -days 3650 -sha256 -CA kubesre-ca.cer -CAkey kubesre-ca.key -in kubesre-server.csr -out kubesre-server.cer

openssl x509 -req -days 3650 -sha256 -CA kubesre-ca.cer -CAkey kubesre-ca.key -in kubesre-server.csr -out kubesre-server.cer
这个命令用于使用自签名的证书颁发机构(CA)对 SSL/TLS 服务器证书签名请求(CSR)进行签名,生成服务器数字证书。

具体来说,这个命令做了以下几件事情:

  1. 使用 -req 参数指定要对 CSR 进行签名。
  2. 使用 -days 参数指定证书的有效期,这里是 3650 天(10 年)。
  3. 使用 -sha256 参数指定使用 SHA256 算法对证书进行摘要计算。
  4. 使用 -CA-CAkey 参数指定自签名的 CA 证书和私钥文件。
  5. 使用 -in 参数指定要签名的 CSR 文件,这里是 kubesre-server.csr
  6. 使用 -out 参数指定生成的服务器数字证书文件,这里是 kubesre-server.crt

命令执行后,会显示一些信息,包括签名成功的证书摘要和证书主题信息。其中,subject 字段表示证书的主题信息,包括国家代码(C)、省/州(ST)、城市(L)、组织名(O)、组织单位(OU)和通用名称(CN)等。在你提供的示例中,证书的通用名称(CN)是 8.134.172.125,表示证书将用于保护 IP 地址为 8.134.172.125 的服务器。

将签名后的服务器数字证书安装在服务器上后,就可以使用 SSL/TLS 加密连接了。需要注意的是,由于证书是自签名的,因此在客户端连接服务器时,可能会出现证书不被信任的警告提示。如果需要避免这种警告,可以考虑使用公共可信的第三方 CA 颁发机构颁发的证书。
image.png
image.png

image.png

4、检查证书

image.png
openssl x509 -in kubesre-server.cer -text -noout
image.png

1.3 配置nginx使用https

vim /etc/nginx/nginx.conf
  server{
  ....
    ssl_certificate "/root/test/kubesre-server.cer";
    ssl_certificate_key "/root/test/kubesre-server.key";
  ....
    }

2、双向认证

2.1 什么是双向认证

双向认证要求通信双方都需要验证对方的身份。即客户端验证服务器的身份,同时服务器也验证客户端的身份。这种情况下,双方都会使用数字证书来证明自己的身份。客户端在连接到服务器时会发送自己的数字证书,服务器会验证该证书的合法性。同时,服务器也会发送数字证书给客户端,客户端会验证服务器的证书。只有在双方都通过了身份验证,通信才会继续进行。双向认证通常用于对通信双方身份验证要求较高的场景,如安全敏感的数据交换、金融交易等。

2.2 生成客户端证书

2.2.1 生成客户端证书私钥

openssl genrsa -out kubesre-client.key 2048

2.2.2 生成签发请求csr

openssl req -new -key kubesre-client.key -out kubesre-client.csr -subj "/C=CN/ST=shanghai/L=shanghai/O=kubesre/OU=kubesre/CN=8.134.172.125"

2.2.3 用CA证书签发客户端证书

d kubesre-client.cer

2.3 生成windows客户端证书

openssl pkcs12 -export -clcerts -in kubesre-client.cer -inkey kubesre-client.key  -out client.p12 

image.png
把证书上传到windwos
image.png
image.png
image.png
image.png
输入创建的时候设置的密码

导入完重启浏览器访问
image.png

posted @ 2024-07-29 09:27  &UnstopPable  阅读(280)  评论(0编辑  收藏  举报