php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 30-04-2009, 13:33
FlowPX
 Registrierter Benutzer
Links : Onlinestatus : FlowPX ist offline
Registriert seit: Apr 2009
Beiträge: 12
FlowPX ist zur Zeit noch ein unbeschriebenes Blatt
Standard OpenSSL Zertifikate prüfen

Schönen guten Tag

Es geht um folgendes Thema.
Ich habe ein CA-Zertifikat mit OpenSSL erstellt, jetzt möchte ich Partnerfirmen auch ein Zertifikat geben.

Es geht um Bibliotheken, welche auf einer PHP Webapplication laufen sollen, diese sollten natürlich wegen der Sicherheit signiert werden.

Mit den Zertifikaten erstellen usw. gibt es keine Probleme... auch anhand dieser Zertifikate die Bibliotheken zu signieren. Auch das prüfen klappt.

Das große Problem ist, wie prüfe ich ob das Zertifikat wirklich ein abkömmling des CA-Zertifikates ist. Es bringt leider ja nichts nur die Daten zuprüfen ob diese mit dem Zertifikat übereinstimmen, wenn das Zertifikat nicht Orginal ist.

Mit freundlichen Grüßen
FlowPX
Mit Zitat antworten
  #2 (permalink)  
Alt 30-04-2009, 20:35
UzumakiNaruto
 Registrierter Benutzer
Links : Onlinestatus : UzumakiNaruto ist offline
Registriert seit: Nov 2004
Beiträge: 642
UzumakiNaruto befindet sich auf einem aufstrebenden Ast
Standard

war mir nicht so das es immer ein schlüsselpaar gibt?? ein eigenes und ein öffentlichen und dabei nur EINS weggibt?
__________________
Gruß
Uzu

private Homepage
Mit Zitat antworten
  #3 (permalink)  
Alt 01-05-2009, 09:39
FlowPX
 Registrierter Benutzer
Links : Onlinestatus : FlowPX ist offline
Registriert seit: Apr 2009
Beiträge: 12
FlowPX ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi UzumakiNaruto

Mit dem Privatenschlüssel werden die Zertifikate singiert. Der öffentliche Schlüssel ist selbst im Zertifikat mit enthalten. Das Problem ist also das herausgegebene Child Zertifikat mit dem Parent Zertifikat zu prüfen.

Das Programm bringt im Umfang das CA-Zertifikat mit. Mit diesem wurden die Child Zertifikate welche geprüft werden sollen signiert.
Aus dem CA-Zertifikat kann ich auch Problemlos einen öffentlichen Schlüssel lesen, genau so wie aus den Child Zertifikaten. Nur wie prüft man jetzt anhand der vorhandenen Daten. Ob das Zertifikat von uns verteilt wurde.

Mit freundlichen Grüßen
FlowPX
Mit Zitat antworten
  #4 (permalink)  
Alt 01-05-2009, 13:51
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Ich habs bisher so verstanden: Du hast ein "Mutterzertifikat", welches du von einer Zertifizierungsstelle hast ausstellen lassen. Nun stellst du selbst "Tochterzertifikate" aus und verteilst sie an Hersteller von Libraries.
Jetzt will so eine Lib deine Applikation verwenden. Die Lib wurde mit einem "Tochterzertifikat" signiert. Du willst prüfen, ob es ein von dir ausgestelltes ist.

Möglichkeit 1: Speichere eine Kopie aller Tochterzertifikate, die du ausstellst. Findest du das Zertifikat einer Lib in deinem Speicher, ist es valide.

Möglichkeit 2: Das "Tochterzertifikat" enthält den Namen der Zertifizierungsstelle (die Mutter) und noch weitere Details. Mit openssl_x509_parse() kannst du da ran und kannst es mit den Daten vergleichen, die du bei der Ausstellung irgendwo gespeichert hast. Aber Vorsicht: Du prüfst hier nicht das Zertifikat, sondern seine Metadaten. Das ist nicht besonders sicher.

Möglichkeit 3: Das "Tochterzertifikat" enthält die digitale Unterschrift der Zertifizierungsstelle (Mutter). Besorge dir das "Mutterzertifikat". In diesem befindet sich der öffentliche Schlüssel dieser Authentifizierungsstelle (der Mutter) mit dem die digitale Unterschrift des "Tochterzertifikates" überprüft werden kann.
Mit Zitat antworten
  #5 (permalink)  
Alt 01-05-2009, 15:09
FlowPX
 Registrierter Benutzer
Links : Onlinestatus : FlowPX ist offline
Registriert seit: Apr 2009
Beiträge: 12
FlowPX ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Genau möglichkeit 3 meine ich. Wie realisiere ich das in php? mit welchen befehlen prüfe ich die? mfg. flowpx
Mit Zitat antworten
  #6 (permalink)  
