我是docker的新手,并且在Ubtuntu 14.04上使用v1.8.1。
我已经将Apache设置为在http://www.domain.com上为网站提供服务的虚拟主机,并希望在PEPS上为https://email.domain.com服务器
注意:PEPS仅在SSL连接上运行。
我禁用了让apache监听端口443的功能,因为PEPS抱怨该端口正在使用中。
apache port.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。
我更改了在makefile中运行的PEPS端口,并重新构建/重新启动了容器。通过运行来验证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的新证书。