2017-02-06 3 views
1

Mein Kunde erstellt ein Zertifikat in einem Fat Client, so dass er am Ende ein Serverzertifikat und ein individuelles Clientzertifikat verwendet, das nach der Installation der App erstellt wurde. Jetzt validieren sowohl der Client als auch der Server das jeweils andere Zertifikat.AppDevelopment: Create Certificate in App selbst

Ich wurde gefragt, ob dieser Ansatz mit einer iOS- und Android-App möglich ist. Alles, was ich im Internet gefunden habe, ist, dass immer der Server das Zertifikat erstellt und der öffentliche Schlüssel mit der App bereitgestellt wird.

Irgendwelche Vorschläge diesbezüglich? Wird es eine zusätzliche Sicherheitsschicht bieten?

Antwort

0

Mein Kunde erstellt ein Zertifikat in einem Fat-Client, sodass er am Ende ein Serverzertifikat und ein individuelles Clientzertifikat verwendet, das nach der Installation der App erstellt wurde. Jetzt validieren sowohl der Client als auch der Server das jeweils andere Zertifikat.

Irgendwelche Vorschläge diesbezüglich?

Sie haben eines von zwei Modellen zu verwenden (das ist mir bekannt). Im ersten Modell führt die Organisation eine private PKI aus, und der Server gibt die Clientzertifikate aus. Im zweiten Fall gibt der Client seine eigenen Zertifikate aus. Für das erste Modell sollten Sie wahrscheinlich die Simple Certificate Enrollment Protocol (SCEP) verwenden. Es ermöglicht Benutzern und Geräten, sich bei der Organisation oder dem Server zu registrieren. Die Organisation kann die Anmeldung auch mit einem Kennwort schützen und das Kennwort out-of-band (wie E-Mail) senden.

Peter Gutmann übernahm kürzlich die RFC draft. Ich glaube, Microsoft-Anrufe sind etwas anderes, und ihr Server heißt NDES server. Für das zweite Modell sollten Sie wahrscheinlich Origin Bound Certificates (OBC) verwenden. Sie sind "Abreiß" -Zertifikate, die im laufenden Betrieb erstellt werden, wenn der Kunde sie benötigt. Der Server vertraut ihnen bei der ersten Verwendung (TOFU).


Wird es eine zusätzliche Sicherheit bieten?

Kommt drauf an. Wir müssen das Bedrohungsmodell und die vorhandenen Sicherheitskontrollen sehen. Dann müssen wir feststellen, ob SCEP oder OBC zusätzliche Lücken über die bestehenden Kontrollen schließt.

2

Die einfache Antwort ist ja, Sie einen Schlüssel innerhalb einer App erstellen können - es gibt mehr Bibliotheken dies in der Java-Domain zu tun, zum Beispiel, vor allem auf dem Java JCE Api Standard gebaut:

es gibt Optionen, um, wie Sie die Bibliothek und Anbieter verwenden, und es gibt auch Standalone-Kryptographie-Bibliotheken vor allem BouncyCastle, und es ist Android-Derivat SpobgyCastle:

Es gibt eine Antwort hier etwas alt, aber sehr schön ist, die einen guten Hintergrund auf Android gibt: https://stackoverflow.com/a/9965964/334402

Es gibt eine gute Note ist oben in dem Java Cryptography Dokument, auch:

WARNUNG: Der JCA erleichtert die Integration von Sicherheitsfunktionen in Ihre Anwendung. Dieses Dokument behandelt jedoch nicht die Theorie der Sicherheit/Kryptographie über eine elementare Einführung in Konzepte hinaus, die notwendig sind, um die APIs zu diskutieren. Dieses Dokument deckt auch nicht die Stärken/Schwächen bestimmter Algorithmen ab, nicht das Protokolldesign. Kryptographie ist ein fortgeschrittenes Thema, und man sollte eine solide, vorzugsweise aktuelle Referenz konsultieren, um diese Werkzeuge bestmöglich zu nutzen.

Sie sollten immer verstehen, was Sie tun und warum: Kopieren Sie nicht einfach Zufallscode und erwarten Sie, dass es Ihr Nutzungsszenario vollständig löst. Viele Anwendungen wurden bereitgestellt, die erhebliche Sicherheits- oder Leistungsprobleme enthalten, weil das falsche Tool oder der falsche Algorithmus ausgewählt wurde.

Sie werden dies auch in vielen Kryptographie Texten Echo finden - im Wesentlichen ist es zu sagen, dass Ihre Sicherheit wie das schwächste Glied ist nur so stark, und es besteht die Gefahr der Kryptographie zu einer App hinzuzufügen und zu denken, alles ist dann fein.

Ein leicht zu verstehendes Beispiel für den schwächsten Link ist, wenn Sie ein sehr starkes privates/öffentliches Schlüsselpaar generieren, dann aber eine schwache Sicherheit um den privaten Schlüssel herum haben, was es einem Hacker ermöglicht, Ihre Anwendung zu debuggen.