Search code examples
javaencryptionrsaencryption-asymmetric

What is the certificate in the context of RSA and asymmetric encryption?


I try to implement a asymmetric encription for learning purpose. I learned that a certificate helps to identify the owner of a public key. But how can I implement a certificate? Can you give me an example of a certificate I can use?

I implemented the encryption and decryption, but now i want to use a certificate.


Solution

  • You can generate a self signed X.509 certificate using OpenSSL - there are many tutorials online. Certificates have standardized formats and are not specific to Java.

    openssl req -x509 -newkey rsa:3072 -sha256 -nodes -keyout privkey.pem -out selfsigned.pem
    openssl pkcs8 -in privkey.pem -nocrypt -outform DER -out privkey.p8
    openssl x509 -in selfsigned.pem -outform DER -out selfsigned.crt
    

    This generates two files for the certificate (which contains the public key) and one for the private key. There is also a PEM encoded private key and certificate, which Java does not directly handle. The private key files are not encrypted or otherwise protected, so use this only for testing purposes.

    The certificate is compatible with CertificateFactory for "X.509". The private key is compatible with KeyFactory with "RSA" as algorithm and PKCS8EncodedKeySpec.

    Java itself cannot directly be used when it comes to generating certificates. You can use Bouncy Castle or even EJBCA if in-code generation is required, but that is quite a steep learning curve.