Texte mit .pem datei Verschlüsseln

  • Themenstarter Themenstarter ambarek
  • Beginndatum Beginndatum
A

ambarek

Gast
Ich habe mir php eine .pem Zertifikats datei erstellt sie ungefähr wie diese aussieht:
Code:
----BEGIN CERTIFICATE REQUEST-----

Irgend ein Zeichenwirwar

-----END CERTIFICATE REQUEST-----
-----BEGIN CERTIFICATE-----

Irgend ein Zeichenwirwar

-----END CERTIFICATE-----
-----BEGIN ENCRYPTED PRIVATE KEY-----

Irgend ein Zeichenwirwar

-----END ENCRYPTED PRIVATE KEY-----


Mit dieser kann ich via php Texte verschlüsseln und wieder entschlüsseln. Dies will ich jetzt auch in Java. wie funktioniert das? Und wie?
 
Aber mal auf Wikipedia unter X.509 nachgelesen hast du nicht oder ?
X.509 ? Wikipedia
.PEM – Base64-kodiertes Zertifikat, umschlossen von „-----BEGIN CERTIFICATE-----“ und „-----END CERTIFICATE-----“
Dessweiter kann man ".PEM" sogar anwählen -> Privacy Enhanced Mail ? Wikipedia
Das PEM-Zertifikat-Format ist also eigentlich für E-Mails bestimmt und nicht für den "groben Hausgebrauch um mal eben was zu verschlüsseln".
Dafür gibt es spezielle andere Zertifikats-Typen (komm bitte nicht auf die Idee einfach ein SSL-Zertifikat zu nutzen, würde zwar am Ende auch irgendwie funktionieren, ist aber nicht dafür gedacht).


Wenn es jetzt erstmal um das eigentlich Verschlüsseln mit Java geht schau dir mal die Klasse [japi]Cipher[/japi] sowie alle von dort verlinkten Klassen an. Ich denke damit wirst du schneller zum Ziel kommen als mit irgendwelchen X.509 Zertifikaten rumzuspielen die garnicht für das gedacht sind was du eigentlich vorhast.
 
Danke, ich brauchte eigentlich nur ne methode wie ich etwas mit private/Public Key verschlüsseln kann und am besten das es mit Java und php funktioniert. Zur Not auch nur java. Gibt es so was?
 
Moin,

X.509 beschreibt einfach den Aufbau des Zertifikates. PEM ist lediglich ein Dateiformat, unter anderem, auch zum Schlüsselaustausch.

Da Du aber lediglich verschlüsseln willst, ist das unwichtig. Für ein asymmetrisches Verschlüsselungsverfahren benötigst Du lediglich den privaten Schlüsselteil (ist in "BEGIN ENCRYPTED PRIVATE KEY" enthalten) sowie den öffentlichen Schlüsselteil (ist in "BEGIN CERTIFICATE" enthalten). Das Zertifikatsrequest ist lediglich für die CA wichtig, nach der Ausstellung des Zertifikates kann das Request gelöscht werden.

Du kannst die beiden Schlüsselkomponenten also entweder aus Deiner PEM-Datei ziehen, oder per Java neu erzeugen lassen ([c]java.security.KeyFactory[/c]). Wenn Du mit anderen Diensten interagieren willst, z.B. eben PHP oder verschlüsselte Emails, dann ist es wahrscheinlich sinnvoller, die Schlüssel aus der PEM-Datei zu nutzen.

Die einzige Problematik dabei ist die Verwendung des privaten Schlüsselteils, da dieser nicht unbedingt in sauberem PKCS8 vorliegt. Die normale Java API kann jedoch nur PKCS8. Also muss der private Schlüsselteil entweder extern in sauberes PKCS8 überführt werden (z.B. mit openssl) oder eine Bibliothek eingebunden werden, welche beim Einlesen des privaten Schlüsselteils flexibler ist (z.B. bouncycastle.org).

Mit der Java API sieht das verschlüsseln / entschlüsseln dann etwa so aus: Klick

Viele Grüße,
Fancy
 
Ich habe hier mal eine test datei erstellt. Wie ver/ent schlüssele ich damit etwas?

