High memory usage / leaks was: Best mailing list for JVM embedding

Sean Mullan sean.mullan at oracle.com
Thu Jan 24 15:05:47 UTC 2019


On 1/24/19 8:25 AM, Robert Marcano wrote:
> On 1/23/19 8:59 AM, Sean Mullan wrote:
>> On 1/22/19 8:50 PM, Bernd Eckenfels wrote:
>>> I don’t think the launcher is doing this, it is the class loader, 
>>> that’s nothing new. You can turn on verbose security debug to see it 
>>> in all versions.
>>
>> Yes, and it only verifies the signature(s) on the JAR. It doesn't 
>> validate the certificate chain.
>>
>> --Sean
> 
> I noticed that trying to identify the higher memory usage after what 
> looks like a big application is loaded. I am doing memory profiling and 
> notice JarFile taking more memory that on Java 8. Still need to detect 
> the real cause for an independent test case. We probably didn't notice 
> this slowdown before because Oracle's JNLP implementation was slow 
> enough at startup.
> 
> IMHO the class library should not do doing signature checks without 
> certificate validation, because it doesn't give any protection if the 
> signature is not verified, the only thing it could do now is to detect 
> some random bit flips, that maybe the Zip format CRC detect before that. 
> With no certificate verification the signature could be replaced by 
> anybody with bad intentions.

It's a fair point, although since URLClassLoader is a subclass of 
SecureClassLoader the certificate chain does get populated into the 
CodeSource of the classes loaded, so one could potentially write a 
custom ClassLoader or additional code to additionally validate the 
certificate chain. Also, keep in mind that validating a certificate 
chain for signed code is not usually sufficient to determine if you 
actually trust who signed the code; some additional policy configuration 
(or UI prompts) are usually required. Also, if you run the application 
with a SecurityManager you can grant the signed JARs additional 
permissions based on who signed the code in an associated policy file, 
see [1] for more info.

> Maybe adding a constructor flag to URLClassloader to pass to JarFile to 
> skip verification and a system property to tell the Java startup code to 
> skip verification of java.class.path (just for compatibility with old 
> code that expect it to be done). There is precedent of other runtimes 
> that added options to disable this, like CLR [1] (Ii not only verified 
> signatures, It do CRL/OSCP checks too)

It's easy enough to strip signatures from JAR files (which you mention 
below). So if this is really an issue, I would be more inclined to just 
do that if it is an option.

> Our new launcher replacing JNLP now do signature verification in native 
> code, at download time, and install on a system area (not user home 
> directory), so signature verification at application launch is a 
> slowdown we want to avoid, but think on another kind of users, those 
> deploying to OS Stores (for example Windows Store), why add the slowdown 
> of verification when the application is verified by the store client at 
> install time?, this could help these situations too.
> 
> Note: This can be avoided removing the signatures of all JARs if you 
> distribute to an OS store, there are a few libraries that distribute 
> their JARs signed (The old Java Help framework comes to my mind right now)
> 
> [1] 
> https://blogs.msdn.microsoft.com/shawnfa/2007/05/07/bypassing-the-authenticode-signature-check-on-startup/ 

--Sean

[1] 
https://docs.oracle.com/en/java/javase/11/security/permissions-jdk1.html#GUID-7450CEFD-8EDC-495E-A7A3-6C2561FA4999


More information about the core-libs-dev mailing list