ubuntu - 在非标准 SSL 端口上访问 docker 容器

标签 ubuntu ssl curl docker

我是 docker 新手,在 Ubtuntu 14.04 上使用 v1.8.1。

我已经将 Apache 设置为在 http://www.domain.com 上为网站提供服务的虚拟主机,并希望在 PEPS 上为 https://email.domain.com 服务器

注意:PEPS 仅在 SSL 连接上运行。

我禁用了让 apache 监听端口 443,因为 PEPS 提示该端口正在使用中。

apache 端口.conf :

Listen 80

#<IfModule ssl_module>
#       Listen 443
#</IfModule>

#<IfModule mod_gnutls.c>
#       Listen 443
#</IfModule>

我为端口 80 设置了一个虚拟主机以指向网站目录。 此时,我可以访问位于 http://www.domain.com 的网站和位于 https://www.domain.com 的 PEPS 容器 我什至可以通过 curl 命令获取 PEPS 登录页面。

curl -vk https://localhost:443 

为了在 https://mail.domain.com 上提供 PEPS,我首先需要在另一个端口 (9091) 上运行 PEPS,然后为 mail.domain.com:443 创建一个指向 localhost:9091 的反向代理。

我更改了 PEPS 在 makefile 中运行的端口并重建/重新启动了容器。通过运行验证 PEPS 正在 9091 上运行

netstat -tapen | grep ":9091 "

运行 curl 命令,我看到以下错误。

croydon@vps138520:~/PEPS$ curl -vk https://localhost:9091
* Rebuilt URL to: https://localhost:9091/
* Hostname was NOT found in DNS cache
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 9091 (#0)
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* Unknown SSL protocol error in connection to localhost:9091 
* Closing connection 0
curl: (35) Unknown SSL protocol error in connection to localhost:9091 

关于为什么会这样有什么想法吗?从非标准 SSL 端口访问容器会导致错误。

croydon@vps138520:~/PEPS$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                       NAMES
238dd721273e        smtpin              "/sbin/my_init"          32 minutes ago      Up 32 minutes       0.0.0.0:25->25/tcp, 0.0.0.0:587->587/tcp    peps_smtpin
603a5dc16a8e        peps                "/sbin/my_init"          32 minutes ago      Up 32 minutes       443/tcp, 0.0.0.0:9091->9091/tcp, 8999/tcp   peps_server
4573ee08c153        smtpout             "/sbin/my_init"          32 minutes ago      Up 32 minutes       25/tcp, 0.0.0.0:465->465/tcp                peps_smtpout
028f4b0cb61e        solr                "/bin/bash -c 'cd /op"   32 minutes ago      Up 32 minutes       8983/tcp                                    peps_solr
452c6a557f65        mongod              "/usr/bin/mongod --po"   32 minutes ago      Up 32 minutes       27017/tcp                                   peps_mongod


croydon@vps138520:~$ openssl s_client -connect localhost:9091
CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 295 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---

croydon@vps138520:~$ openssl s_client -connect localhost:9091 -ssl3
CONNECTED(00000003)
140545670362784:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:s3_pkt.c:598:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 0 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : SSLv3
    Cipher    : 0000
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1440181543
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---

最佳答案

问题出在 SSL 证书上。 当我在公共(public) 443 端口上托管容器时,证书的域名为:domain.com。

但是,当托管在9091端口时,我必须创建一个域名为:localhost的新证书

关于ubuntu - 在非标准 SSL 端口上访问 docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32130496/

相关文章:

cordova - 创建新的 cordova 项目时出现 404 错误

php - 使用 PHP 为 Apple Wallet passes 创建 PKCS #7 分离签名

php - 如果 https 连接,cURL 清空请求数据

c++ - Windows 链接

php - 与 CURL 等效的 file_get_contents()?

linux - 用于在文件中生成任意大小的随机内容的命令

ubuntu - pip安装后找不到cget

python - Django 不提供管理静态文件(Apache、mod_wsgi)

amazon-web-services - AWS ELB - SSL/TLS 终止混淆

javascript - 用于安全握手的 SSL 替代方案?