如何验证DDCLIENT正在使用SSL,如果未使用SSL,如何强制使用它?


9

我一直在按照指南在pi上设置VPN。步骤的一部分是设置和配置动态dns服务。我已经在多个平台上创建了多个帐户。ip和dynamicdns就是其中两个。下面是我的ddclient.conf文件的输出,它在两个动态dns站点上均正常连接。

daemon=60                               # check every 60 seconds
syslog=yes                              # log update msgs to syslog
mail=root                               # mail all msgs to root
mail-failure=root                       # mail failed update msgs to root
pid=/var/run/ddclient.pid               # record PID in file.
ssl=yes                                 # use ssl-support.  Works with
                                        # ssl-library
use=web, web=myip.dnsdynamic.com        # get ip from server.
server=www.dnsdynamic.org               # default server
login=YOURUSERNAME                      # default login
password=YOURPASSWORD                       # default password
server=www.dnsdynamic.org,              \
protocol=dyndns2                        \
MYDOMAIN.dnsdynamic.COM

我的问题是,在这个文章中,他们说明如何验证您的PI是通过SSL进行连接。当我跑步

sudo ddclient -verbose -debug -noquiet -query 

它显示了针对每个站点通过HTTP还是HTTPS或SSL进行连接。我已验证通过运行安装了ssl

sudo apt-get install ssh libio-socket-ssl-perl

关于它是否通过ssl进行连接或如何强制它的任何想法?我也浏览了这篇文章。我确实看到ddclient声明它将在可用的情况下使用SSL,我想知道这是否限制了使用免费的dynamicdns站点,或者是否忽略了某些内容。文章使它看起来好像我正在使用的站点一样,没有ip和dnsdynamic支持SSL。


1
我看sudo ddclient -debug -verbose -noquiet不到sudo ddclient -verbose -debug -noquiet -query 您所拥有的……与第二个链接一样
George Udosen

@George是我的错误,我错过了添加-query的过程。但是,以崭新的心态再次查看问题,并提示我重新查看问题确实可以帮助我解决问题!添加答案,将编辑问题。
Shaulinator

Answers:


4

我已经找到了答案,并且感到很傻,不及早发现答案。

daemon=60                               # check every 60 seconds
syslog=yes                              # log update msgs to syslog
mail=root                               # mail all msgs to root
mail-failure=root                       # mail failed update msgs to root
pid=/var/run/ddclient.pid               # record PID in file.
ssl=yes                                 # use ssl-support.  Works with
                                        # ssl-library
use=web, web=https://myip.dnsdynamic.org        # get ip from server.
server=www.dnsdynamic.org               # default server
login=USERNAME                          # default login
password=PASSWORD                       # default password
server=www.dnsdynamic.org,              \
protocol=dyndns2                        \
YOUR DOMAIN GOES HERE

以上将强制使用SSL并通过SSL连接。我做了两个更改。

该行use=web, web=myip.dnsdynamic.com应该是use=web, web=https://myip.dnsdynamic.org。从更改为.com可以.org停止连接失败。https://在连接字符串之前添加允许它通过SSL连接。

use=web, web=myip.dnsdynamic.org节目的输出:

use=web, web=loopia address is IPADDRESSISHERE
CONNECT:  myip.dnsdynamic.org
CONNECTED:  using HTTP
SENDING:  GET / HTTP/1.0
SENDING:   Host: myip.dnsdynamic.org
SENDING:   User-Agent: ddclient/3.8.2
SENDING:   Connection: close

use=web, web=https://myip.dnsdynamic.org节目的输出:

use=web, web=loopia address is IPADDRESSISHERE
CONNECT:  myip.dnsdynamic.org

The verification of cert '/C=US/O=GeoTrust Inc./CN=RapidSSL SHA256 CA/CN=www.dnsdynamic.org'
failed against the host 'myip.dnsdynamic.org' with the default verification scheme.

   THIS MIGHT BE A MAN-IN-THE-MIDDLE ATTACK !!!!

To stop this warning you might need to set SSL_verifycn_name to
the name of the host you expect in the certificate.

CONNECTED:  using SSL
SENDING:  GET / HTTP/1.0
SENDING:   Host: myip.dnsdynamic.org
SENDING:   User-Agent: ddclient/3.8.2
SENDING:   Connection: close

我仍然不确定为什么强制ssl=yes不会导致它自动使用HTTPS,但是它现在通过SSL连接,@ George看到的命令可以帮助我验证它是:sudo ddclient -verbose -debug -noquiet -query


1

这只是“获取IP”部分。动态DNS服务器的实际更新未显示在您的输出中。它仍然可以通过HTTP完成。

root@ad26e03e9704:/bin# ddclient -daemon=0 -noquiet -debug -file /config/ddclient.conf
DEBUG:    get_ip: using cmd, /config/get_ip.sh reports 10.0.0.1
DEBUG:
DEBUG:     nic_dyndns2_update -------------------
DEBUG:    proxy  =
DEBUG:    url    = http://dyndns.strato.com/nic/update?system=dyndns&hostname=bla.mydomain.com&myip=10.0.0.1
DEBUG:    server = dyndns.strato.com
SUCCESS:  updating bla.mydomain.com: good: IP address set to 10.0.0.1

如果将https放在服务器前面,则会得到:

DEBUG:    url    = http://https://dyndns.strato.com/nic/update?system=dyndns&hostname=bla.mydomain.com&myip=10.0.0.1

自发布以来,我已经关闭了运行DDClient的Pi。我将不得不启动一个实例,并进行另一个测试,以查看调试显示的内容。谢谢!
Shaulinator

0

因为我也被输出行中的URL所迷惑

DEBUG:    url    = http://(...)

尽管我已经ssl=yes在配置中使用HTTP而不是HTTPS开头,但我决定研究源代码以查看发生了什么。事实证明,在geturl启动与服务器的连接的功能中,http://无论如何,该部分仍会从URL剥离,因此它并不表示实际的连接类型。如果要确保ddclient使用SSL,只需从终端以以下方式调用ddclient:

sudo ddclient -verbose -force

并寻找线

CONNECTED:  using HTTP

要么

CONNECTED:  using SSL

在后一种情况下,ddclient实际上使用的是SSL,您可以使用。请注意,该ssl=yes设置不适用于ddclient用来检查您的公共IP地址(由配置的IP地址)是否已更改的初始IP查找use=...,因此对于该初始连接,您仍然会看到CONNECTED: using HTTP如@Shaulinator所述,除非您显式设置HTTPS地址。但是,这不应该是一个安全问题,因为此请求返回的IP地址可能仅用于避免服务器端的不必要工作。它不会在实际的更新请求中发送给服务器,因为当ddclient启动SSL连接时,服务器会轻易知道您的IP地址。我只对freedns协议进行了明确的检查,但是如果其他协议不同,我会感到惊讶。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.