Explicitly referencing the Sun JCE provider makes the jdk.crypto.mscapi module 
depend on the java.base module.
And that’s OK.

I can sponsor this changeset.


> On 10 Nov 2015, at 22:39, Mike StJohns <mstjo...@comcast.net> wrote:
> 
> On 11/10/2015 4:12 PM, Langer, Christoph wrote:
>> Hi folks,
>>  
>> is there any feedback/review for this change?
> 
> I missed the 4 Nov message when it came past.  No further objections.  But 
> still unclear if modularization will permit this.
> 
> Mike
> 
>>  
>> Thanks
>> Christoph
>>  
>> From: Langer, Christoph 
>> Sent: Mittwoch, 4. November 2015 12:11
>> To: 'Michael StJohns' <mstjo...@comcast.net> <mailto:mstjo...@comcast.net>
>> Cc: security-dev@openjdk.java.net <mailto:security-dev@openjdk.java.net>
>> Subject: RE: RFR 8139436: sun.security.mscapi.KeyStore might load incomplete 
>> data
>>  
>> Hi Mike,
>>  
>> eventually I’ve made a new webrev implementing your suggestion for a simpler 
>> patch:
>>  
>>  
>> <http://cr.openjdk.java.net/%7Eclanger/webrevs/8139436.1/>http://cr.openjdk.java.net/~clanger/webrevs/8139436.1/
>>  <http://cr.openjdk.java.net/~clanger/webrevs/8139436.1/>
>>  
>> @All: Is that a valid fix for this issue? Would anyone mind to 
>> review/sponsor this?
>>  
>> Thanks
>> Christoph
>>  
>>  
>> From: Michael StJohns [mailto:mstjo...@comcast.net 
>> <mailto:mstjo...@comcast.net>] 
>> Sent: Donnerstag, 15. Oktober 2015 02:09
>> To: Langer, Christoph < 
>> <mailto:christoph.lan...@sap.com>christoph.lan...@sap.com 
>> <mailto:christoph.lan...@sap.com>>
>> Cc: security-dev@openjdk.java.net <mailto:security-dev@openjdk.java.net>
>> Subject: Re: RFR 8139436: sun.security.mscapi.KeyStore might load incomplete 
>> data
>>  
>> Sorry for the top post, I'm wring this on an iPad on a plane.
>>  
>>  
>> It's perfectly acceptable for a provider to prefer its version of stuff over 
>> even something early in the provider list.   Usually, that has more to do 
>> with key material ( for example pkcs11 instantiations), but there's no 
>> reason why it shouldn't apply to certificates.   
>>  
>> Mike
>>  
>>  
>> 
>> Sent from my iPad
>> 
>> On Oct 14, 2015, at 18:35, Langer, Christoph < 
>> <mailto:christoph.lan...@sap.com>christoph.lan...@sap.com 
>> <mailto:christoph.lan...@sap.com>> wrote:
>> 
>> Hi Mike,
>>  
>> thanks for your comments on this.
>>  
>> I agree that the change is quite critical and my approach might not be good. 
>> However, as for your suggestion to specify the sun provider for the 
>> certificate factory, I’d say this is not quite right, too. Because, if you 
>> have loaded a different provider on top of the providers list, you’ll intend 
>> to use its facilities by default. Maybe the idea would be to use the sun 
>> provider as fallback in case of an exception?
>>  
>> The other suggestion to check for certChain.length in 
>> KeyStore.getCertificate and return null would be an improvement compared to 
>> throwing an ArrayIndexOutOfBoundsException – however, it would still be 
>> difficult to find the root cause why a certificate could not be loaded.
>>  
>> What do you think?
>>  
>> @all: Are there other opinions?
>>  
>> Thanks and best regards
>> Christoph
>>  
>> From: security-dev [ 
>> <mailto:security-dev-boun...@openjdk.java.net>mailto:security-dev-boun...@openjdk.java.net
>>  <mailto:security-dev-boun...@openjdk.java.net>] On Behalf Of Mike StJohns
>> Sent: Mittwoch, 14. Oktober 2015 02:17
>> To: security-dev@openjdk.java.net <mailto:security-dev@openjdk.java.net>
>> Subject: Re: RFR 8139436: sun.security.mscapi.KeyStore might load incomplete 
>> data
>>  
>> Hi - 
>> 
>> I took a look and this probably isn't the correct way to fix this. 
>> 
>> A simpler change might be to specify the sun provider when requesting the 
>> certificate factory.    I hesitate to say that definitively as 
>> modularization guidance may restrict that approach?
>> 
>> The belt and suspenders approach is to catch the bad certificate exception 
>> and return null.  That appears to be the correct contract for 
>> KeyStore.getCertificate(String alias).   (e.g. "if (certChain.length == 0) 
>> return null;")
>> 
>> Mike
>> 
>> 
>> On 10/12/2015 5:04 PM, Langer, Christoph wrote:
>> Hi,
>>  
>> please review a change proposal regarding an issue in the Microsoft Security 
>> API (mscapi).
>>  
>> Bug:  
>> <https://bugs.openjdk.java.net/browse/JDK-8139436>https://bugs.openjdk.java.net/browse/JDK-8139436
>>  <https://bugs.openjdk.java.net/browse/JDK-8139436>
>> Webrev:  
>> <http://cr.openjdk.java.net/%7Eclanger/webrevs/8139436.0/>http://cr.openjdk.java.net/~clanger/webrevs/8139436.0/
>>  <http://cr.openjdk.java.net/~clanger/webrevs/8139436.0/>
>>  
>> I stumbled over the issue when using an old IAIK security provider. It would 
>> throw java.security.cert.CertificateException upon parsing ECC based 
>> certificates when generating Certificate objects. The way it is right now, 
>> such exceptions are silently caught and the Windows Keystore is created with 
>> incomplete data. Upon accessing such ECC certificates from the Keystore 
>> object, e.g. when iterating over it, you’ll get exceptions like:
>> Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
>>         at 
>> sun.security.mscapi.KeyStore.engineGetCertificate(KeyStore.java:313)
>>         at 
>> sun.security.mscapi.KeyStore$ROOT.engineGetCertificate(KeyStore.java:60)
>>         at java.security.KeyStore.getCertificate(KeyStore.java:1095)
>> At that point it is not obvious what the real root cause for that is.
>>  
>> With my change, loading of the keystore would already throw like this:
>> java.io.IOException: java.security.KeyStoreException: Exception occurred 
>> generating certificate object for alias DigiCert Assured ID Root G3
>>         at sun.security.mscapi.KeyStore.engineLoad(KeyStore.java:780)
>>         at sun.security.mscapi.KeyStore$ROOT.engineLoad(KeyStore.java:60)
>>         at java.security.KeyStore.load(KeyStore.java:1459)
>>         at 
>> WindowsCertificateReaderTest.main(WindowsCertificateReaderTest.java:18)
>> Caused by: java.security.KeyStoreException: Exception occurred generating 
>> certificate object for alias DigiCert Assured ID Root G3
>>         at sun.security.mscapi.KeyStore.loadKeysOrCertificateChains(Native 
>> Method)
>>         at sun.security.mscapi.KeyStore.engineLoad(KeyStore.java:777)
>>         ... 3 more
>> Caused by: java.security.cert.CertificateException: Error parsing 
>> certificates! iaik.asn1.DerInputException: Next ASN.1 object is no OBJECT 
>> IDENTIFIER!
>>         at iaik.x509.CertificateFactory.engineGenerateCertificates(Unknown 
>> Source)
>>         at 
>> java.security.cert.CertificateFactory.generateCertificates(CertificateFactory.java:462)
>>         at 
>> sun.security.mscapi.KeyStore.generateCertificate(KeyStore.java:869)
>>         ... 5 more
>> This is more obvious when it comes to analyzing such an issue.
>>  
>> Also, I added a property “sun.security.mscapi.ignoreFailingCertificates” 
>> which, when set to true, will cause skipping of certificates that failed 
>> with Exception. That might be a nice workaround option if one is not 
>> particularly interested in a failing certificate.
>>  
>> You can reproduce all this with the test coding in the OpenJDK Bug, the IAIK 
>> provider 3.15 which is downloadable 
>> here:http://jcewww.iaik.tu-graz.ac.at/sic/Download 
>> <http://jcewww.iaik.tu-graz.ac.at/sic/Download> (educational/research 
>> version, needs registration) and ECC certificates in the Windows Root 
>> certificate store.
>>  
>> Would you think this change is reasonable and worthwile?
>>  
>> Thanks & Best regards
>> Christoph
>>  
> 
> 

Reply via email to