没有域名怎么使用HTTPS

CA (证书颁发机构)签发证书,需要有域名,也就是说:证书本身也是绑定到域名

那么怎么在只有公网 IP 而没有域名的情况下使用 HTTPS 呢?

自签名证书就是干这个的!

自签名证书跟CA证书有什么区别?

本质区别:谁给你担保,又或者谁给你盖章。

  • **CA证书:**相当于公安局签发的身份证,浏览器一看,盖章的是公安局,立刻信任,显示小锁。

  • **自签名证书:**相当于自己给自己印章,浏览器不信任你,会弹警告:"此连接不安全"。

**重点:**自签名证书只适合在内网中使用,不要在公网上对外服务。因为没有权威机构背书,任何黑客都可以伪造一个跟你一模一样的自签名证书。浏览器无法区分 "你的假证书" 和 "黑客的假证书" ,因为两者都不在信任列表里。

技术上区别:加密强度

很多人误认为"自签名加密弱,CA签发加密强",其实这完全是错误的。

  • **加密算法:**同样都是 RSA/AES/ECC(256位)

  • **通信加密强度:**同样都是银行级

**结论:**自签名证书的"加密能力"和机构签发的没有任何区别,区别只在于"谁来担保这个证书是真的"。

自签名证书怎么搞到手?

需要使用 OpenSSL

什么是OpenSSL:

OpenSSL 是一个开源、免费的密码学工具库 + 命令行工具 ,专门用来做加密、解密、签名、证书、HTTPS 安全通信,是互联网安全的基础软件。

简单说:它就是一套用来给数据加锁、验身份的工具,几乎所有网站、服务器、设备都会用到。

安装OpenSSL:

windows:

复制代码
winget install ShiningLight.OpenSSL.Light

Ubuntu:

复制代码
sudo apt install openssl -y

Centos:

复制代码
sudo dnf install openssl -y

使用OpenSSL+Nginx实现HTTPS

下面是Centos/Ubuntu示例:

bash 复制代码
cd /etc/nginx/
mkdir certs
vim cert.cnf
# 将下面内容粘贴进去
# 将47.123.123.123换为自己的服务器IP
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
x509_extensions = v3_req

[dn]
C=CN
ST=Beijing
L=Beijing
O=MarkitDown
CN=47.123.123.123

[v3_req]
subjectAltName=@alt_names

[alt_names]
IP.1=47.123.123.123



# 接下来运行这段代码生成证书
openssl req \
-x509 \
-nodes \
-days 3650 \
-newkey rsa:2048 \
-keyout server.key \
-out server.crt \
-config cert.cnf

ls # 能看到server.crt、server.key

接下来配置nginx

bash 复制代码
vim /etc/nginx/conf.d/xxx.conf

# 这里给出一个示例,具体的可以让ai根据自己的项目生成


# HTTP 自动跳转 HTTPS
server {
    listen 80;
    server_name 60.205.184.232;

    return 301 https://$host$request_uri;
}


# HTTPS
server {
    listen 443 ssl;
    server_name 60.205.184.232;

    client_max_body_size 20m;

    ssl_certificate     /etc/aa_nginx/certs/server.crt;
    ssl_certificate_key /etc/aa_nginx/certs/server.key;

    ssl_protocols TLSv1.2 TLSv1.3;

    # 前端 Vue
    location / {
        root /home/rfh/personalBlog/vue/dist;
        index index.html;
        try_files $uri $uri/ /index.html;
    }
# 后端 API
    location /api/ {
        proxy_pass http://127.0.0.1:8082;

        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;

        proxy_http_version 1.1;
        proxy_set_header Connection "";

        proxy_request_buffering off;
    }

    # 上传文件
    location /uploads/ {
        proxy_pass http://127.0.0.1:8082;

        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 -t
nginx -s reload

验证:

**注意:**服务器一定要开放 443 端口,不然访问不了

然后启动项目,在浏览器中输入IP+端口验证

如果出现:

证明HTTPS 已配置成功,但是因为不是 CA证书,所以不被信任。

如果是自用,或者是用在内网中,无伤大雅,点击高级,继续访问即可。

千万千万千万将自签名证书用于对外服务!!!

千万千万千万将自签名证书用于对外服务!!!

千万千万千万将自签名证书用于对外服务!!!