当我们的服务要使用域名并使用https访问访问时,证书的重要性就体现出来了,毕竟谁也不想浏览器访问域名时出现红色❌吧,而且对接微信小程序开发时,一个正规的https证书也是必需的。
下面将介绍生成证书有两种方式:
- Openssl生成
- LetsEncrypt生成
1. LetsEncrypt生成
这个网站比较慢,且普通用户只能使用共享通道,要排队; 推荐的证书有效期只有三个月,到期记得重新申请,不然服务就GG了;申请地址:https://letsencrypt.osfipin.com/
注册登陆后会有填写域名的过程,建议勾选泛域名和根域名,毕竟免费,多勾选几个也不坏[doge]
然后就是验证了,提供两种验证方式,DNS和HTTP;
-
DNS:
DNS方式需要进入域名提供商的控制台,配置DNS的前缀和解析值为LetsEncrypt提供给你的值,修改后等十几分钟让DNS刷新,然后回到LetsEncrypt再执行验证操作,免费账户会排队等待,耐心等待验证通过即可
以下为腾讯云配置示例,xxxxxxxxxxxxxx替换为解析值
|主机记录|记录类型|线路类型|记录值|权重|优先级|TTL|最后操作时间|操作|
|-------|-------|-------|-------|-------|-------|-------|-------|-------|
|_acme-challenge|TXT|默认|xxxxxxxxxxxxxx| - | - |600|2022-12-01 00:00:00| |
-
HTTP:
http方式更简单,适合公司域名,但是开发和运维人员无权限修改DNS的情况
需要配合web服务器使用,因为该方式LetsEncrypt会给你一个文件和一个访问地址(你域名下的一个随机地址),访问该地址能显示文件的内容即可
我这里使用的是nginx,配置文件如下,在conf.d文件夹里
server {
listen 80;
server_name 【LetsEncrypt提供地址的域名】;
# 用作证书校验
location /.well-known/acme-challenge/ {
# LetsEncrypt提供的文件我放在/usr/share/nginx/html/letsencrypt/下
alias /usr/share/nginx/html/letsencrypt/;
# 只显示文件内容不下载
default_type text/plain;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
}
配置完成后重启nginx服务即可
2. Openssl自签证书(浏览器不认,微信小程序也不认)
2.1 参看openssl是否安装,centos一般默认安装好了
openssl version
2.2 生成私钥
openssl genrsa -des3 -out server.pass.key 2048
输入两次四位以上密码即可
2.3 去除私钥密码
openssl rsa -in server.pass.key -out server.key
上述操作会生成两个文件server.key(无密码的私钥文件)server.pass.key (有密码的私钥文件)
2.3 生成CSR文件
openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=Ningbo/L=Zhejiang/O=dep/OU=dep/CN=www.iwiki.ink"
2.4 生成自签名证书
# -days:证书有效天数
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
此时文件夹共有
- server.crt(自签名SSL证书)
- server.csr(签名文件)
- server.key(无密码的私钥文件)
- server.pass.key(有密码的私钥文件)
将 server.crt 和server.key放进nginx中配置即可