python3 安全问题,os.system('wget...') 与 urllib.request.urlopen(...)

python3 security question, os.system('wget...') vs urllib.request.urlopen(...)

今天我在无头驱动的打印服务器 (RaspPi / python3) 中遇到了一个奇怪的行为。

我需要从 Web 服务器下载 PDF 或呈现的 python 脚本。 直到现在我确实使用了:

src = "https://ssl.server.tld/path/to/file.pdf"
target = "/path/to/saved.pdf"

os.system("wget -O "+target+" "+src)

从现在开始我使用:

with urllib.request.urlopen(src) as response, open(target, 'wb') as out_file:
    data = response.read()
    out_file.write(data)

问题如下: 几天后,SSL 证书显然已过时。 os.system() 版本抛出 NON-PYTHON ERROR

https://ssl.***.de/config_page.py
Auflösen des Hostnamen »ssl.***.de (ssl.***s.de)«... 176.***.***.10
Verbindungsaufbau zu ssl.***.de (ssl.***.de)|176.***.***.10|:443... verbunden.
FEHLER: Dem Zertifikat von »ssl.***.de« wird nicht vertraut.
FEHLER: Das Zertifikat von »ssl.***.de« ist abgelaufen.

正如我提到的,没有 python 错误或异常,正在下载我想要的文件,但大小为 0 字节。只有调试器在控制台输出中显示上面引用的文本。

urllib 版本按预期运行,没有错误,没有控制台输出,并且文件正确。

我错过了什么?这是 os.system() 的特殊安全行为吗?

感谢您的回答。

如您所知,wget 正在验证证书,而 urlopen 没有。

如果您希望 wget 跳过检查证书,请添加参数 --no-check-certificate