无锡阳山镇网站建设,美术生十大最烂专业,建造师查询入口,建设单位企业锁登陆网站目录 一、简介二、SSL 证书类型介绍三、公网 SSL 证书3.1 证书管理工具3.2 下载安装 acme.sh3.3 申请并下载证书报错1#xff1a;没有指定账号报错2#xff1a;DNS无法解析的域名报错3#xff1a;无效的响应 404 3.4 配置 Nginx3.5 证书过期刷新 四、补充4.1 同一域名的不同… 目录 一、简介二、SSL 证书类型介绍三、公网 SSL 证书3.1 证书管理工具3.2 下载安装 acme.sh3.3 申请并下载证书报错1没有指定账号报错2DNS无法解析的域名报错3无效的响应 404 3.4 配置 Nginx3.5 证书过期刷新 四、补充4.1 同一域名的不同端口可以共用一个SSL证书吗4.2 Nginx 转发 403 问题 一、简介
HTTPS 是通过 SSL 证书 加密传输 的 HTTP 协议。可以通过 Nginx、Apache 等中间件进行接收和转发这里我们主要介绍 Nginx 中间件的配置方式。
通过 Nginx 配置 HTTPS 协议分为两步
服务器需要先下载好 SSL 证书在 Nginx 配置好 SSL 证书的相关信息即可。
在了解清楚这些内容之后我们就可以开始实战操作了。 二、SSL 证书类型介绍
HTTPS 协议的 SSL 证书根据 验证级别 可以分为三种
DVDomain Validation 证书这种证书仅需验证申请者的域名所有权无需对网站的实际运行者或组织进行身份验证。它是 最基本 的整数类型适用于个人、小型企业。OVOrganization Validation 证书这种证书在 DV 证书的基础上 增加了对申请者组织身份的验证。它 需要验证申请者的公司存在并且有效地拥有该域名适用于中型企业。EVExtended Validation 证书这种证书提供 最高级别 的验证包括 对申请者的身份、组织和域名的全面审核。EV证书通常用于需要高安全性和信任度的网站如银行和金融机构适用于高要求企业。
除此之外SSL 证书还可以分为 公网、内网 两种
公网证书 要求必须公网可访问并且需要通过例如在服务器创建一个指定文件在公网的对应路径下要能正常访问。内网证书 不需要进行验证可以直接使用。
本片文章我们主要介绍公网环境的 SSL 证书。 补充 HTTPS 的 SSL 证书 不仅仅只支持域名还可以支持 IP 形式的 HTTPS 协议哟。 三、公网 SSL 证书
3.1 证书管理工具
上面介绍了证书的各种类型本文我们主要展示如何下载并配置免费的 Let’s Encrypt 网站颁发的 DV证书网站地址如下证书有效期仅有三个月
Let’s Encrypt https://letsencrypt.org/zh-cn/
这里我们只是展示一下官网的地址实际的证书下载操作并不能直接去官网操作。我们可以选择多种 客户端工具 来与 Let’s Encrypt 进行交互常见的有以下三种 acme-tiny是一个由 Python 编写的证书申请脚本。 开源地址https://gitcode.com/diafygi/acme-tiny/overview acme.sh是一个由 Shell 编写的证书申请脚本。 开源地址https://github.com/acmesh-official/acme.sh Certbot是一款比较齐全的证书管理工具。 官方地址https://certbot.eff.org/
这里我们主要使用 acme.sh 来进行证书管理因为它比较轻量级而且操作简单。 补充 可能有小伙伴发现了为什么前两个工具都命名为 acme什么是 acme ACME协议 是由 Let’s Encrypt 组织开发的一种 通信协议主要 用于服务器和证书颁发机构(CA)之间的交互。它的主要目标是 简化SSL/TLS证书的申请、验证和管理流程。通过ACME协议开发者可以构建自动化的证书管理工具使得普通用户也能轻松获取并更新安全的数字证书。 3.2 下载安装 acme.sh
先来到家目录下
cd ~执行如下命令下载并安装 acme.sh
curl https://get.acme.sh | sh -s emailmyexample.com如果出现网络问题
0curl: (6) Could not resolve host: raw.githubusercontent.com0curl: (7) Failed connect to raw.githubusercontent.com:443; 拒绝连接
可以执行如下命令
git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m mytest.com注意 这里不要再用官方的 myexample.com 了这个邮箱已经被禁用了后面会报错的 执行结果如下说明安装成功了
如果是通过 git clone 的方式安装的此时可以删除克隆下来的文件了。
cd ~
rm -rf acme.sh安装之后会在 ~ 家目录创建一个 .acme.sh 文件夹如下所示 .acme.sh 文件夹中的内容如下 3.3 申请并下载证书
执行如下命令通过提交 域名、webroot 来申请并下载证书
sh /root/.acme.sh/acme.sh --issue -d 23jw3585ev35.vicp.fun --webroot /data/webroot --server letsencrypt23jw3585ev35.vicp.fun由于没有域名这是我通过 花生壳 工具用 内网穿透 做的临时域名仅用于测试实际环境中可以使用自己的域名。--server letsencrypt告诉 acme.sh 客户端将所有的证书请求都发送到 Let’s Encrypt 的服务器进行处理。如果需要配置多个域名共用一个证书可以添加多个 -d 域名 的配置。
这里可能会出现各种报错在了解这些报错之前我们需要先了解一下 DV 证书申请包含了哪些过程因为 我们的报错点都是可以在这些过程中找到出处 的
过程1验证当前账号信息 判断当前账号是否存在不存在则自动注册。过程2验证域名是否可以被DNS正常解析 如果无法正常解析则报错。过程3验证域名下新生成的文件是否可以正常访问 acme.sh 会在 webroot 路径下随机生成一个文件然后尝试通过域名访问并核验文件内容从而确认域名是否为当前服务器所有。
以上三点 全部验证通过 之后才可以正常颁发并下载证书。
成功申请并下载证书的结果如下 下面列举一下小编在申请证书过程中遇到的几种报错场景
报错1没有指定账号
对应过程1验证当前账号信息。如果之前注册的时候没有指定邮箱这里执行之后会报错如下 Please update your account with an email address first. 请先用邮箱注册一个账号。 我们根据提示执行如下命令注册一个邮箱地址上去即可
acme.sh --register-account -m mytest.com执行结果如下 再次执行上面的命令即可。
报错2DNS无法解析的域名
对应过程2验证域名是否可以被DNS正常解析。如果当前申请证书的域名不存在、没有注册就会报错 www.domain123.cn:Verify error:DNS problem: NXDOMAIN looking up A for www.domain123.cn - check that a DNS record exists for this domain; DNS problem: NXDOMAIN looking up AAAA for www.domain123.cn - check that a DNS record exists for this domain www.domain123.cn域名解析失败域名的 A记录用于将域名指向IPv4和 AAAA记录用于将域名指向IPv6没有找到。 报错3无效的响应 404
对应过程3验证域名下新生成的文件是否可以正常访问。如果当前的域名存在但是脚本新创建的测试文件无法被正常映射出去的话就会报错 www.myweb.cn:Verify error:170.33.13.246: Invalid response from http://www.myweb.cn/.well-known/acme-challenge/tgvilsyFFlCql3VnyC51rHmGoirf6l9mMPMHiTgmfVI: 404 www.myweb.cn 验证失败文件路径不存在404。 日志中的 Pending, The CA is processing your order, please just wait. (2/30) 就是为了防止网络延迟导致没有访问新生成的文件而 重试。 3.4 配置 Nginx
HTTPS 协议默认使用 443 端口nginx.conf 中相关的配置内容如下
http {server {listen 443 ssl; # https默认为443端口当然也可以用任何端口。后面ssl用于告诉Nginx在指定的端口上启用SSL/TLS加密server_name example.com; # 你网站的域名查看说明1# 下面输入证书和私钥的地址ssl_certificate certs/my_cert.crt; # 证书查看说明2ssl_certificate_key certs/my_cert.key; # 证书对应的私钥文件查看说明3ssl_session_cache shared:SSL:1m; # 可选配置设置了 SSL 会话缓存的类型和大小。具体查看说明5ssl_session_timeout 5m; # 可选配置设置了 SSL 会话缓存的超时时间为 5 分钟。ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; # 可选配置 指定了 SSL/TLS 握手过程中允许使用的加密算法的优先级顺序。具体查看说明7ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; # 可选配置指定了允许使用的 SSL/TLS 协议版本。具体查看说明8ssl_prefer_server_ciphers on; # 可选配置具体查看说明9# 指定 webroot 路径location / {root /data/webroot/;access_log /data/httplogs/root/access.log main;error_log /data/weblogs/root/error.log;}}
}配置说明
server_name域名配置需要和申请SSL证书的域名保持一致。ssl_certificate证书文件包含服务器的公钥、服务器信息、证书办法机构CA的数字签名。可以是 .pem 格式也可以是 .cer 或 .crt 格式的文件。.cer和.crt格式除了名称没有区别ssl_certificate_key私钥文件包含证书文件中公钥相对应的私钥用于对数据进行解密和签名操作必须严格保密。可以是 .pem 格式也可以是 .key 格式的文件。.pem 格式和 .crt/.cer 格式有什么区别 SSL 证书的 PEM 和 CRT/CER 格式都是用于存放证书文件的公钥有一些区别但是 大多数情况下可以互换使用。 ssl_session_cache设置了 SSL 会话缓存的类型和大小。启用 SSL 会话缓存可以提高性能因为它允许客户端在后续连接中重用之前协商的会话参数避免了重复进行完整的 SSL/TLS 握手过程。 shared表示在所有工作进程之间共享缓存。SSL是缓存的名称。1m表示缓存的最大限制为1M。 ssl_session_timeout设置 SSL 会话缓存的超时时间5m 表示5分钟后过期。ssl_ciphers设置 SSL/TLS 握手过程中允许使用的加密算法的优先级顺序优先级从高到低排列。 建议禁用一些不安全的算法如 NULL、aNULL、MD5、ADH、RC4等。 ssl_protocols设置允许使用的 SSL/TLS 协议版本。 建议只启用安全的版本协议如 TLSv1.1、TLSv1.2、TLSv1.3。禁用不安全的版本协议如SSL v2、SSL v3。 ssl_prefer_server_ciphers设置 SSL/TLS 握手过程中优先使用服务器端指定的加密算法而不是客户端提供的加密算法。这样可以确保使用更安全的加密算法。
3.5 证书过期刷新
我们只需要重新执行申请证书的命令就可以查看证书的过期时间
sh /root/.acme.sh/acme.sh --issue -d 23jw3585ev35.vicp.fun --webroot /data/webroot --server letsencrypt23jw3585ev35.vicp.fun由于没有域名这是我通过 花生壳 工具用 内网穿透 做的临时域名仅用于测试实际环境中可以使用自己的域名。--server letsencrypt告诉 acme.sh 客户端将所有的证书请求都发送到 Let’s Encrypt 的服务器进行处理。
再次执行即可看到证书过期时间 可以通过增加 --force 强制刷新刷新证书
sh /root/.acme.sh/acme.sh --issue -d 23jw3585ev35.vicp.fun --webroot /data/webroot --server letsencrypt执行结果如下所示 四、补充
4.1 同一域名的不同端口可以共用一个SSL证书吗
可以的。 SSL 证书是基于域名颁发的而不是基于端口号。具体配置方式如下所示
server {listen 443 ssl;server_name example.com;ssl_certificate /path/to/certificate.crt;ssl_certificate_key /path/to/private.key;...
}server {listen 8443 ssl;server_name example.com;ssl_certificate /path/to/certificate.crt;ssl_certificate_key /path/to/private.key;...
}4.2 Nginx 转发 403 问题
403 Forbidden 如果没有自己特殊指定的话指的是 访问的资源没有权限nginx中指定的 location 转发后的地址要确保 当前执行 Nginx 命令的 用户有权限访问webroot文件夹才行。
整理完毕完结撒花~ 参考地址
1.nginx配置ssl支持https的详细步骤https://blog.csdn.net/weixin_45501219/article/details/136825372
2.免费的SSL证书(Let‘s Encrypt / acme)https://blog.csdn.net/weixin_45602663/article/details/126631496
3.DNS解析中的A记录、AAAA记录、CNAME记录、MX记录、NS记录、TXT记录、SRV记录、URL转发等https://blog.csdn.net/weixin_44388689/article/details/132466543