RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1538557
Accepted
Denis Lopatin
Denis Lopatin
Asked:2023-09-01 03:45:00 +0000 UTC2023-09-01 03:45:00 +0000 UTC 2023-09-01 03:45:00 +0000 UTC

为 nginx docker 安装 ssl 证书,最简单的方法?

  • 772

在nginx docker中访问端口443最简单的方法是什么?nginx:latest

我什至不需要将它们添加到受信任的列表中。这里的想法是这样的:首先,我不关心 TLS。其次,当浏览器显示“连接不安全,接受风险并继续”时,我对这种情况非常满意。也就是说,通过443端口和HTTPS协议访问就够了。

这实际上是在 docker 的 nginx 容器中实现此目的最简单的方法吗?

nginx
  • 2 2 个回答
  • 77 Views

2 个回答

  • Voted
  1. Best Answer
    Pak Uula
    2023-09-03T09:12:53Z2023-09-03T09:12:53Z

    假设您的容器正在nginx运行。docker ps产生类似的东西

    CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
    dcda1cbc1757   nginx:latest   "/docker-entrypoint.…"   5 seconds ago   Up 4 seconds   80/tcp    elated_austin
    

    为域安装证书

    最初,您的问题不包含详细信息,因此我在有关 的评论中写道certbot。这对您的任务来说是多余的,因此您可以立即转到第二部分,即有关自签名证书的部分。

    您需要“进入”容器并在其中安装certbot一个实用程序,用于安装来自Let's Encrypt 的免费证书

    1. 连接到容器并运行bash:docker exec -it dcda1cbc1757 bash这dcda1cbc1757是容器 ID,由 打印docker ps。你可能有一个不同的,更换它。

    2. 如果 ID 正确并且容器正在运行,则会打开bash用户的输入行root:

      root@dcda1cbc1757:/#
      
    3. 我希望您正在运行基于 Debian 的nginx映像。nginx:latest然后您需要更新软件包apt并安装certbot:

      apt update
      apt install certbot python3-certbot-nginx -y
      

      如果您有基于的映像alpine,则使用该命令安装必要的软件包apk add certbot certbot-nginx。

    4. 运行certbot:certbot --nginx 程序会问您几个问题,强制您接受用户协议,然后解析配置文件nginx并询问要为哪些域请求证书。

    5. 证书及相关技术文件将保存在/etc/letsencrypt. 默认情况下,该目录位于容器内部,重新创建容器时证书将丢失。如果您需要保存它们,请重新启动容器nginx并将该目录映射到主机文件系统:(docker run -v /path/in/host/fs:/etc/letsencrypt nginx:latest或者您在那里运行的任何文件系统)。

    安装测试证书

    安装自签名证书

    您需要进入容器生成证书并更新配置文件nginx。

    1. 输入容器:docker exec -it dcda1cbc1757 bash. 这dcda1cbc1757是容器 ID,由 打印docker ps。你可能有一个不同的,更换它。

    2. 运行容器中的命令

      cd /etc/nginx
      mkdir certs
      cd certs
      openssl req -newkey rsa:2048 -nodes -keyout server.key -x509 -days 365 -out server.crt
      

      最后一个命令将询问您有关证书身份的五个问题,生成文件的 2048 位 RSA 密钥/etc/nginx/certs/server.key以及/etc/nginx/certs/server.crt. 证书有效期为365天,密钥无密码。

    3. 安装一些编辑器,例如vim:apt install vim -y

    4. 编辑您的服务器设置。在下面的示例中,编辑了默认服务器设置:

      editor /etc/nginx/conf.d/default.conf
      

      将listen 443 ssl;密钥和证书的路径添加到服务器参数:

      server {
         listen       80;
         listen  [::]:80;
         listen  443 ssl;
         ssl_certificate     /etc/nginx/certs/server.crt;
         ssl_certificate_key /etc/nginx/certs/server.key;
      

      保存文件。

    5. 重新启动nginx:nginx -s reload

    6. 验证(在容器内):curl -k https://localhost 此选项-k禁用证书有效性检查。如果一切正确,则打印服务器的curl内容index.html

      <!DOCTYPE html>
      <html>
      <head>
      <title>Welcome to nginx!</title>
      <style>
      html { color-scheme: light dark; }
      body { width: 35em; margin: 0 auto;
      font-family: Tahoma, Verdana, Arial, sans-serif; }
      </style>
      </head>
      <body>
      
    • 1
  2. Denis Igorevich
    2023-09-02T15:22:12Z2023-09-02T15:22:12Z

    这是我的 nginx 配置,也许会有帮助

    server {
      listen 80;
      listen 443 ssl;
      server_name myserverfit.com;
    
      ssl_certificate /etc/nginx/certs/chain.crt;
      ssl_certificate_key /etc/nginx/certs/serverKey.crt;
    
      ssl_verify_client off;
    
      location / {
        root /usr/share/nginx/html;
        index index.html index.htm;
      }
      glpat-RyCbALxj3_esK_pZbQbr
    
    location /index {
        proxy_pass https://server:8085/index;
        proxy_ssl_verify off;
      }
    
      location /hash-message {
        proxy_pass https://server:8085/hash-message;
        proxy_ssl_verify off;
      }
    
      error_page 500 502 503 504 /50x.html;
      location = /50x.html {
        root /usr/share/nginx/html;
      }
    }
    

    您还需要将证书添加到受信任的证书中。在 Windows 上,这似乎很容易,但如果您使用 Linux,则必须施展一些魔法。另外,您还需要将证书添加为浏览器本身信任的证书。最简单的方法是使用 Google Chrome。

    • 0

相关问题

  • 子域的 nginx 配置

  • 为 Web 主机备份 certbot ssl 密钥和证书

  • 无法使用 certbot 续订 SSL 证书

  • 配置 Nginx,proxy_pass 到子域

  • 防止网站在被 ip 点击时显示

  • 根据特定域启用/禁用 proxy_protocol

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5