{"id":408,"date":"2013-06-10T21:16:23","date_gmt":"2013-06-10T19:16:23","guid":{"rendered":"http:\/\/lkl-it.de\/blog\/?p=408"},"modified":"2013-06-11T00:14:29","modified_gmt":"2013-06-10T22:14:29","slug":"certificate-chaining-prozess-mit-dem-anwendungen-zertifikate-validieren","status":"publish","type":"post","link":"http:\/\/lkl-it.de\/blog\/?p=408","title":{"rendered":"Certificate Chaining \u2013 Prozess mit dem Anwendungen Zertifikate validieren"},"content":{"rendered":"<p>Eine Anwendung muss zun\u00e4chst die G\u00fcltigkeit eines Zertifikats (meist mit Hilfe der Crypto-API des Betriebssystems) genau pr\u00fcfen, bevor sie es sicher verwenden kann.<\/p>\n<p>Der Prozess der Zertifikatsverkettungspr\u00fcfung wird \u00a0dabei in zwei Teilen- durchgef\u00fchrt<\/p>\n<ul>\n<li><em>Aufbau der Certificate Chain<\/em> und<\/li>\n<li><em>Validierung der Certificate Chain<\/em><\/li>\n<\/ul>\n<p><strong>Aufbau der Certificate Chain:<\/strong><\/p>\n<p><span style=\"text-decoration: underline;\">a) Sammeln der Zertifikate f\u00fcr die Kette<\/span><\/p>\n<p>F\u00fcr eine erfolgreiche Zertifikatvalidierung muss sich jedes CA-Zertifikat der zugeh\u00f6rigen Zertifikatkette (von der ausstellenden CA bis zur Root CA) im Zertifikats-Store oder Cache des Clients befinden.<\/p>\n<p>Um die Zertifikate im Cache aufzufinden und in die richtige Ordnung zu bringen, nutzt der Client den Umstand, dass jedes ausgestellte X.509 Zertifikat immer einen Verweis auf die \u00fcbergeordnete Zertifizierungsstelle hat.<\/p>\n<p>Der Client beginnt dann beim zu validierenden Endanwender-Zertifikat und verwendet &#8211; je nachdem welche <em>Extensions<\/em> im Zertifikat bef\u00fcllt sind \u2013 nacheinander verschiedene Abgleichverfahren, die in ihrer Exaktheit differieren, um jeweils das n\u00e4chste \u00fcbergeordnete Zertifikat zu ermitteln<\/p>\n<ol>\n<li><em>Exact Match<\/em>: Erstellt immer eine eindeutige Zuordnung \u00fcber den Namen und die Seriennummer des Zertifikats der \u00fcbergeordneten CA.<\/li>\n<li><em>Key Match<\/em>: Falls Exakt Match fehlschl\u00e4gt, versucht dieses Verfahren eine Zuordnung \u00fcber den Public Key Fingerprint der \u00fcbergeordneten CA.<\/li>\n<li><em>Name Match<\/em>: Falls Key Match fehlschl\u00e4gt, versucht dieses Verfahren eine einfache Zuordnung \u00fcber den Namen der \u00fcbergeordneten CA.<\/li>\n<\/ol>\n<p style=\"text-align: center;\"><a href=\"http:\/\/lkl-it.de\/blog\/?attachment_id=412\" rel=\"attachment wp-att-412\"><img loading=\"lazy\" class=\"wp-image-412 aligncenter\" title=\"AufbauDerCertificateChain\" src=\"http:\/\/lkl-it.de\/blog\/wp-content\/uploads\/AufbauDerCertificateChain1.jpg\" alt=\"AufbauDerCertificateChain\" width=\"471\" height=\"387\" srcset=\"http:\/\/lkl-it.de\/blog\/wp-content\/uploads\/AufbauDerCertificateChain1.jpg 589w, http:\/\/lkl-it.de\/blog\/wp-content\/uploads\/AufbauDerCertificateChain1-300x246.jpg 300w\" sizes=\"(max-width: 471px) 100vw, 471px\" \/><\/a><\/p>\n<p>Falls alle Abgleichmethoden fehlschlagen, um das entsprechende Zertifikat am Client zu finden, wird versucht, \u00fcber die URL (FTP, http, LDAP etc.), die in der <em>Authority Information Access (AIA) Extension <\/em>hinterlegt ist, online die fehlenden Zertifikate in den Cache herunterzuladen. Wenn auch auf diesem Weg keine entsprechenden Zertifikate gefunden werden, schl\u00e4gt die Validierung fehl und das Zertifikat wird als unsicher eingestuft.<\/p>\n<p>Siehe auch <a href=\"http:\/\/lkl-it.de\/blog\/?p=454\" title=\"Zertifikatverkettung und Validierung im Detail\">Zertifikatverkettung und Validierung im Detail<\/a><\/p>\n<p><span style=\"text-decoration: underline;\">b) Finden der vertrauensw\u00fcrdigen CA<\/span><\/p>\n<p>Andernfalls geht der Certificate Chaining Prozess nun \u00fcber die erstellte Zertifikatkette immer solange eine CA Ebene nach oben, bis ein Root- oder Intermediate CA Zertifikat in der Kette gefunden wird, das sich in der Liste der vertrauensw\u00fcrdigen Zertifizierungsstellen der Anwendung befindet.<\/p>\n<p>Wurde ein solcher <em>Trust Anchor <\/em>gefunden \u2013 so wird der Chain Validation Process gestartet. Ist dies dagegen nicht der Fall, so wird das Zertifikat als nicht vertrauensw\u00fcrdig eingestuft.<\/p>\n<p style=\"text-align: left;\"><img loading=\"lazy\" class=\" wp-image-413 aligncenter\" title=\"FindenTrustAnchorChainValidation\" src=\"http:\/\/lkl-it.de\/blog\/wp-content\/uploads\/FindenTrustAnchorChainValidation.jpg\" alt=\"FindenTrustAnchorChainValidation\" width=\"531\" height=\"441\" srcset=\"http:\/\/lkl-it.de\/blog\/wp-content\/uploads\/FindenTrustAnchorChainValidation.jpg 738w, http:\/\/lkl-it.de\/blog\/wp-content\/uploads\/FindenTrustAnchorChainValidation-300x248.jpg 300w\" sizes=\"(max-width: 531px) 100vw, 531px\" \/><span style=\"color: #800080;\">Achtung f\u00fcr viele Chaining Implementierungen kann der Trust Anchor nur eine Root CA sein, daher ein Trust Anchor wie in der Grafik auf der Intermediate CA w\u00e4re dann nicht m\u00f6glich &#8211; dem Endzertifikat w\u00fcrde nicht vertraut!<\/span><\/p>\n<p><strong>Chain Validation:<\/strong><\/p>\n<p>Nun wird vom gefundenen Trust Anchor aus die Zertifikatskette in \u00a0entgegengesetzter Richtung durchlaufen, wobei f\u00fcr jedes Zertifikat folgende Punkte gepr\u00fcft werden:<\/p>\n<ul>\n<li><em>G\u00fcltigkeitszeitraum:<\/em> Das aktuelle Datum muss zwischen dem Beginn und dem Ende der G\u00fcltigkeitsperiode liegen &#8211;\u00a0 ist die Uhrzeit der Rechner im Netzwerk nicht synchron, kann es hier zu gro\u00dfen Problemen kommen<\/li>\n<li><em>Erkennung:<\/em> Das Zertifikat muss dem X.509 Standard entsprechen.<\/li>\n<li><em>Inhalt:<\/em> Erforderliche Attribute, kritische Extensions und evtl. Anwendungsrichtlinien m\u00fcssen korrekt bef\u00fcllt sein.<\/li>\n<li><em>Integrit\u00e4t<\/em>: Ein von einer CA signiertes Zertifikat kann jederzeit auf korrekte Integrit\u00e4t gepr\u00fcft werden.\u00a0 Dabei wird ein Hashwert \u00fcber die Payload des Zertifikats gebildet und dann die Digitale Signatur des Zertifikats mit dem \u00f6ffentlichen Schl\u00fcssel der CA entschl\u00fcsselt. Anschlie\u00dfend wird der entschl\u00fcsselte Hashwert mit dem vorher berechneten verglichen \u2013 stimmen beide Werte \u00fcberein, so ist die Integrit\u00e4t gew\u00e4hrleistet.<\/li>\n<li><em>Sperrpr\u00fcfung \u2013 Certificate Revocation Checking:<\/em> Falls die Anwendung f\u00fcr eine Sperrpr\u00fcfung konfiguriert wurde, pr\u00fcft das System mittels der Seriennummer des Zertifikats die Zertifikatsperrliste CRL, um zu ermitteln, ob das Zertifikat gesperrt wurde. Hat der pr\u00fcfende Client keine aktuelle CRL im Cache, kann er sie \u00fcber die <em>CRL Distribution Point Extension<\/em> <em>(CDP)<\/em>, die im Zertifikat referenziert ist, nachladen. Schl\u00e4gt dies fehl oder ist das Zertifikat auf der Sperrliste, so lehnt die Anwendung das Zertifikat ab<\/li>\n<\/ul>\n<p>Anm.: Alle seit dem letzten Reboot durchgef\u00fchrten Verkettungsprozesse werden im Cache hinterlegt und m\u00fcssen nicht jedes Mal neu durchgef\u00fchrt werden.<\/p>\n<p>Vgl. De Clercq, Jan et al.: \u201eA Guide to Windows Certification &amp; Public Keys\u201c, S.27-30.<br \/>\n<a title=\" Guide to Windows Certification &amp; Public Keys\" href=\"http:\/\/windowsitpro.com\/resources\/guide-windows-certification-and-public-keys\"> Guide to Windows Certification &amp; Public Keys<\/a><br \/>\nVgl. Microsoft Corporation: \u201eImplementieren und Verwalten der Sicherheit in einem Microsoft Windows 2003 Netzwerk (MOC 2238)\u201c, S.2-34\/2-35.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eine Anwendung muss zun\u00e4chst die G\u00fcltigkeit eines Zertifikats (meist mit Hilfe der Crypto-API des Betriebssystems) genau pr\u00fcfen, bevor sie es sicher verwenden kann. Der Prozess der Zertifikatsverkettungspr\u00fcfung wird \u00a0dabei in zwei Teilen- durchgef\u00fchrt Aufbau der Certificate Chain und Validierung der &hellip; <a href=\"http:\/\/lkl-it.de\/blog\/?p=408\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[5,3],"tags":[],"_links":{"self":[{"href":"http:\/\/lkl-it.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/408"}],"collection":[{"href":"http:\/\/lkl-it.de\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/lkl-it.de\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/lkl-it.de\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/lkl-it.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=408"}],"version-history":[{"count":15,"href":"http:\/\/lkl-it.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/408\/revisions"}],"predecessor-version":[{"id":488,"href":"http:\/\/lkl-it.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/408\/revisions\/488"}],"wp:attachment":[{"href":"http:\/\/lkl-it.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=408"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/lkl-it.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=408"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/lkl-it.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=408"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}