如何生成 `cert.pem` 和 `key.pem` 文件?

环境:

WSL2

Ubuntu22.04

Flask

问题描述:

如何生成 cert.pemkey.pem 文件?

解决方案:

要生成 cert.pemkey.pem 文件(SSL/TLS 证书和密钥),可以通过以下几种方式完成,选择适合您的需求的方式:


1. 使用 OpenSSL 生成自签名证书

这是最快速的方法,适用于本地开发和测试,但由于是自签名证书,浏览器和客户端会认为它不安全。

步骤:

  1. 安装 OpenSSL

    • 如果尚未安装 OpenSSL,可以通过以下方式安装:
      • Windows:通过 OpenSSL for Windows 下载并安装。
      • Linux(大多数发行版自带):
        sudo apt update && sudo apt install openssl
        
      • macOS(通过 Homebrew):
        brew install openssl
        
  2. 生成证书和私钥

    • 运行以下命令生成自签名证书 cert.pem 和私钥 key.pem

      openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout key.pem -out cert.pem
      
    • 参数说明:

      • -x509:生成 X.509 格式的证书。
      • -nodes:不加密私钥(避免输入密码)。
      • -days 365:证书的有效期为 365 天。
      • -newkey rsa:2048:生成一个 2048 位的 RSA 密钥。
      • -keyout key.pem:私钥输出到 key.pem 文件。
      • -out cert.pem:证书输出到 cert.pem 文件。
  3. 填写证书信息

    • 执行命令时,系统会提示您填写一些信息。例如:

      Country Name (2 letter code) [AU]:CN
      State or Province Name (full name) [Some-State]:Beijing
      Locality Name (eg, city) []:Beijing
      Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany
      Organizational Unit Name (eg, section) []:IT
      Common Name (e.g. server FQDN or YOUR name) []:192.168.168.77
      Email Address []:admin@example.com
      
    • 注意:Common Name (CN) 应填写服务器的域名或 IP 地址,例如 192.168.168.77localhost,否则客户端会报错。
      在这里插入图片描述

  4. 生成成功

    • 运行成功后,当前目录下会生成:
      • key.pem:私钥文件。
      • cert.pem:证书文件。
        在这里插入图片描述
  5. 测试 Flask 使用自签名证书

    • 在 Flask 应用中启用 HTTPS:
      from flask import Flask
      
      app = Flask(__name__)
      
      @app.route('/')
      def home():
          return "Hello, HTTPS!"
      
      if __name__ == "__main__":
          app.run(ssl_context=('cert.pem', 'key.pem'))  # 使用生成的证书和私钥
      

2. 使用 Let’s Encrypt 生成免费证书(推荐用于生产环境)

如果服务器使用公网 IP,可以使用 Let’s Encrypt 提供免费证书。它是一个权威 CA(证书颁发机构),签发的证书会被浏览器和客户端信任。

步骤:

  1. 安装 Certbot
    Certbot 是一个自动化工具,用于生成和安装 Let’s Encrypt 证书。

    • Ubuntu/Debian

      sudo apt update
      sudo apt install certbot python3-certbot-nginx
      
    • CentOS/RHEL

      sudo yum install certbot python3-certbot-nginx
      
    • macOS(通过 Homebrew):

      brew install certbot
      
  2. 获取证书

    • 如果您使用 Nginx 或 Apache,可以让 Certbot 自动配置 HTTPS:

      sudo certbot --nginx
      

      或:

      sudo certbot --apache
      
    • 如果您只是获取证书,而不自动配置服务器:

      sudo certbot certonly --standalone
      
    • Certbot 会提示您填写域名、邮箱等信息,并自动生成证书。

  3. 证书存储路径

    • 生成的证书默认存储在 /etc/letsencrypt/live/<your-domain>/ 目录下:
      • fullchain.pem:完整的证书链。
      • privkey.pem:私钥。
  4. 使用证书

    • 在 Flask 中使用 Let’s Encrypt 证书:
      app.run(ssl_context=('/etc/letsencrypt/live/<your-domain>/fullchain.pem', 
                           '/etc/letsencrypt/live/<your-domain>/privkey.pem'))
      
  5. 设置自动续期

    • Let’s Encrypt 证书有效期为 90 天,建议设置自动续期:
      sudo crontab -e
      
      添加以下任务,每天凌晨尝试续期:
      0 0 * * * certbot renew --quiet
      

3. 测试环境中忽略 HTTPS 验证(仅开发环境,不推荐)

在开发环境中,您可以强制忽略 HTTPS 验证,避免使用正式证书:

在 Flask 中忽略 HTTPS:

  1. 使用 Flask 的内置 HTTP 服务器,不配置 SSL:

    app.run()
    
  2. 在浏览器或客户端中允许访问不安全的 HTTPS:

    • Chrome
      • 在浏览器地址栏输入:
        chrome://flags/#allow-insecure-localhost
        
      • 启用 “Allow invalid certificates for resources loaded from localhost”。

4. 总结:选择适合的方式

使用场景方法
本地开发使用 OpenSSL 生成自签名证书。快速、简单,但客户端会提示不安全。
内网环境使用自签名证书,但手动将证书安装到每个客户端的信任列表中。
生产环境使用 Let’s Encrypt 生成免费证书,或从权威 CA(如 DigiCert、阿里云、腾讯云)购买正式证书。
测试环境(临时)在 Flask 或其他框架中直接启用 HTTP,或强制忽略 HTTPS 验证(仅用于开发/测试阶段)。

推荐的做法是:

  • 本地开发:使用自签名证书。
  • 生产环境:使用 Let’s Encrypt 或权威 CA 的证书,确保安全性和兼容性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玩人工智能的辣条哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值