├── validation ├── certs │ ├── utils │ │ ├── __init__.py │ │ ├── setup.py │ │ ├── misc.py │ │ ├── crypto.py │ │ └── io.py │ └── scripts │ │ ├── chains │ │ ├── openssl-proxy-not-allowed │ │ │ └── vconfig.yml │ │ ├── openssl-ip-mismatch │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── openssl-length-exceeded │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── openssl-email-mismatch │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── openssl-no-explicit-policy │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── openssl-purpose-reject-mark │ │ │ └── vconfig.yml │ │ ├── expired │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── valid │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── chain-loop │ │ │ └── vconfig.yml │ │ ├── not-yet-valid │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── any-ext-key-usage │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── host-no-match-cn │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── invalid-signature │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── issuer-ca-false │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── issuer-hash-md5 │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── nc-maximum-present │ │ │ └── vconfig.yml │ │ ├── san-empty-email │ │ │ └── vconfig.yml │ │ ├── unknown-root-cn │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── valid-with-aia │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── valid-with-crldp │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── bc-path-len-exceeded │ │ │ └── vconfig.yml │ │ ├── duplicate-bc-extension │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── empty-ext-key-usage │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── empty-ip-addr-blocks │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── end-entity-rsa-key-1024 │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── issuer-no-match-subject │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── issuer-rsa-key-1024 │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── nc-excluded-violation │ │ │ └── vconfig.yml │ │ ├── nc-minimum-not-zero │ │ │ └── vconfig.yml │ │ ├── nc-permitted-violation │ │ │ └── vconfig.yml │ │ ├── negative-serial-number │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── pubkey-info-invalid-oid │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── san-null-byte-in-email │ │ │ └── vconfig.yml │ │ ├── self-signed-end-entity │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── unknown-ext-key-usage │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── empty-key-usage-end-cert │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── empty-subject-and-no-san │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── ip-addr-blocks-no-subset │ │ │ └── vconfig.yml │ │ ├── self-signed-intermediate │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── signature-algorithm-mismatch │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── unknown-critical-extension │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── issuer-pubkey-info-invalid-oid │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── nc-empty │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── v4-cert │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── cert_revoked │ │ │ └── vconfig.yml │ │ ├── issuer-pubkey-invalid-oid-and-signature │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── nc-unknown-name-type │ │ │ └── vconfig.yml │ │ ├── proxy-ca │ │ │ └── vconfig.yml │ │ ├── valid-proxy │ │ │ └── vconfig.yml │ │ ├── bc-not-critical-ca │ │ │ └── vconfig.yml │ │ ├── bc-path-len-in-non-ca │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── crl_has_expired │ │ │ └── vconfig.yml │ │ ├── crl_not_yet_valid │ │ │ └── vconfig.yml │ │ ├── no-key-usage-in-ca │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── notafter-field-invalid │ │ │ └── vconfig.yml │ │ ├── notbefore-field-invalid │ │ │ └── vconfig.yml │ │ ├── proxy-with-san │ │ │ └── vconfig.yml │ │ ├── unable_to_get_crl │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── wrong-signature-algorithm │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── crl_signature_failure │ │ │ └── vconfig.yml │ │ ├── different_crl_scope │ │ │ └── vconfig.yml │ │ ├── keyusage_no_crl_sign │ │ │ └── vconfig.yml │ │ ├── no-certsign-in-keyusage │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── proxy-length-exceeded │ │ │ └── vconfig.yml │ │ ├── v1-cert-with-extensions │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ ├── crl_path_validation_error │ │ │ └── vconfig.yml │ │ ├── proxy-name-no-match-issuer │ │ │ └── vconfig.yml │ │ ├── error_in_crl_last_update_field │ │ │ └── vconfig.yml │ │ ├── error_in_crl_next_update_field │ │ │ └── vconfig.yml │ │ ├── unhandled_critical_crl_extension │ │ │ └── vconfig.yml │ │ ├── bc-path-len-negative │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ └── trusted-only-intermediate │ │ │ ├── vconfig.yml │ │ │ └── generate.py │ │ └── root.py ├── clients │ ├── openjdk │ │ └── Makefile │ ├── gnutls │ │ ├── Makefile │ │ └── client.h │ ├── openssl │ │ └── Makefile │ ├── mbedtls │ │ ├── Makefile │ │ └── client.h │ ├── botan │ │ ├── Makefile │ │ └── client.hpp │ └── Makefile ├── Makefile └── servers │ └── server.py ├── .bundle └── config ├── assets ├── _scss │ ├── colors.scss │ └── dev-warning.scss ├── img │ ├── crocs.png │ └── favicon.png ├── css │ └── main.scss └── js │ ├── analytics.js │ └── main.js ├── robots.txt ├── _includes ├── alert.html ├── scripts.html ├── all_errors.html ├── feedback.html ├── header.html ├── footer.html ├── about.html ├── navigation-guides.html ├── icon.html └── intro.html ├── requirements.txt ├── _guides └── .markdownlint.json ├── revocation ├── openssl-client │ ├── crl_revoc.h │ ├── ct_check.h │ ├── ocsp_stapling_revoc.h │ ├── CMakeLists.txt │ ├── ocsp_revoc.h │ ├── options.h │ ├── Makefile │ ├── utils.h │ └── ocsp_stapling_revoc.c ├── gnutls-client │ ├── ct_check.h │ ├── crl_revoc.h │ ├── ocsp_stapling_revoc.h │ ├── CMakeLists.txt │ ├── ocsp_revoc.h │ ├── Makefile │ ├── options.h │ └── utils.h └── Makefile ├── _pages ├── botan.html ├── gnutls.html ├── index.html ├── mbed.html └── openjdk.html ├── .gitattributes ├── .well-known └── security.txt ├── .firebaserc ├── Gemfile ├── _layouts └── default.html ├── utils ├── docs-checker │ ├── docs-urls.txt │ └── libscheck.py ├── web-test.rb └── test-cert-validation.sh ├── CONTRIBUTORS.md ├── _plugins ├── git-metadata.rb └── html-beautify.rb ├── _data └── libraries.yml ├── .gitignore ├── LICENSE.md ├── .github └── workflows │ └── main.yml ├── .travis.yml ├── _config.yml └── Makefile /validation/certs/utils/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.bundle/config: -------------------------------------------------------------------------------- 1 | --- 2 | BUNDLE_PATH: "vendor/bundle" 3 | -------------------------------------------------------------------------------- /assets/_scss/colors.scss: -------------------------------------------------------------------------------- 1 | /* Core design colors */ 2 | 3 | $c-secondary: #303030; 4 | -------------------------------------------------------------------------------- /robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Allow: / 3 | 4 | Sitemap: http://x509errors.org/sitemap.xml 5 | -------------------------------------------------------------------------------- /assets/img/crocs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crocs-muni/usable-cert-validation/HEAD/assets/img/crocs.png -------------------------------------------------------------------------------- /assets/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crocs-muni/usable-cert-validation/HEAD/assets/img/favicon.png -------------------------------------------------------------------------------- /_includes/alert.html: -------------------------------------------------------------------------------- 1 |
8 | {{ category.description }}
9 | {{ category.links }}
10 |
Something is not working? File a bug report to our repository, please.
5 | {% include icon.html icon="button-bug" %} Bug report 6 |Other comments or ideas?
7 | {% include icon.html icon="button-email" %} Email us! 8 |
6 |
7 | The project is developed at the Centre for Research on Cryptography and Security (CRoCS) at Masaryk University, Brno, Czech Republic by Martin Ukrop, Pavol Žáčik, Marián Svitek, Eric Valčík with the help of Michaela Balážová and Matěj Grabovský. For more details, see the ReadMe file in {% include icon.html icon="github" %}the project repository on GitHub.
9 |The authors are grateful for the financial support by Red Hat Czech and Kiwi.com. 10 |
In addition to this guide, we have also implemented OpenSSL guides for the following topics:
4 | {% else %} 5 | Back to {{ include.library.title }} guide 6 | {% endif %} 7 | {% assign subGuides = site.guides | where: "library", include.library.name %} 8 | {% for subGuide in subGuides %} 9 | {% if subGuide.slug != page.slug %} 10 | {{ subGuide.title-short }} 12 | {% endif %} 13 | {% endfor %} 14 |The source code from all guides is also available as a stand-alone CLI client with options to test multiple revocation schemes:
15 | TLS client source code 16 |Our goal is to simplify the ecosystem by consolidating the errors and their documentation (similarly to web documentation) and better explaining what the validation errors mean.
5 |Correctly validating X.509 certificates turns out to be pretty complicated (e.g., Georgiev2012, Ukrop2019). Yet certificate validation is crucial for secure communication on the Internet (think TLS).
7 |For every error, we aim to provide our redesigned documentation ({% include icon.html icon="our-docs" %}), an example certificate ({% include icon.html icon="certificate" %}), original documentation provided by the library ({% include icon.html icon="docs-book" %}, unused or deprecated errors denoted by {% include icon.html icon="unused" %}). Furthermore, we provide links to corresponding errors from other libraries ({% include icon.html icon="error-link" %}). In the future, we plan on adding error frequencies based on IP-wide scans and elaborating on the consequences of individual errors.
8 |9 | 10 | See more in FAQ 11 | 12 |
13 |16 | 19 | {% assign guides = site.guides | where: "slug", page.library %} 20 | {% for guide in guides %} 21 | {% assign library = site.data.libraries | where: "name", page.library | first %} 22 | See TLS guide for {{ library.title }} 23 | {% endfor %} 24 |
25 |