自颁发CA证书、自签名-nginx配置https

知识准备

CA证书、自颁发证书、自签名证书

原文链接: CA证书、自颁发证书、自签名证书联系 - KylinZhuang - 博客园

理论基础

ssl : secure socket layer(安全套接层协议)的缩写,通过此协议可以保证两个应用通信的可靠性和保密性。
openssl : 是ssl协议的实现。提供了对称加密算法、非对称加密算法以及秘钥证书管理等功能。
**公钥私钥:**公钥和私钥组成一个密钥对,必须配对使用。一般公钥公开,私钥自己保留。

  • 公钥加密,私钥解密,一般用于传输数据;
  • 私钥加密,公钥解密,一般用于数字签名、验证身份。

**证书 :**全称是公钥证书,由第三方机构CA颁发。CA利用自己的私钥对真正的公钥施加数字签名并生成证书,客户拿到证书后,通过CA的公钥来对证书解密,拿到真正的公钥。证书有两种编码格式:

  • pem :文本格式,以"-----BEGIN…“开头,以”-----end…"结尾,内容是base64编码,Apache和*nginx服务器一般使用这种编码;
  • der :二进制格式,不可读,windows服务器一般偏向使用这种。

什么是CA证书、自颁发证书和自签名证书?

CA证书: CA证书是由证书授权机构(Certificate Authority,简称CA)颁发的数字证书。它包含了证书拥有者的身份信息、公钥、私钥以及CA机构的签名,用于在互联网通讯中验证通信实体的身份和公钥的合法性。CA证书是数字签名的技术基础保障,能够证明某一实体的身份及其公钥的合法性。

自颁发证书: 自颁发证书通常是指设备根据CA证书给自己颁发的证书,证书中颁发者名称是CA服务器的名称。这种证书主要用于设备本地,实现简单的证书颁发功能,但设备不支持对其生成的自签名证书进行生命周期管理,如证书更新、证书撤销等。

自签名证书: 自签名证书是由用户自己生成和签名的证书,而不是由公认的证书颁发机构签名。自签名证书分为两种:一种是不带CA的,即用户自己生成证书并签名;另一种是带CA的,即用户自己创建了一个CA并使用该CA签名证书。自签名证书虽然 免费 且未经过权威机构签名,通常 不受浏览器和客户端信任,但其生成过程相对简单,适用于测试环境或内部网络

应用场景和优缺点:

CA证书: 适用于需要高安全性和信任度的场景,如电子商务网站、在线支付等。

  • 优点是受到所有主要浏览器的信任。
  • 缺点是需要向CA机构支付费用。

自颁发证书: 主要用于设备本地。

  • 优点是实现简单证书颁发功能。
  • 缺点是不支持复杂的生命周期管理。

自签名证书: 适用于测试环境、内部网络或个人开发者。

  • 优点是免费且生成过程简单。
  • 缺点是不受主流浏览器信任,需要手动安装才能使用。

CA证书和自签名证书的异同?

如果想要构建一个成功的网站,安全是关键因素之一,对于需要从访问者那里收集PIA(personally identifiable information,个人识别信息)的网站而言,尤其如此。
考虑一个需要输入社会保险号的网站,或更常见的,需要向其添加信用卡信息以完成购买行为的电子商务网站,在这样的网站上,安全不仅仅是来自那些访问者的期望,更是成功的关键。
如果你正在构建一个电子商务网站,首先就需要一个安全证书以便保证服务器的数据安全,对于证书的选择,即可以创建自签名证书,也可以从证书颁发机构(CA)获得由其签名的证书,让我们看看这两种证书的异同。

CA签名的证书和自签名证书的相似性

无论你的证书是由CA签名的,还是自己签名的,有一件事是完全相同的:你会得到一个安全的网站。通过HTTPS/SSL连接发送的数据将被加密,第三方无法窃听。
既然自签名证书也能做到这一点,那为何要向CA付款呢?
CA告诉你的客户:此服务器信息已由”信任源点“验证,最常用的CA是Verisign。CA会验证你的域名的所有权并颁发证书,这就能保证网站是安全而且合法的。
使用自签名证书的问题是,几乎每一个Web浏览器都会检查HTTPS连接是否由可信的CA签名,如果该连接是自签名的,则会将其标记为潜在风险并弹出错误消息,你的客户对该站点信任度就会降低。
**简要总结:**CA签名的证书兼具“身份证明”和“加密”双重功能,而由于自证身份不可信,自签名证书就只有加密功能,用于无需身份证明的场合。

