I would like to bind the public key of the root CA ...
A simple way to get rid of a bicycle, but it is probably safer to bind a certificate or public key of a server or service, rather than a root or intermediate certificate. This is especially true if you use a public CA, such as DigiCert or Verisign (as opposed to a private, corporate CA).
In the case of an open CA, the CA may incorrectly issue a second certificate, and clients will not be able to distinguish between a "real" certificate (the one that was issued to you) and a "fake" certificate (one that is issued incorrectly). This has happened in real life several times, so you should expect it to happen again.
Is it better to bind a public key or subjectPublicKeyInfo? Can someone please explain to me which method is better and why?
It is better to connect the public key (at least in case of binding the server certificate).
Some organizations, such as Google, rotate their server certificates every 30 days or so. However, they re-confirm the same public key. See, for example, Android 4.2 and Pinning . This means that you will observe “key continuity”, but not “certificate continuity”.
Recertification of the same public key is why CertPatrol in some cases works so poorly in the user interface. We really need a public key patch in cases like Google services.
jww
source share