Alt 01-05-2009, 15:42
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Wenn du die Signatur schon hättest, könntest du sie mit openssl_verify() prüfen. Aber PHP bietet kein Mittel, um die Signatur aus einem Zertifikat zu extrahieren und auch keine Funktion, bei der man das ganze Zertifikat reinsteckt und die Signatur geprüft wird.

Was bleibt dir übrig?
Du kannst openssl auf der Kommandozeile aufrufen (-verify).
Oder du verwendest PEAR::Crypt_RSA.
Oder du extrahierst die Signatur selbst. Dazu brauchst du einen ASN.1 Parser und schließlich openssl_verify().
Mit Zitat antworten
  #7 (permalink)  
Alt 01-05-2009, 18:57
FlowPX
 Registrierter Benutzer
Links : Onlinestatus : FlowPX ist offline
Registriert seit: Apr 2009
Beiträge: 12
FlowPX ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Schon ein bisschen ärgerlich das PHP dafür keine funktion bietet... genau so ist die verify Methode noch Experimentell.

Könnte zwar ein komplett neues System für Zertifikate und Signieren der Libs erstellen. Doch die anderen Zertifikate werden vom System Direkt erkannt und können vom System geöffnet werden. Also die Zertifikate mit OpenSSL bieten schon vorteile.

Naja werd mir mal die vorgeschlagenen Sachen genauer anschauen, aber das ist genau das was ich wissen wollte... Vielen Dank
Mit Zitat antworten
  #8 (permalink)  
Alt 01-05-2009, 21:53
FlowPX
 Registrierter Benutzer
Links : Onlinestatus : FlowPX ist offline
Registriert seit: Apr 2009
Beiträge: 12
FlowPX ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Was ein glück xD

http://www.krisbailey.com/manually-p...ificate-in-php
Also damit kann man das Zertifikat parsen.
Und ich denke im Array liegt an der stelle [0][1][2][1] der "signierte" code part. Jetzt hab ich versucht das zu entschlüssel mit "openssl_public_decrypt" und dem passenden PublicKey.. Aber was heraus kommt ist ein leerer String... Mit einem falschen Key versucht... wieder ein leeren String.

Wie müsste ich jetzt damit weiter vorran gehen, dachte mit dem entschlüsseln mit dem Publickey wäre die sache jetzt dann getan. Nur irgendwie geht das doch nicht so einfach.

Mit freundlichen Grüßen
FlowPX
Mit Zitat antworten
  #9 (permalink)  
Alt 02-05-2009, 12:36
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Original geschrieben von FlowPX
Also damit kann man das Zertifikat parsen.
Und ich denke im Array liegt an der stelle [0][1][2][1] der "signierte" code part.
"Signierter Code Part"? Was soll das sein? Ich kenne den Parser nicht, welcher auf der verlinkten Seite verwendet wird. Du brauchst aber nichts "signiertes" sondern die Signatur.

Zitat:
Jetzt hab ich versucht das zu entschlüssel mit "openssl_public_decrypt" und dem passenden PublicKey.
Und wo hast du den her? Scheint ja nicht das zu sein, was du glaubst.

Ein X.509 Zertifikat enthält u.a.
- den Public Key des Inhabers,
- Angaben zur Gültigkeit,
- den Namen des Inhabers,
- den Namen des Ausstellers und
- die Signatur des Ausstellers.

Bis zu meinem letzten Beitrag dachte ich noch, du möchtest prüfen, ob der Aussteller die o.g. "Mutter" ist. Dazu wolltest/solltest du die Signatur des Ausstellers (Mutter) validieren, nicht den PubKey des Inhabers (Tochter).

Keine Ahnung, wo jetzt die Signatur in diesem Array steckt, das dir der ASN.1 Parser liefert. Irgendwo muss es sein. Vielleicht ist es auch das, was du für den PubKey hältst.
Wenn du die Signatur hast, musst du sie an openssl_verify() verfüttern. Vorher evtl. noch base64_decode()-n.
Mit Zitat antworten
  #10 (permalink)  
Alt 02-05-2009, 13:16
FlowPX
 Registrierter Benutzer
Links : Onlinestatus : FlowPX ist offline
Registriert seit: Apr 2009
Beiträge: 12
FlowPX ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich denke ich drücke mich nur wieder bisschen unverständlich aus... Denke schon wieder zuweit.

Ich hab ein CA-Zertifikat erstellt, davon hab ich den Publickey und den Privatenkey.

Und die Parterfirmen bekommen ein Child Zertifikat was mit dem CA Zertifikat signiert ist.

Jetzt soll geprüft werden, ob das Zertifikat von den Partnerfirmen wirklich von uns herausgegeben wurde.

Du liegst also mit deiner Vermutung total richtig ;-)

