Langsam ist nicht Java an sich, sondern die Implementierung der Schlüssel. Zumal In Java IMHO erst mit Java9 (wenn es denn mal kommt) auch die Möglichkeit geschaffen wurde, die in die CPU gegossenen Methoden einiger Verschlüsselungstypen zu nutzen. Bis dato musst alles weitestgehend in Software umgesetzt werden. Dadurch ist es prinzipbedingt sicher langsamer als in anderen Sprachen, und gleichzeitig auch Resourcenintensiver.
(Ich musste mal einen Lasttest machen, der ziemlich krasse (und viele) Verschlüsselungen machen musste und dadurch vergleichbar viel Hardware für die gewünschten Userzahlen benötigte, wo ich sonst mit nur einem PC hinkomme.)
Verschlüsselung in Java als per se unmöglich darzustellen ist falsch und die hier entbrannte Diskussion dürfte den TO reichlich verunsichert haben.
Es ist eben wichtig, dass das entschlüsseln nur mit private Keys auf Empfängerseite gemacht wird (z.B. das genannte PKCS12 und egalob Client oder Server). Das einzige Kriterium ist, wie generell bei asymetrischen Verschlüsselungen, dass dem Programm, das für den Empfänger verschlüsselt, nur den Public Key kennt. Damit ist, solange das Verfahren nicht geknackt wurde, Verschlüsselung in jeder belieben Sprache möglich (wenn die Verfahren korrekt implementiert sind).
In oben genannten Lasttest verwendeten wir ein SDK, das speziell für Android geschrieben wurde und welches ein Dummy-Zertifikat für die Registrierung verwendet und über SCEP die eigentliche Generierung des Client-Zertifikats eigentlichen und die anschliessende Signierung durch den Server abwickelt.
Alle weitere Kommunikation findet dann über das lokale Zertifikat statt, von dem der Server nur den Public Key kennt.
In dem Lasttest (im Bankensektor) musste dann noch zusätzlich zu dem der eigentliche "spannende" Traffic über einen SOAP-WS mit Web-Service-Security erstellt und über HTTPS übertragen werden (Vorgabe im Bankenwesen, wenn Kreditkarten-Daten involviert sind: Verschlüsselung des Cotnent (WSS) und des Transports (HTTPS)) - das hat die Lastgeneratoren reichlich in die Knie gezwungen, weil hier eben die Performance in Java nicht so gut ist. Aber eben: Die Performance, nicht die Verschlüsselung an sich.