Code:
BEGIN CERTIFICATE REQUEST----- MIIBszCCARwCAQAwczELMAkGA1UEBhMCREUxCzAJBgNVBAgMAkRFMQ0wCwYDVQQH DARUZXN0MQ0wCwYDVQQKDARUZXN0MQ0wCwYDVQQLDARUZXN0MQ0wCwYDVQQDDARU ZXN0MRswGQYJKoZIhvcNAQkBFgx0ZXN0QHRlc3QuZGUwgZ8wDQYJKoZIhvcNAQEB BQADgY0AMIGJAoGBAKBfa1sI5OboJhrz3ApLGSNit3jZ/zL0LFFLx1MR4Qz4Wa78 698JjbrkpiTJEOk+ZaROs4a6FO7ZlM3BjPpCuo6Tj8jGtGyfWS1pyO2l8KMCld8w xAEajBcx7mAmXgid2dPF2K44+hBDjaK2Yhsxu9Yls0qCkpukG+UnVfvO3ebrAgMB AAGgADANBgkqhkiG9w0BAQQFAAOBgQBAWzc3/aCJtLPtfSlbzY8tBjjE8FBVVVws xmvGNpEkWfga65yLa/J+d3IfK76mNCOlO7TGEMFnWrtSpFwcxVBHS6/m2EDVXCUE Xr4C3yTWPFvj91ce2K36TCZRYMBMT9nuixB2JpNQQaJfJU5+vWJ4JyDFHhzzcZx1 4czSlYhBoA== -----END CERTIFICATE REQUEST----- " string(989) "-----BEGIN CERTIFICATE----- MIICrDCCAhWgAwIBAgIBADANBgkqhkiG9w0BAQQFADBzMQswCQYDVQQGEwJERTEL MAkGA1UECAwCREUxDTALBgNVBAcMBFRlc3QxDTALBgNVBAoMBFRlc3QxDTALBgNV BAsMBFRlc3QxDTALBgNVBAMMBFRlc3QxGzAZBgkqhkiG9w0BCQEWDHRlc3RAdGVz dC5kZTAeFw0xMjA2MzAxNjI4NTVaFw0xMjA3MTQxNjI4NTVaMHMxCzAJBgNVBAYT AkRFMQswCQYDVQQIDAJERTENMAsGA1UEBwwEVGVzdDENMAsGA1UECgwEVGVzdDEN MAsGA1UECwwEVGVzdDENMAsGA1UEAwwEVGVzdDEbMBkGCSqGSIb3DQEJARYMdGVz dEB0ZXN0LmRlMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCgX2tbCOTm6CYa 89wKSxkjYrd42f8y9CxRS8dTEeEM+Fmu/OvfCY265KYkyRDpPmWkTrOGuhTu2ZTN wYz6QrqOk4/IxrRsn1ktacjtpfCjApXfMMQBGowXMe5gJl4IndnTxdiuOPoQQ42i tmIbMbvWJbNKgpKbpBvlJ1X7zt3m6wIDAQABo1AwTjAdBgNVHQ4EFgQUSRDCR/Af CIhlQmJgojnV7MjwoFYwHwYDVR0jBBgwFoAUSRDCR/AfCIhlQmJgojnV7MjwoFYw DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQApU2+xbwFCB+zWDljBdvnb IjN27kOGBRyyhEgjeorLHpdUuKnGVVTmqju+/MBYByyhXd8XWEl7TW++JlJ8Ml93 uXj4vhDCZjKpsF0Ej35sCnfM4loRuInlCZj/iivEHzq5jeHElyag8w2UO68Tx46b R41HZRXqlXTWujVjLnl3Zg== -----END CERTIFICATE----- " string(1041) "-----BEGIN ENCRYPTED PRIVATE KEY----- MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIFerIrgXHWyICAggA MBQGCCqGSIb3DQMHBAhybssRfBCc7QSCAoCTrxnKelRjkgbFsRoGJDduDZnExF2a rD/uQswQvoITeQ8PaQDO+FL2iw75sREptPwrntkfhJfFA3QjjI2+TDm2mrS6aEtX NlVINE8KkY06GGpcVNYdt/Hzy/h129ANXYNADtblchNM0DoACwoxUdef1Wr5exF2 CCIHxWygMPB03nPrRhqOPmhbAqdvtearZCsLRjOAjg/NMtUIxN8Caz+3m1JuYr1s SQ98qfc9rBqX0aSWkxf6qEZUh0w1e/Ckmgs0MdgsXagHirDzJjjXHyXH5TjRHTR2 VbpDkBgYEg98JnQXvaAqZ2BuIM1Yh1AE2sJZvWqhx+Qg85ys/nJb3bLQj06OP56A BdV5oMshBoCrGwcQyVQd18jXqa/Ucb4ieyPRliXXM0AGyE+MEWvJCa2H8oJnr1IM oECOXOOZIIJjLJ+aVm7QNMF64kKHmZvS8iwmXZUSef077ms+T52nkP+xlh1jcgZ1 OvkIvl72tIMomxP/Mhd6j3Ygb9DJHDCTzx+OtETaAKiQgiJDFZlpH/jcoMa0nhK6 N5bCa6ItOjuKmPiZMImoyigxUbBe+PP65l64zF8dpWSTD0157IqAOy/cF2tjJ/sz WfcPcU7OeylZLZ8RiwhkhchM4ylXCoV7mC8r106REixkQ/6n8M/3zPh8li7KGH9b TCkO0cRcuaoA6x0aE8WjwA1mjwYiXQPuxJg8OyRmM9dZiOT98yi7H20g2Nntt2Zx ES4h/r8Y+yiU4Q5GMrnfGlyB10DIarWHH3fsdjtk+DVZj9W7M8SZLsOUbAB+roSp 8vKP3VNmuxH6mKoksmTWL2kXJ4mYepV2UL7uPnaKyu7fcBkWdBxBvIc2 -----END ENCRYPTED PRIVATE KEY----- " Fertig, in Datei user.pem wurde -----BEGIN CERTIFICATE REQUEST----- MIIBszCCARwCAQAwczELMAkGA1UEBhMCREUxCzAJBgNVBAgMAkRFMQ0wCwYDVQQH DARUZXN0MQ0wCwYDVQQKDARUZXN0MQ0wCwYDVQQLDARUZXN0MQ0wCwYDVQQDDARU ZXN0MRswGQYJKoZIhvcNAQkBFgx0ZXN0QHRlc3QuZGUwgZ8wDQYJKoZIhvcNAQEB BQADgY0AMIGJAoGBAKBfa1sI5OboJhrz3ApLGSNit3jZ/zL0LFFLx1MR4Qz4Wa78 698JjbrkpiTJEOk+ZaROs4a6FO7ZlM3BjPpCuo6Tj8jGtGyfWS1pyO2l8KMCld8w xAEajBcx7mAmXgid2dPF2K44+hBDjaK2Yhsxu9Yls0qCkpukG+UnVfvO3ebrAgMB AAGgADANBgkqhkiG9w0BAQQFAAOBgQBAWzc3/aCJtLPtfSlbzY8tBjjE8FBVVVws xmvGNpEkWfga65yLa/J+d3IfK76mNCOlO7TGEMFnWrtSpFwcxVBHS6/m2EDVXCUE Xr4C3yTWPFvj91ce2K36TCZRYMBMT9nuixB2JpNQQaJfJU5+vWJ4JyDFHhzzcZx1 4czSlYhBoA== -----END CERTIFICATE REQUEST----- -----BEGIN CERTIFICATE----- MIICrDCCAhWgAwIBAgIBADANBgkqhkiG9w0BAQQFADBzMQswCQYDVQQGEwJERTEL MAkGA1UECAwCREUxDTALBgNVBAcMBFRlc3QxDTALBgNVBAoMBFRlc3QxDTALBgNV BAsMBFRlc3QxDTALBgNVBAMMBFRlc3QxGzAZBgkqhkiG9w0BCQEWDHRlc3RAdGVz dC5kZTAeFw0xMjA2MzAxNjI4NTVaFw0xMjA3MTQxNjI4NTVaMHMxCzAJBgNVBAYT AkRFMQswCQYDVQQIDAJERTENMAsGA1UEBwwEVGVzdDENMAsGA1UECgwEVGVzdDEN MAsGA1UECwwEVGVzdDENMAsGA1UEAwwEVGVzdDEbMBkGCSqGSIb3DQEJARYMdGVz dEB0ZXN0LmRlMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCgX2tbCOTm6CYa 89wKSxkjYrd42f8y9CxRS8dTEeEM+Fmu/OvfCY265KYkyRDpPmWkTrOGuhTu2ZTN wYz6QrqOk4/IxrRsn1ktacjtpfCjApXfMMQBGowXMe5gJl4IndnTxdiuOPoQQ42i tmIbMbvWJbNKgpKbpBvlJ1X7zt3m6wIDAQABo1AwTjAdBgNVHQ4EFgQUSRDCR/Af CIhlQmJgojnV7MjwoFYwHwYDVR0jBBgwFoAUSRDCR/AfCIhlQmJgojnV7MjwoFYw DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQApU2+xbwFCB+zWDljBdvnb IjN27kOGBRyyhEgjeorLHpdUuKnGVVTmqju+/MBYByyhXd8XWEl7TW++JlJ8Ml93 uXj4vhDCZjKpsF0Ej35sCnfM4loRuInlCZj/iivEHzq5jeHElyag8w2UO68Tx46b R41HZRXqlXTWujVjLnl3Zg== -----END CERTIFICATE----- -----BEGIN ENCRYPTED PRIVATE KEY----- MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIFerIrgXHWyICAggA MBQGCCqGSIb3DQMHBAhybssRfBCc7QSCAoCTrxnKelRjkgbFsRoGJDduDZnExF2a rD/uQswQvoITeQ8PaQDO+FL2iw75sREptPwrntkfhJfFA3QjjI2+TDm2mrS6aEtX NlVINE8KkY06GGpcVNYdt/Hzy/h129ANXYNADtblchNM0DoACwoxUdef1Wr5exF2 CCIHxWygMPB03nPrRhqOPmhbAqdvtearZCsLRjOAjg/NMtUIxN8Caz+3m1JuYr1s SQ98qfc9rBqX0aSWkxf6qEZUh0w1e/Ckmgs0MdgsXagHirDzJjjXHyXH5TjRHTR2 VbpDkBgYEg98JnQXvaAqZ2BuIM1Yh1AE2sJZvWqhx+Qg85ys/nJb3bLQj06OP56A BdV5oMshBoCrGwcQyVQd18jXqa/Ucb4ieyPRliXXM0AGyE+MEWvJCa2H8oJnr1IM oECOXOOZIIJjLJ+aVm7QNMF64kKHmZvS8iwmXZUSef077ms+T52nkP+xlh1jcgZ1 OvkIvl72tIMomxP/Mhd6j3Ygb9DJHDCTzx+OtETaAKiQgiJDFZlpH/jcoMa0nhK6 N5bCa6ItOjuKmPiZMImoyigxUbBe+PP65l64zF8dpWSTD0157IqAOy/cF2tjJ/sz WfcPcU7OeylZLZ8RiwhkhchM4ylXCoV7mC8r106REixkQ/6n8M/3zPh8li7KGH9b TCkO0cRcuaoA6x0aE8WjwA1mjwYiXQPuxJg8OyRmM9dZiOT98yi7H20g2Nntt2Zx ES4h/r8Y+yiU4Q5GMrnfGlyB10DIarWHH3fsdjtk+DVZj9W7M8SZLsOUbAB+roSp 8vKP3VNmuxH6mKoksmTWL2kXJ4mYepV2UL7uPnaKyu7fcBkWdBxBvIc2 -----END ENCRYPTED PRIVATE KEY-----
 
Das Einlesen des Zertifikates und das Verschlüsseln geht genau so, wie in meinem obrigen Beispiel gezeigt.

Allerdings ist der private Schlüsselteil in Deinen Testdaten mit einer Passphrase versehen. Da Du diese aber nicht angegeben hast, ist ein Zugriff auf den privaten Schlüsselteil nicht möglich. Ich kann so nicht sagen, ob der private Schlüsselteil in standardkonformen PKCS8 vorliegt.

Ansonsten geht es aber genau so, wie es oben in meinem Beispiel verlinkt ist. Der dort im Kommentar angegebene openssl Befehl ist dabei nicht nur in der Lage den privaten Schlüsselteil in PKCS8 umzuwandeln (falls notwendig), sondern kann auch ggf. die Passphrase entfernen (natürlich muss diese bei der Umwandlung angegeben werden). (Oder ggf. beim Einlesen des privaten Schüsselteils die Passphrase berücksichtigen.)

Viele Grüße,
Fancy
 

Zurück
Oben