自签 https(以 nginx 为例)

本文介绍了如何从头开始安装nginx,配置并使用openssl自签SSL证书,确保HTTPS连接。首先,通过安装和配置nginx创建一个HTTP服务器,然后详细讲解如何使用openssl生成证书和密钥,包括修改配置文件以包含服务器IP。接着,描述了服务端和客户端如何应用这些证书,以及处理服务器IP变化和域名绑定的方法。文章最后提到了客户端需要手动复制ca.crt文件的不便。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前

先准备一个干净的 nginx,最好新装一个,然后搭建一个 http 服务器(以 ubuntu 为例):

安装 nginx
sudo apt install nginx

安装好后,会自动启动
访问localhost检查一下,如果不成功的话,看看 80 端口是否被占用
检查好后,在命令行启动 nginx

sudo nginx

nginx 的日志读写需要 sudo 权限

之后再检查一下是否启动成功

重新配置 nginx

nginx 的配置文件里(在/etc/nginx/nginx.conf目录下),有很多内容
我想,很少有人能认全,多余的配置只会产生迷惑,先全删掉
填入以下内容:

user root; # 以 root 用户启动 nginx
events {}

http {
  server {
    root /home/gy/static; # http 服务器的跟路径设为 /home/gy/static
  }
}

然后,让 nginx 重新加载配置:

sudo nginx -s reload

然后,随便在根目录下(也就是本例的 /home/gy/static)造个文件
比如 index.css,里面随便写一些东西
再访问localhost/index.css,如果成功了,说明以上配置没问题,一个新的 nginx 装好了

openssl

这个工具是主角,确保它已经安装,并且版本在 1.1.0 以上:

openssl version

版本老的话,就删了:

sudo apt remove openssl

安装:

sudo apt install openssl

准备工作完成

签 https 到 ip

配置 openssl

先对配置文件做一些修改,位置:/etc/ssl/openssl.cnf

  1. req_extensions
    在 [ req ] 模块,添加req_extensions = v3_req
    默认应该是有的,只需要解除注释

  2. req_distinguished_name
    确保 [ req_distinguished_name ] 模块下没有 0.xxx
    如果有,删除 0.(所有)
    比如:0.organizationName = Organization Name (eg, company)
    改成:organizationName = Organization Name (eg, company)

  3. alt_names
    [ v3_req ] 模块下添加:subjectAltName=@alt_names
    在最后添加新的 [ alt_names ] 模块:

[ alt_names ]
IP.1 = 192.168.100.100

[ ip ] 别忘换成你自己的服务器的 ip

准备一个目录

在任意位置,准备一个目录,放你的证书、密钥等文件,比如/home/gy/ssl.
然后,需要下面的目录和文件:

mkdir -p demoCA/newcerts
touch ./demoCA/index.txt ./demoCA/serial
echo "01">> ./demoCA/serial
生成证书、密钥

切换到/home/gy/ssl目录

下面有要求输入信息的,按实际输入即可
需要特别注意的是,有一项是 common name,那里必须输入服务器的 ip 地址

  1. 生成机构密钥
openssl genrsa -out ca.key 2048
  1. 生成机构证书
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -config /etc/ssl/openssl.cnf
  1. 生成服务器密钥
openssl genrsa -out server.key 2048
  1. 生成服务器证书
openssl req -new -out server.csr -key server.key -config /etc/ssl/openssl.cnf
  1. 机构签署证书
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -extensions v3_req -config /etc/ssl/openssl.cnf

其中有要求输入信息的,按实际输入即可
需要特别注意的是,有一项是 common name,那里必须输入服务器的 ip 地址

之后

证书生成好了,把证书发给客户端和服务器

服务端

修改 nginx 的配置文件:/etc/nginx/nginx.conf,修改好后:

user root;
events {
}

http {
  server {
    listen 443 ssl;
    ssl_certificate /home/gy/ssl/server.crt;
    ssl_certificate_key /home/gy/ssl/server.key;

    root /home/gy/static;
  }
}

重新加载 nginx 配置:

sudo nginx -s reload
客户端

用 u 盘或某种工具,把上一步生成的ca.crt文件搞到客户端电脑,双击即可安装
step1
step2
step3

step4
重启 浏览器

完成

缺陷

客户端需要手动复制 ca.crt 文件

比较麻烦,可以在用户访问 http 链接时,返回给用户 ca.crt 文件(不安全)

服务器 ip 变化
  • 方案一:重新生成证书,交给服务器、交给客户端
  • 方案二:绑定域名
绑定域名的两种方式
  • host 文件(每个客户端都要修改,部署较麻烦)
  • dns
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值