在ubuntu上生成证书

第一种:安装 OpenSSL(如果没安装)

sudo apt update
sudo apt install openssl

生成私钥(private key)

openssl genrsa -out domain.key 2048
这会生成一个 2048 位的私钥文件 domain.keyopenssl req -new -x509 -key domain.key -out domain.crt -days 365
  • new 新建证书请求
  • x509 表示生成自签名证书(而非证书请求)
  • key domain.key 指定私钥
  • out domain.crt 证书文件名
  • days 365 证书有效期 365 天
  1. 生成自签名证书(certificate)

执行时会提示填写一些信息,比如国家、组织、域名(Common Name,CN),域名填写你服务器的域名或 IP。

证书和私钥生成后文件

  • domain.key:私钥(千万保管好,不要泄漏)
  • domain.crt:自签名证书

验证证书信息(可选)

openssl x509 -in domain.crt -text -noout

第二种:安装 Certbot 获取免费 SSL 证书(Let’s Encrypt)

假设已经有域名,例如 ssh.example.com,并且 DNS 已经解析到你的服务器 IP。

安装 Certbot:

sudo apt install certbot python3-certbot-nginx -y

申请证书(自动配置 Nginx):

sudo certbot --nginx -d ssh.example.com

执行时会让你选择:

  • 输入邮箱
  • 是否同意条款
  • 是否把 HTTP 自动重定向到 HTTPS(建议选 Yes)
  • 完成后,证书会自动配置到 /etc/nginx/sites-available/ 里。

安装nginx

sudo apt update
sudo apt install nginx -y
sudo systemctl status nginx

sudo systemctl start nginx      启动
sudo systemctl enable nginx

对某个需要https的服务开启https

假设 sshwifty 在 Docker 中监听 8182 端口(你可以改成你实际端口),编辑 Nginx 配置:

sudo nano /etc/nginx/sites-available/sshwifty.conf

写如如下模板:

server {
    listen 80;
    server_name ssh.example.com;

    location / {
        proxy_pass http://127.0.0.1:8182/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 36000s;
        proxy_send_timeout 36000s;
    }
}

server {
    listen 443 ssl;
    server_name ssh.example.com;

    ssl_certificate /etc/letsencrypt/live/ssh.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ssh.example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        proxy_pass http://127.0.0.1:8182/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 36000s;
        proxy_send_timeout 36000s;
    }
}

注意:server_name名必须一致,否则nginx会打开默认的欢迎页面

启用配置并重启 Nginx

sudo ln -s /etc/nginx/sites-available/sshwifty.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

签发33521.wang 的 SSL 证书

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d ssh.33521.wang
作者:admin  创建时间:2025-08-12 15:44
最后编辑:admin  更新时间:2025-08-12 17:08