How can I print the public key info of an EC certificate in Java without reverting to calling openssl?
When I print an EC certificate using openssl I get something like the following:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: ecdsa-with-SHA256
Issuer: C = US, ST = CA, L = PA, O = BC, OU = VCF, CN = no-ku-test-host
Validity
Not Before: Feb 23 17:58:00 2024 GMT
Not After : Feb 23 17:58:00 2124 GMT
Subject: C = US, ST = CA, L = PA, O = BC, OU = VCF, CN = no-ku-test-host
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
pub: <<
04:7a:ef:a5:53:5a:f7:a4:15:a9:ca:5a:63:6b:c9: <<
f7:d3:1a:22:c0:71:df:01:dc:ff:62:c8:aa:97:f6: <<
66:52:a4:31:08:d2:a5:5b:d5:6e:54:25:fc:89:d3: <<
0c:c2:95:1c:94:a6:96:e7:e8:b2:5e:fc:f7:48:5d: <<
42:3a:ca:81:79 <<
ASN1 OID: prime256v1
NIST CURVE: P-256
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
X509v3 Extended Key Usage:
TLS Web Client Authentication
Signature Algorithm: ecdsa-with-SHA256
30:46:02:21:00:e1:e7:ad:57:e6:f8:ad:50:d2:0e:5d:b3:8b:
62:31:9c:95:d3:48:d6:c9:ba:89:20:89:4f:c8:1e:1d:86:a7:
a6:02:21:00:a4:c2:5a:e0:d6:34:27:ed:dc:d7:05:4d:43:a9:
77:0b:90:15:26:c8:3c:95:df:c4:2f:5d:53:6a:87:21:43:e5
I know how to read and parse the PEM in Java and obtain the ECPublicKey object. In it it has an ECParameter containing its ECPoint object. But how do I get the 64-byte public-key info marked above as printed by openssl from all this information?
I want to avoid having to call openssl from Java to get to this information. It seems it must be possible somehow, doing some computation on the data in the above data-structures.
Here is the PEM for the above certificate:
-----BEGIN CERTIFICATE-----
MIIBzDCCAXGgAwIBAgIBATAKBggqhkjOPQQDAjBcMQswCQYDVQQGEwJVUzELMAkG
A1UECBMCQ0ExCzAJBgNVBAcTAlBBMQswCQYDVQQKEwJCQzEMMAoGA1UECxMDVkNG
MRgwFgYDVQQDEw9uby1rdS10ZXN0LWhvc3QwIBcNMjQwMjIzMTc1ODAwWhgPMjEy
NDAyMjMxNzU4MDBaMFwxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTELMAkGA1UE
BxMCUEExCzAJBgNVBAoTAkJDMQwwCgYDVQQLEwNWQ0YxGDAWBgNVBAMTD25vLWt1
LXRlc3QtaG9zdDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHrvpVNa96QVqcpa
Y2vJ99MaIsBx3wHc/2LIqpf2ZlKkMQjSpVvVblQl/InTDMKVHJSmlufosl7890hd
QjrKgXmjIjAgMAkGA1UdEwQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwIwCgYIKoZI
zj0EAwIDSQAwRgIhAOHnrVfm+K1Q0g5ds4tiMZyV00jWybqJIIlPyB4dhqemAiEA
pMJa4NY0J+3c1wVNQ6l3C5AVJsg8ld/EL11TaochQ+U=
-----END CERTIFICATE-----