证书在Docker Nginx官方映像中不起作用

时间:2018-08-24 19:02:17

标签: docker ssl nginx http-status-code-400

我有一个官方的Nginx映像,其中添加了证书和.conf文件,因此它通过端口443和80进行侦听。我刚刚在Nginx的官方dockerfile上添加了

   ADD gp-search2.conf /etc/nginx/conf.d/
   ADD STAR.GREY.COM.crt /etc/ssl/certs/
   ADD wildcard_grey.com.key /etc/ssl/certs/

我正在使用Azure容器实例,并使用此命令成功创建了容器

az container create --resource-group RG --name nginx --image xxxxx.azurecr.io/api-s:nginx4 --cpu 1 --memory 1.5 --registry-username xxxxxx --registry-password xxxxxxxxxx --ip-address public --ports 443 --dns-name-label prod3

此后,我成功地在azure上创建了一个具有公共IP和我提供的prod3eastus.azurecontainer.io的FQDN的容器。另外,我在 Dynect.net 中为我们拥有的域创建一个新节点:newcontainer.example.com,并在其中添加新容器的公共IP,这样我在容器上拥有的有效证书就可以了比域。

如果使用公共FQDN或Azure提供的IP访问容器,则可以访问ok,但是如果尝试使用HTTPS访问,则会得到:

  

此页面不起作用如果问题仍然存在,请与网站所有者联系。 HTTP错误400

  

*警告:无法验证 newcontainer.example.com 的证书,该证书由'CN = Network Solutions OV Server CA 2,O = Network Solutions LLC,L = Herndon,ST颁发= VA,C = US':无法在本地验证发行人的权限。*

尽管如此:

  • 证书有效
  • 证书的使用路径与我在Nginx容器中的file.conf上指示的路径相同(如果没有,容器将无法使用)。

这是我拥有的.conf文件:

upstream searchapl {


server 40.x.x.x:8080 fail_timeout=0;
}
server {
    listen       80;
    server_name  _;
    return 301 https://$host$request_uri;   



    }
server {
  listen 443 ssl;
  server_name _;
  #status_zone go-backend-servers;
  ssl_certificate /etc/ssl/certs/STAR.client.COM.pem;
  ssl_certificate_key /etc/ssl/certs/STAR.client.COM.key;
  ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
  ssl_ciphers HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers on;
  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_pass http://searchapl;
    proxy_redirect http:// https://;
    # Socket.IO Support
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    # time out settings
    proxy_connect_timeout 159s;
    proxy_send_timeout   600;
    proxy_read_timeout   600;
    proxy_buffer_size    64k;
    proxy_buffers     16 32k;
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k;
    proxy_pass_header Set-Cookie;
}

}

此Nginx用作反向代理,重定向到可以正常工作的Tomcat容器。如果输入容器IP,重定向将成功进行。我带我去了Tomcat。但是超过443,我会收到证书问题。我还能检查什么?证书和密钥具有读取权限。


好,现在我向前走了一步,但仍然出现错误。我创建了.pem文件而不是.crt文件,其中包含了所有主证书和中间+根目录。

不再出现无法检查证书颁发机构的错误,但是现在我得到:

***--2018-08-24 21:05:05--  https://xxxxxxxxxxxx.com/
Resolving xxxxxxxxxxxx.com (gp_searchv2.grey.com)... 23.x.x.x
Connecting to xxxxxxxxx.com (xxxxxxxxxx.com)|23.x.x.x|:443... connected.
HTTP request sent, awaiting response... 400
2018-08-24 21:05:05 ERROR 400: (no description).***

1 个答案:

答案 0 :(得分:0)

无意中回答了我自己的Anser。我把我的答案放在编辑上。我无法删除它。