letsencrypt 的使用场景通常是有外网的时候,如果安装的 nginx 不能访问外网,同时也不能被外网访问,只能在内网发布,这时候 letsencrypt 就无法安装了,此时使用 openssl 手动生成证书可以解决此问题。
- 安装 nginx
# 安装nginx
apt install nginx
vim /etc/nginx/conf.d/test.conf
server {
listen 80;
server_name www.test.com;
root /var/www/html;
index index.html
client_max_body_size 1g;
}
echo ok > /var/www/html/index.html
# 重启 nginx 后确保能通过浏览器正常访问,并返回ok
sudo systemctl restart nginx
- openssl 创建证书
# 使用openssl交互式方式创建证书
openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout www.test.com.key -out www.test.com.crt
# 除了如下要写配置的域名外,其他的都直接回车
Common Name (e.g. server FQDN or YOUR name) []:www.test.com
# 拷贝到nginx配置目录
cp www.test.com.crt /etc/nginx/
cp www.test.com.key /etc/nginx/
- nginx 配置证书
vim /etc/nginx/conf.d/test.conf
server {
listen 443 ssl;
server_name www.test.com;
root /var/www/html;
index index.html;
ssl_certificate /etc/nginx/www.test.com.crt;
ssl_certificate_key /etc/nginx/www.test.com.key;
}
// http 重定向到 https
server {
listen 80;
server_name www.test.com;
if ($host = www.test.com) {
return 301 https://$host$request_uri;
}
return 404;
}
# 禁止 http://IP 访问
server {
listen 80 default_server;
server_name _;
return 403;
}
# 禁止 https://IP 访问
server {
listen 443 ssl default_server;
server_name _;
ssl_certificate /etc/nginx/www.test.com.crt;
ssl_certificate_key /etc/nginx/www.test.com.key;
return 403;
}
# 重启nginx
systemctl restart nginx
- 浏览器配置证书mac:将
/etc/nginx/www.test.com.crt
下载到mac上,双击该文件安装证书,并配置全部信任(在钥匙串配置) - 浏览器配置证书windows:不需要配置
- macOS 解决
Chrome NET::ERR_CERT_INVALID
的问题
在较新的 Chrome 版本中,访问不受信任的 HTTPS 网站时,会提示如下的提示,并且点击高级按钮也没有继续前往的链接。
提供一个简便的方法:
随便点击页面的空白处,然后输入:thisisunsafe
页面就可以打开了,很神奇。