netzbegruenung / green-spider

Hilft Dir dabei, Deine BÜNDNIS 90/DIE GRÜNEN Website zu optimieren
https://green-spider.netzbegruenung.de/
Apache License 2.0
20 stars 8 forks source link

Probleme mit TLS-Zertifikaten sollten im Detail erfasst werden #13

Closed marians closed 1 year ago

marians commented 6 years ago

Wir sollten Details zu HTTPS-Zertifikaten erfassen und Aussagen darüber treffen können,

marians commented 6 years ago

So kann das Server-Zertifikat einfach ausgelesen werden:

https://stackoverflow.com/questions/49132025/ssl-get-server-certificate-for-sites-with-sni-server-name-indication/49132495#49132495

patrickhanft commented 6 years ago

ggf. wäre ja auch der Einsatz von sslyze (macht auch json-output) interessant?

marians commented 6 years ago

@patrickhanft Eventuell ja. Es scheint aber eine Menge Tools mit dem Namen zu geben. Welches meinst Du?

marians commented 6 years ago

Dieses vermutlich? https://github.com/nabla-c0d3/sslyze

patrickhanft commented 6 years ago

Ja, genau.

marians commented 6 years ago

sslyze sieht gut aus, danke! Besonders, weil es analysiert, in welchem System eine CA (root) als vertrauenswürdig angesehen wird. Jedenfalls habe ich es so verstanden. Dazu auch https://nabla-c0d3.github.io/blog/2018/01/16/trust-stores-observatory/

marians commented 6 years ago

Habe hier ein bisschen ausprobiert. Bisher ist es mir nicht gelungen, sslyze in dem alpine-basierten Docker-Image zu kompilieren. Es hängt wohl an nassl. Der letzte Fehler:

Traceback (most recent call last):
  File "spider.py", line 25, in <module>
    import checks
  File "/checks/__init__.py", line 13, in <module>
    from checks import tls_certificate
  File "/checks/tls_certificate.py", line 7, in <module>
    from sslyze.concurrent_scanner import ConcurrentScanner
  File "/usr/local/lib/python3.6/site-packages/sslyze/concurrent_scanner.py", line 9, in <module>
    from sslyze.plugins.plugin_base import PluginScanResult
  File "/usr/local/lib/python3.6/site-packages/sslyze/plugins/plugin_base.py", line 12, in <module>
    from sslyze.server_connectivity import ServerConnectivityInfo
  File "/usr/local/lib/python3.6/site-packages/sslyze/server_connectivity.py", line 13, in <module>
    from nassl.ssl_client import ClientCertificateRequested, OpenSslVersionEnum
  File "/usr/local/lib/python3.6/site-packages/nassl/ssl_client.py", line 7, in <module>
    from nassl import _nassl
ImportError: Error relocating /usr/local/lib/python3.6/site-packages/nassl/_nassl.cpython-36m-x86_64-linux-gnu.so: setcontext: symbol not found

Alternativen:

marians commented 6 years ago

In https://github.com/netzbegruenung/green-spider/pull/70 ist ein neuer check enthalten, der mit pyOpenSSL arbeitet.

Darin ist noch nicht enthalten:

Die Überprüfung der Gültigkeit des Hostnamen wird schon über Exceptions in einem anderen Test (url_reachability) erfasst. Sofern das Zertifikat nicht zum Hostnamen passt, wir die URL nicht als erreichbar gewertet und die entsprechende Fehlermeldung wird erfasst.

marians commented 6 years ago

Zur Prüfung, ob es sich beim Issuer um eine vertrauenswürdige CA handelt:

In https://github.com/nabla-c0d3/trust_stores_observatory sind die trusted root CAs für Windows, Mac OS, iOS, Mozilla und Android enthalten. Ist die Issuer CA in der jeweiligen Sammlung enthalten, sollte das Zertifikat als vertrauenswürdig gelten.

Mir ist noch nicht klar, wie der Abgleich technisch funktionieren kann. Und ob dafür die gesamte Zertifikat-Kette benötigt wird.

Ein Code-Beispiel (das so allerdings nicht 1:1 funktionieren kann) ist in http://aviadas.com/blog/2015/06/18/verifying-x509-certificate-chain-of-trust-in-python/ zu finden.

marians commented 4 years ago

https://github.com/netzbegruenung/green-spider-webapp/pull/60 ist ein Schritt in die Richtung dieses Issues.

marians commented 1 year ago

Schließe das Issue, in der Annahme, dass die aktuell gezeigten Informationen erst mal ausreichen.