在何种情况下可以使用自签名证书?

由于它们提供了相同的保护能力,所以能在任何使用CA签名证书的场合中使用自签名证书,但在某些场合特别适用自签名证书。例如,自签名证书非常适合测试HTTPS服务器,你不必仅仅为测试网站就要支付CA签名证书的费用,只需提醒测试人员他们的浏览器可能弹出警告信息。
也可以在需要输入隐私信息的情况下使用自签名证书,例如:

  • 用户名和密码表单
  • 收集个人(非财务)信息

当然,只有那些了解并信任你的人才会使用这样的网站。所以你看到了,归根结底就是“信任”二字。当你使用自签名证书时,你是在对客户说:“请相信我——我就是我说的我”;当你使用由CA签名的证书时,你是在说:“请相信我——因为Verisign可以证明我的身份”。
如果你在做电子商务,就需要一个CA签名证书。如果你使用自签名证书只是为了客户登录你的网站,那么他们可能会原谅你,但如果要求他们输入信用卡或Paypal的信息,那么你真的需要一个CA签名的证书,因为大多数人信任CA签名的证书,如果没有它,就不会通过HTTPS服务器做生意。所以如果你想在你的网站上卖东西,那就投资于证书吧,这只是做生意的成本。

关于PEM, DER, CRT, CER,KEY等各类证书与密钥文件后缀的解释

原文链接:一文搞懂:PEM, DER, CRT, CER, KEY等各类证书与密钥文件后缀解析

在计算机科学和安全领域,PEM, DER, CRT, CER, KEY等文件后缀经常出现在证书和密钥文件的命名中。这些后缀代表了不同的文件格式和编码方式,对于理解它们的含义和应用至关重要。本文将逐一解析这些后缀,帮助读者更好地理解和使用。

PEM(Privacy-Enhanced Mail)

PEM是一种基于ASCII编码的证书和密钥存储格式,广泛应用于安全领域,特别是在SSL/TLS协议中。PEM文件通常以“.pem”为后缀名,可以包含公钥、私钥、证书等敏感信息。PEM文件使用Base64编码,并且包含了起始标记和结束标记,以便于识别和区分不同类型的密钥和证书。由于PEM格式具有良好的可读性和可编辑性,它成为了一种广泛使用的证书和密钥文件格式。

DER(Distinguished Encoding Rules)

DER是一种二进制编码格式,用于表示X.509证书、CRL(证书吊销列表)和PKCS#7等数据结构。DER文件通常以“.der”或“.cer”为后缀名。与PEM格式相比,DER格式更加紧凑和高效,因为它使用二进制编码而不是Base64编码。然而,DER格式的文件不易于阅读和编辑,通常需要专业的工具才能查看和解析。

CRT(Certificate)和 CER(Certificate)

CRT和CER都是证书文件的扩展名,它们通常用于存储X.509证书。在Windows平台上,CRT文件通常用于存储公钥证书,而CER文件则用于存储包含公钥和私钥的证书。然而,在实际应用中,CRT和CER文件的区别并不严格,它们通常可以互换使用。CRT文件通常使用PEM或DER格式进行编码,而CER文件则通常使用DER格式进行编码。

KEY(Key)

KEY文件通常用于存储私钥或公钥。与证书文件不同,KEY文件只包含密钥信息,不包含证书信息。KEY文件可以使用PEM或DER格式进行编码。使用PEM格式编码的KEY文件具有良好的可读性和可编辑性,而使用DER格式编码的KEY文件则更加紧凑和高效。

总结

PEM、DER、CRT、CER和KEY等文件后缀代表了不同的证书和密钥文件格式和编码方式。在实际应用中,我们需要根据具体的需求和场景选择合适的文件格式和编码方式。例如,在需要可读性和可编辑性的情况下,我们可以选择使用PEM格式;在需要紧凑和高效的情况下,我们可以选择使用DER格式。同时,我们还需要注意不同文件格式之间的转换和兼容性,以确保证书和密钥的正确性和安全性。

