我如何验证 DDCLIENT 是否正在使用 SSL,如果没有,我该如何强制使用它?

我如何验证 DDCLIENT 是否正在使用 SSL,如果没有,我该如何强制使用它?

我一直在关注在我的 pi 上设置 VPN 的指南。部分步骤是设置和配置动态 DNS 服务。我已经在多个平台上创建了多个帐户。No 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

我找到了答案,我感到自己没有早点找到答案真是太愚蠢了。

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

答案2

这只是“获取 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

答案3

由于我对输出行中的 URL 感到困惑

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

尽管我的配置中已经启用了 HTTP 而不是 HTTPS ssl=yes,但我还是决定研究一下源代码看看发生了什么。事实证明,在geturl启动与服务器的连接的函数中,该http://部分无论如何都会从 URL 中删除,因此它不表示实际的连接类型。如果您想确保 ddclient 使用 SSL,只需从终端调用 ddclient 即可

sudo ddclient -verbose -force

并寻找线条

CONNECTED:  using HTTP

或者

CONNECTED:  using SSL

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

相关内容