For a system with multiple application servers and multiple clients, I would like to introduce mutual authentication as well as other security protections provided by TLS.
The servers and clients may be located on different networks as well as on the same network.
Each entity (client or server) has its own keystore that stores its private/public key pair and a X.509 certificate that wraps the public key. But, at this point, the certificate is self-signed. So, it will not be verified by the other communicating entities. After some research, I've looked at some solutions:
- Creating a private CA that will sign the certificates. If I understand well, the CA's certificate must be present in the truststore of each entity so that certificates of other entities may be verified using the CA's certificate.
- Creating a private CA as the first solution. But, the private CA's certificate is signed by a commercial CA (e.g. Verisign). I don't know what it adds to the previous solution.
- Signing each entity's certificate by a commercial CA. But this solution seems expensive.
- Use of self-signed certificates only. Each entity's certificate is self-signed by it and must be added to the truststore of each entity it wants to communicate with.
It's my first experience with security. Among the solutions that you consider as valid, which one do you recommend?
Thanks