CA与HTTPS理论_网络安全ca

网络安全服务基础Windows–第15节-CA与HTTPS理论_网络安全ca-优快云博客 文章介绍的更加详细,如共享的秘密密钥等。

自颁发证书、自签名证书

应用场景和网站环境

**应用场景:**内网测试。

网站环境:

准备域名,自定义要使用的域名为 t17.cn,网站分别是 wtd.t17.cnqrg.t17.cn, 确保通过域名 80端口 能够正常(包括局域网)访问(关于nginx配置80口可上网查找其他资料或参考安装Tiny Core Linux 和 部署nginx_linux tiny安装-优快云博客 文章中的 配置基于域名的虚拟主机)。

wtd.t17.cn 如下图所示

在这里插入图片描述

qrg.t17.cn 如下图所示

在这里插入图片描述

工具

本文使用的工具是XCA。

XCA(X Certificate and key management) 是作为证书和密钥存储,以及作为签发证书的签名应用程序,是一个开源 (项目地址)的工具,底层还是基于openssl的类库和API的。进入 下载 页面,选择免安装版即可,目前的版本是2.8.0,点击 xca-portable-2.8.0.zip 下载。

在这里插入图片描述

下完成后,自行找个地方解压,运行 xca.exe

自颁发证书

参考文章 使用XCA自制CA证书并签发https证书 - Giant150 - 博客园

创建CA证书

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

设置密码,后点击确定

在这里插入图片描述

提示不安全的PKCS#12算法,自然选择更改

在这里插入图片描述

点击 PKCS#12加密算法 的下拉框修改加密算法

在这里插入图片描述

只有 AES-256-CBC 一项是安全的,选择完成后点击 确定

在这里插入图片描述

右下角显示打开的数据库路径

在这里插入图片描述

切换到 私钥 页面,点击 创建密钥 (也可以直接点击 创建证书 跳过创建密钥这一步,在创建证书的过程中在生成密钥,都是一样的)

在这里插入图片描述

为密钥起名,不要轻易修改密钥类型(有可能有的浏览器会有问题)(待修订?)

在这里插入图片描述

切换到 证书 页面,点击 创建证书

在这里插入图片描述

来源页, 签名算法选择 SHA512 ,不要选择 SHA3 系列,选择SHA3-512,浏览器返回消息是错乱的数据(还没搞明白的地方)。

在这里插入图片描述

主题页,填写基本信息

在这里插入图片描述

扩展页,设置证书类型和有效期

可以参考 自建CA实战之 《0x00 环境的准备》_xca 密钥用法-优快云博客 文章中的各种类型的密钥用法的含义

在这里插入图片描述

密钥用法页,设置证书的用途,点击 确定 执行创建证书

在这里插入图片描述

证书页中显示创建的证书

导出证书

把这个 CA 证书导出,然后再导入到局域网内的其他电脑,以后这个 CA 证书 签发的所有证书就都会自动信任

在这里插入图片描述

在这里插入图片描述

导入证书

导出 CA 证书 (T17-CA.crt)拷贝到局域网内其他电脑上,打开命令行工具 输入

mmc

在这里插入图片描述

按下键盘上 回车

在这里插入图片描述

点击 文件 - 添加/删除管理单元(M)

在这里插入图片描述

选择 证书 点击 添加

在这里插入图片描述

选择 计算机账户 ,点击 下一页

在这里插入图片描述

点击 完成

在这里插入图片描述

点击 确定

在这里插入图片描述

展开 证书(本地计算机) - 受信任的根证书颁发机构 - 证书,在 证书 上右键选择 所有任务 - 导入

在这里插入图片描述

点击 下一步

在这里插入图片描述

选择 CA证书 T17-CA.crt 文件, 点击 下一步

在这里插入图片描述

保持默认(在导出时就只导出CA根证书),点击 下一步

在这里插入图片描述

点击 完成

在这里插入图片描述

可以看到 T17 CA 颁发给 T17 CA ,这就完成了 自颁发证书 操作。 关闭 控制台1。

自签名证书

网站签名

有了 CA 证书,就可以为网站进行签名

