RFR: 8169335: Add a crypto.policy fallback in case Security Property 'crypto.policy' does not exist
Bradford Wetmore
bradford.wetmore at oracle.com
Thu Nov 17 17:46:45 UTC 2016
On 11/17/2016 7:19 AM, Seán Coffey wrote:
> The /policy=<file> jtreg tag was also another possible solution.
That's a policy file, not a java.security file.
SeanM pointed out that we could do a:
@main -Djava.security.properties=xxx
but that would require storing a snapshot of java.security. I think I
prefer it being dynamically generated.
Brad
> regards,
> Sean.
>
>
> On 17/11/2016 01:33, Bradford Wetmore wrote:
>>
>>
>> On 11/16/2016 4:14 PM, Wang Weijun wrote:
>>>
>>>> On Nov 17, 2016, at 6:10 AM, Bradford Wetmore
>>>> <bradford.wetmore at oracle.com> wrote:
>>>>
>>>>
>>>> Current iteration:
>>>>
>>>> http://cr.openjdk.java.net/~wetmore/8169335/webrev.01
>>>>
>>>> Changes:
>>>>
>>>> 1. Using Debug "jca" instead of "policy"
>>>>
>>>> 2. Using debug.println (System.err), as the other jca calls are
>>>> also using it.
>>>
>>> Still have a question:
>>>
>>> Why must both (debug != null) and Debug.isOn("jca") be checked? If
>>> Debug.getInstance("jca") is not null, shouldn't Debug.isOn("jca")
>>> always be true?
>>
>> Ok, I think I've finally figured it out. For namespaces like JSSE and
>> x509, there is a "main" namespace like "ssl" or "x509", and then
>> subnames such as "plaintext" and "ava" which allow for more specific
>> output selection criteria (e.g. ssl/trustmanager). For this case, I
>> don't need to get more specific, so I can skip the isOn.
>>
>> (My first thought was that maybe older versions of the JDK would allow
>> for dynamic changes of the variable, but never saw that kind of code
>> anywhere.)
>>
>>>>
>>>> 3. Added regression test. Strips out any crypto.policy entry to
>>>> create a new file, then uses it.
>>>
>>> Looks fine, but I heard you can use some cool jdk8 classes like
>>>
>>> for (in = Files.lines(input); out = new PrintWriter(output)) {
>>> in.filter(x ->
>>> !x.contains("crypto.policy")).forEach(out::println);
>>> }
>>
>> Or:
>>
>> try (PrintWriter out = new PrintWriter(FILENAME)) {
>> Files.lines(path)
>> .filter(x -> !x.trim().startsWith("crypto.policy"))
>> .forEach(out::println);
>> }
>>
>>
>> Latest at:
>>
>> http://cr.openjdk.java.net/~wetmore/8169335/webrev.02
>>
>> Brad
>>
>>
>>
>>> --Max
>>>
>>>
>>>>
>>>> 4. Updated webrev with bugid/reviewers.
>>>>
>>>> Brad
>>>>
>>>>
>>>>
>>>>
>>>> On 11/16/2016 6:21 AM, Seán Coffey wrote:
>>>>> In the recent jdk8u-dev edits of this file for 8157561, we
>>>>> introduced a
>>>>> debug field based on this key :
>>>>>
>>>>> Debug.getInstance("jca", "Cipher");
>>>>>
>>>>> Can we continue to use 'jca' to be consistent for people upgrading ?
>>>>>
>>>>> for the testcase, I guess you can edit
>>>>> test/javax/crypto/CryptoPermission/TestUnlimited.java but you'll
>>>>> have to
>>>>> launch with a customized java.security file which doesn't have
>>>>> crypto.policy set. (Security.setProperty doesn't allow null values)
>>>>>
>>>>> Regards,
>>>>> Sean.
>>>>>
>>>>> On 16/11/16 00:40, Bradford Wetmore wrote:
>>>>>> Never noticed that before! We have NOT been consistent in whether we
>>>>>> use:
>>>>>>
>>>>>> System.out.println()
>>>>>> or
>>>>>> debug.println()
>>>>>>
>>>>>> I knew SeanC wants to rework the JCA/JCE/Security debugging output in
>>>>>> another project, so I will remove the prefix for now. Thanks for
>>>>>> catching it.
>>>>>>
>>>>>> I will also add a simple regression Test before I push. In hindsight,
>>>>>> it's not as trivial a change as I initially thought. If you want to
>>>>>> review it, I can wait until you are back tomorrow.
>>>>>>
>>>>>> Brad
>>>>>>
>>>>>>
>>>>>> On 11/15/2016 4:12 PM, Wang Weijun wrote:
>>>>>>> You create a debug field with a prefix string and then check both
>>>>>>> debug != null and Debug.isOn("policy") and then use
>>>>>>> System.out.println to print the message. Something must be useless.
>>>>>>>
>>>>>>> --Max
>>>>>>>
>>>>>>>> On Nov 16, 2016, at 3:31 AM, Bradford Wetmore
>>>>>>>> <bradford.wetmore at oracle.com> wrote:
>>>>>>>>
>>>>>>>> Simple codereview:
>>>>>>>>
>>>>>>>> http://cr.openjdk.java.net/~wetmore/8169335/webrev.00
>>>>>>>>
>>>>>>>> The "crypto.policy" Security property is normally
>>>>>>>> defined/configured
>>>>>>>> in the java.security file at build time. (e.g. "limited" or
>>>>>>>> "unlimited") Rather than currently failing catastrophically if this
>>>>>>>> value doesn't exist, there should be a sensible default if it is
>>>>>>>> undeclared for whatever reason. We will use a sane fallback value
>>>>>>>> of "limited".
>>>>>>>>
>>>>>>>> If the distribution has also removed the "limited" policy directory
>>>>>>>> then the VM will still fail to initialize, but we have at least
>>>>>>>> made
>>>>>>>> an effort to recover.
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>>
>>>>>>>> Brad
>>>>>>>>
>>>>>>>
>>>>>
>>>
>
More information about the security-dev
mailing list