Jetzt hab ich versucht die Signatur zu entschlüsseln um zu schauen ob da ein MD5 oder ein SHA1 Hash von dem Zertifikat drin ist, welches sich mit dem PublicKey vom CA-Zertifikat entschlüseln lässt. Da liege ich aber scheinbar mit meiner vermutung falsch.

Mit der verify Methode komm ich gerade nicht weiter, da ich nicht weiß mit was für Informationen ich diese füttern sollte. Publickey vom CA-Zertifikat denk ich mal und die Signatur vom Child Zertifikat. Nur die Methode verlangt auch nach weiteren Daten ($Data in der PHP beschreibung)...

Nur was entspricht $Data? Das Zertifikat ohne Signatur? Das komplette Zertifikat Base64 encoded? und und und ^^

Leider gibt es über das Thema sehr wenig Informationen im Netz.

Mit freundlichen Grüßen
FlowPX
Mit Zitat antworten
  #11 (permalink)  
Alt 02-05-2009, 14:22
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Sehr wenig ist gut, eigentlich gar nichts, was mit PHP zu tun hat.
Ich bin da auch nicht so firm, wie du vielleicht denkst. Hatte dazu mal einen Vortrag im Studium, aber an vieles erinnere ich mich nur sehr wage. Mag mich auch irren ...

openssl_verify ist jedenfalls die einzige PHP-Funktion, die irgendwas mit Signatur zu tun hat. Was da als $data verlangt wird, ist eine gute Frage. Selbstverständlich die Daten, die signiert wurden. Aber das kann ja eigentlich nicht das ganze Child-Zertifikat sein, denn dabei würde sich die Signatur ja selbst enthalten ... Henne-Ei-Problem.

EDIT:
Lies mal http://en.wikipedia.org/wiki/X.509#S...9_certificates
Mit Zitat antworten
  #12 (permalink)  
Alt 02-05-2009, 21:32
FlowPX
 Registrierter Benutzer
Links : Onlinestatus : FlowPX ist offline
Registriert seit: Apr 2009
Beiträge: 12
FlowPX ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Man wird leider nicht Schlau aus der ganzen Sache. Mal schauen vielleicht such ich doch nach einer Alternative demnächts... Oder finde genaue spezifikationen wie das ganze funkioniert. Naja mal schauen.

Aufjedenfall schon einmal Danke für die große Mühe.

Mit freundlichen Grüßen
FlowPX
Mit Zitat antworten
  #13 (permalink)  
Alt 03-05-2009, 13:08
UzumakiNaruto
 Registrierter Benutzer
Links : Onlinestatus : UzumakiNaruto ist offline
Registriert seit: Nov 2004
Beiträge: 642
UzumakiNaruto befindet sich auf einem aufstrebenden Ast
Standard

du willst mit den herausgegebenen zertifikaten ja die ankommenden libs signieren?!?

wie werden den die libs übertragen?
dient die zertifizierung dafür um zu erfahren WOHER die lib kommt?

evtl köntest du den übertragungsweg vom lib hersteller zu euch verschlüsseln .. dann kümmert sich darum der ssh-server, apache server, etc ... je nachdem welcher übertragungsweg benutzt wird.

passen dort die zertifikate nicht zusammen gibt es keine verbindung.
wie beim apache der user zertifikate zur authentifizierung benutzt .. nur wer eins bekommen und im browser importiert hat kann die webseite example.de besuchen

kommt natürlich darauf an wofür das zertifikat wichtig ist.
__________________
Gruß
Uzu

private Homepage
Mit Zitat antworten
  #14 (permalink)  
Alt 03-05-2009, 13:53
FlowPX
 Registrierter Benutzer
Links : Onlinestatus : FlowPX ist offline
Registriert seit: Apr 2009
Beiträge: 12
FlowPX ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Tag

Das System funktioniert so. Der Kunde hat die Webapplication auf seine Server. Das Programm bringt Automatisch eine Liste von möglichen update Servern mit. Will der Kunde jetzt eine bestimmte funktion nach installieren, wird diese vom Server geladen und das Zertifikat geprüft ob der Herausgeber uns bekannt ist.

Genau so kann der Kunde aber in seinem System neue Updateserver hinzufügen, von denen Libs geladen werden können.
Zum Beispiel wenn ein Entwickler für dieses Produkt einen eigenen Update Server betreiben möchte um seine Libs immer aktuell zuhalten.
Doch so können wir keine Sicherheit garantieren, dass das System fehlerfrei und sicher läuft.

Aber man könnte auch Manuell Libs auf den Serverladen, welche man von anderen Quellen bekommen hat.

Und um den Herausgeber genau zu kennen sollte das ganze halt per Zertifikat sein.

Mit freundlichen Grüßen
FlowPX
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:04 Uhr.