On 1/21/2019 7:06 PM, Weijun Wang wrote:

On Jan 22, 2019, at 10:33 AM, Xuelei Fan <xuelei....@oracle.com> wrote:

On 1/21/2019 4:38 PM, Weijun Wang wrote:
So what do you think of my original webrev? It only compares KID and 
subject/issuer, not caring about other extensions (like BC).
The original webrev looks right to me except that I'm  not sure if a new 
AuthorityKeyIdentifierExtension was needed.  Is it sufficient to use the octet 
string of the DER value?
The struct of AuthorityKeyIdentifier and SubjectKeyIdentifier is a little 
different. By using the AuthorityKeyIdentifierExtension class, I don't need to 
extract the field myself.

    AuthorityKeyIdentifier ::= SEQUENCE {
       keyIdentifier             [0] KeyIdentifier           OPTIONAL,
       authorityCertIssuer       [1] GeneralNames            OPTIONAL,
       authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL  }

   SubjectKeyIdentifier ::= KeyIdentifier

and since getExtensionValue() returns the extension value encoded as an OCTET 
STRING, I will also need to extract the content inside.

I also cannot call the X509CertImpl methods directly because it's only 
X509Certificate here.

I see.  Thanks!


It may need to selectors to use the X509CertSelector, for issuers w/o AKID. I 
will leave it to you for the final decision.
I'll either need to go thru all certs twice or remember the fallback one like 
what I did in the current loop. It doesn't make much difference.

I meant to use the certs one time.

for (X509Certificate cert : allCerts) {

   if (cert has SKID) {

     // use the selector with SKID

  } else {

    // use the selector without SKID

 }

}

The benefit is limited as you have to construct the AKID.

I'm fine and have no more comments if you want to go with webrev.00.

Xuelei


Thanks,
Max

Xuelei

Thanks,
Max


On Jan 22, 2019, at 1:39 AM, Xuelei Fan <xuelei....@oracle.com>
  wrote:


but it seems it cannot deal with the case where a cert has the correct subject 
but no SKID extension. Or do you think this should never happen?

It could happen, especially for self-signed cert.  See also, the 
sun.security.provider.certpath.ForwardBuilder#PKIXCertComparator.
Xuelei
On 1/21/2019 2:05 AM, Weijun Wang wrote:

;

but it seems it cannot deal with the case where a cert has the correct subject 
but no SKID extension. Or do you think this should never happen?

Thanks
Max


On Jan 17, 2019, at 11:41 AM, Weijun Wang <weijun.w...@oracle.com>
  wrote:

I'll take a look. I thought java.security.cert.X509CertSelector is used by 
CertPath validators and builders internally and never thought it can be called 
directly.

Thanks,
Max


On Jan 17, 2019, at 1:49 AM, Xuelei Fan <xuelei....@oracle.com>
  wrote:

Hi Max,

I did not look into the detailed implementation of findIssuer() yet. Have you 
considered to use java.security.cert.X509CertSelector?

Thanks,
Xuelei

On 1/9/2019 6:59 AM, Weijun Wang wrote:

Please take a review at
https://cr.openjdk.java.net/~weijun/8215776/webrev.00/

PKCS12KeyStore now can find certificate issuers more precisely using 
SubjectKeyIdentifier and AuthorityKeyIdentifier. I thought about using CertPath 
builder or checking signatures but those changes are too much.
Thanks,
Max

Reply via email to