在这里插入图片描述

选择 T17-CA CA证书,点击 创建证书

在这里插入图片描述

按图上1到4操作后,需要注意的是 使用模板选择的是 TLS_Server,切换到 主题 界面

在这里插入图片描述

填入 基础信息 (这和自颁发证书中描述是一样的), 这里以 T17 的WEB服务为例填写,然后点击 生成新密钥 (因为没有密钥分配所以私钥中显示空,密钥是必要的)

在这里插入图片描述

弹出的新密钥框中输入内部名称,最好加上关键字 KEY,需要注意的是密钥类型使用默认(切换成其他可能存在浏览器不兼容等情况,待后续切换其他试用验证),在xca数据库导出时容易区分KEY和证书,点击 创建

在这里插入图片描述

创建完成,可以看到选择了新创建的密钥,切换到 扩展

在这里插入图片描述

类型 选择 终端实体(End Entity),按图上进行设置。第4步 X509v3 Subject Alternative Name 编辑是主要操作,这里就是设置要签名的网站,点击编辑后弹出下面的界面

在这里插入图片描述

选择IP表示为IP进行签名,选择DNS表示为域名签名。本文中描述要为两个网站签名,采用为二级域名的所有子域名通配签名方式

在这里插入图片描述

双击内容列,输入 *.t17.cn ,其中 * 是通配符,点验证测试是否通过,点击 应用 确定

在这里插入图片描述

切换到 密钥用法 页面

在这里插入图片描述

按图上配置后点击 确定

在这里插入图片描述

导出签名证书和密钥

导出签名证书

在这里插入图片描述

选择 网站签名证书 ,点击 右侧的 导出 按钮

在这里插入图片描述

选择 PEM证书链(.pem) ,点击 确定

导出密钥

切换到 私钥 页面点击 导出

在这里插入图片描述

配置网站(nginx) SSL

签名证书文件和私钥文件部署

在这里插入图片描述

经过 导出签名证书和密钥 操作,得到 T17-WEB.pem 签名证书文件和 T17-WEB-KEY.pem 网站私钥文件,把这两个文件拷贝到 nginx 配置目录ssl文件(没有可以自己建,路径随便,只要配置中能找到就可以),并把 T17-WEB-KEY.pem 重新命名为 T17-WEB.key (这不是必须,只是看的整齐些)

在这里插入图片描述

修改nginx的配置文件

打开 nginx 的配置文件,将两个网站的 80端口的配置拷贝并都复制一份,其中以 wtd.t17.cn 为例

wtd.t17.cn 80口配置

	server {
      listen       80;
      server_name  wtd.t17.cn;
	
      location / {
        proxy_pass http://192.168.1.92:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
       }
    }

wtd.t17.cn 443口配置

	server {
      listen       443 ssl;                  # 修改端口号
      server_name  wtd.t17.cn;
	  
	  ssl_certificate ssl/T17-WEB.pem;       # ssl 签名证书
	  ssl_certificate_key ssl/T17-WEB.key;   # ssl 签名密钥
	    
      location / {
        proxy_pass http://192.168.1.92:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
       }
    }

通过命令行方式进入到nginx的目录,启动 nginx,这样可以直接看到是否有错误,如下

在这里插入图片描述

报告了一条绑定 443 端口失败了,根据自己的情况查找分析并解决问题,本文中是因为svn的服务占用了443,将其停止掉后再次运行,看到没错误。

在这里插入图片描述

停止 nginx 再开一个命令窗口 输入

nginx -s "stop"

在这里插入图片描述

在浏览器中输入

https://wtd.t17.cn

在这里插入图片描述

https://qrd.t17.cn

在这里插入图片描述

Edge浏览器地址栏中 已经没有 不安全 字样了,显示的是 https

http重定https

将80口的内容修改如下

	server {
      listen       80;
      server_name  wtd.t17.cn;
	
      return 301 https://$host$request_uri;
    }

	server {
      listen       80;
      server_name  qrg.t17.cn;
	
	  return 301 https://$host$request_uri;
    }

Nginx SSL 性能优化

性能优化不是本文的重点。引用参考文章

Nginx SSL 性能优化_nginx server ssl证书缓存优化-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值