<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

	<title>Sean Mullan's Blog</title>
	<link href="http://seanjmullan.org/blog/atom.xml" rel="self"/>
	<link href="http://seanjmullan.org/blog"/>
	<updated>2026-07-21T16:10:15+00:00</updated>
	<id>http://seanjmullan.org/blog</id>
	<author>
		<name>Sean Mullan</name>
	</author>

	
		<entry>
			<title>JDK 26 Security Enhancements</title>
			<link href="http://seanjmullan.org/blog/2026/03/17/jdk26"/>
			<updated>2026-03-17T00:00:00+00:00</updated>
			<id>http://seanjmullan.org/blog/2026/03/17/jdk26</id>
			<content type="html">&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/projects/jdk/26/&quot;&gt;JDK 26&lt;/a&gt; was released on March 17, 2026!
As with my previous &lt;a href=&quot;https://seanjmullan.org/blog/&quot;&gt;blogs&lt;/a&gt;, I
have compiled a list of what I think are the most interesting and useful
security enhancements in this release.  I have also grouped
them into appropriate categories (crypto, TLS, etc) which should make
it easier to find out what has changed in each specific area.
The &lt;a href=&quot;https://jdk.java.net/26/release-notes&quot;&gt;JDK 26 release notes&lt;/a&gt;
also contain further details on these and other enhancements.&lt;/p&gt;

&lt;p&gt;Highlights of this release include a final version of the
&lt;a href=&quot;https://openjdk.org/jeps/524&quot;&gt;PEM API&lt;/a&gt;, API support for Hybrid Public
Key Encryption, and Signed JAR support for the post-quantum ML-DSA algorithm.&lt;/p&gt;

&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of Contents&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#crypto&quot;&gt;Crypto&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#pki&quot;&gt;PKI&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#tls&quot;&gt;TLS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#xml-signature&quot;&gt;XML Signature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#tools&quot;&gt;Tools&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;crypto&quot;&gt;Crypto&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Hybrid Public Key Encryption&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;We have added support for Hybrid Public Key Encryption, or HPKE. HPKE is
a modern encryption scheme for encrypting arbitrary-sized plaintexts with
a recipient’s public key. HPKE is defined in
&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9180.html&quot;&gt;RFC 9180&lt;/a&gt;. It combines 3
different algorithms, a KEM, KDF, and an AEAD (authenticated encryption
with associated data) algorithm to produce a ciphertext.&lt;/p&gt;

    &lt;p&gt;To use HPKE in your applications, you use the existing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cipher&lt;/code&gt; API with
a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HPKEParameterSpec&lt;/code&gt; class which specifies the KEM, KDF, and AEAD
algorithms you want to use.&lt;/p&gt;

    &lt;p&gt;Initially in JDK 26, we only support traditional, non-PQC algorithms.
However, we plan to add support for PQC algorithms in a later JDK release
once the &lt;a href=&quot;https://datatracker.ietf.org/doc/draft-ietf-hpke-pq/&quot;&gt;Internet draft on Post-Quantum and Post-Quantum/Traditional Hybrid Algorithms for HPKE&lt;/a&gt; becomes an RFC.&lt;/p&gt;

    &lt;p&gt;This example from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HPKEParameterSpec&lt;/code&gt; javadoc shows a sender and a
recipient using HPKE to securely exchange messages with an X25519 key pair:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    // Recipient key pair generation
    KeyPairGenerator g = KeyPairGenerator.getInstance(&quot;X25519&quot;);
    KeyPair kp = g.generateKeyPair();

    // The HPKE sender cipher is initialized with the recipient&apos;s public
    // key and an HPKEParameterSpec using specified algorithm identifiers
    // and application-supplied info.
    Cipher senderCipher = Cipher.getInstance(&quot;HPKE&quot;);
    HPKEParameterSpec ps = HPKEParameterSpec.of(
                    HPKEParameterSpec.KEM_DHKEM_X25519_HKDF_SHA256,
                    HPKEParameterSpec.KDF_HKDF_SHA256,
                    HPKEParameterSpec.AEAD_AES_128_GCM)
            .withInfo(HexFormat.of().parseHex(&quot;010203040506&quot;));
    senderCipher.init(Cipher.ENCRYPT_MODE, kp.getPublic(), ps);

    // Retrieve the key encapsulation message (from the KEM step) from
    // the sender.
    byte[] kemEncap = senderCipher.getIV();

    // The HPKE recipient cipher is initialized with its own private key,
    // an HPKEParameterSpec using the same algorithm identifiers as used by
    // the sender, and the key encapsulation message from the sender.
    Cipher recipientCipher = Cipher.getInstance(&quot;HPKE&quot;);
    HPKEParameterSpec pr = HPKEParameterSpec.of(
                    HPKEParameterSpec.KEM_DHKEM_X25519_HKDF_SHA256,
                    HPKEParameterSpec.KDF_HKDF_SHA256,
                    HPKEParameterSpec.AEAD_AES_128_GCM)
            .withInfo(HexFormat.of().parseHex(&quot;010203040506&quot;))
            .withEncapsulation(kemEncap);
    recipientCipher.init(Cipher.DECRYPT_MODE, kp.getPrivate(), pr);

    // Encryption and decryption
    byte[] msg = &quot;Hello World&quot;.getBytes(StandardCharsets.UTF_8);
    byte[] ct = senderCipher.doFinal(msg);
    byte[] pt = recipientCipher.doFinal(ct);

    assert Arrays.equals(msg, pt);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8325448&quot;&gt;JDK-8325448&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;PKCS#12 KeyStore support for RFC 9879: Use of Password-Based Message Authentication Code 1 (PBMAC1)&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The JDK PKCS12 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyStore&lt;/code&gt; implementation now supports the more modern
PBMAC1 algorithm for integrity protection. To use the PBMAC1 algorithm,
set the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keystore.pkcs12.macAlgorithm&lt;/code&gt; property in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security&lt;/code&gt;
configuration file to a PBMAC1 algorithm, for example, “PBEWithHmacSHA256”.
Existing PKCS12 keystore files will continue to use the integrity
algorithm it was created with, but new keystore files will use the PBMAC1
algorithm.&lt;/p&gt;

    &lt;p&gt;In a future JDK release, the default value of the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keystore.pkcs12.macAlgorithm&lt;/code&gt; security property will be changed to a
PBMAC1 algorithm.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8343232&quot;&gt;JDK-8343232&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;JEP 524: PEM Encodings of Cryptographic Objects (Second Preview)&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The second preview API for encoding and decoding cryptographic objects
to/from the PEM format was delivered and defined in
&lt;a href=&quot;https://openjdk.org/jeps/524&quot;&gt;JEP 524&lt;/a&gt;. PEM is a widely used format
for transferring and storing DER-encoded cryptographic data such as
certificates, CRLs, private keys, and more. This was one of the
most commonly requested features in a JCE survey a few years ago.
The History section of the JEP contains a list of changes since the
first preview.&lt;/p&gt;

    &lt;p&gt;There are two primary APIs, a &lt;a href=&quot;https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/security/PEMEncoder.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PEMEncoder&lt;/code&gt;&lt;/a&gt;
class for encoding cryptographic objects to PEM, and a &lt;a href=&quot;https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/security/PEMDecoder.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PEMDecoder&lt;/code&gt;&lt;/a&gt;
class for decoding PEM data into cryptographic objects. Also new is a
marker interface named &lt;a href=&quot;https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/security/DEREncodable.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DEREncodable&lt;/code&gt;&lt;/a&gt;,
and existing classes such as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X509Certificate&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X509CRL&lt;/code&gt;
have been retrofitted to implement this interface, thereby making it easier
to encode/decode these objects to/from PEM.&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PEMEncoder&lt;/code&gt; can also be configured for encryption which makes it easier
to encrypt and encode private keys in one step. Similarly, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PEMDecoder&lt;/code&gt;
can be configured for decryption to allow private keys to be decoded and
decrypted in one step. For more advanced usage, the existing
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/25/docs/api/java.base/javax/crypto/EncryptedPrivateKeyInfo.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;EncryptedPrivateKeyInfo&lt;/code&gt;&lt;/a&gt;
class has been enhanced with several new methods that make it easier
to encrypt and decrypt private keys.&lt;/p&gt;

    &lt;p&gt;Here is an example of encoding an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X509Certificate&lt;/code&gt; retrieved from a
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyStore&lt;/code&gt; to PEM:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    X509Certificate cert = (X509Certificate)keystore.getCertificate(&quot;mycert&quot;);
    PEMEncoder encoder = PEMEncoder.of();
    String pem = encoder.encodeToString(cert);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Here is an example of decoding the PEM back into an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X509Certificate&lt;/code&gt;:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    PEMDecoder decoder = PEMDecoder.of();
    X509Certificate cert = decoder.decode(pem, X509Certificate.class);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Here are two examples of encrypting a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PrivateKey&lt;/code&gt; with a password and
then encoding it into PEM. The first example configures &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PEMEncoder&lt;/code&gt;
for encryption and encrypts and encodes the private key directly in one
method call:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    PEMEncoder encoder = PEMEncoder.of();
    String pem = encoder.withEncryption(password).encodeToString(privateKey);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;The above example uses default parameters when encrypting. This second
example uses the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;EncryptedPrivateKeyInfo&lt;/code&gt; class to encrypt the
private key with additional parameters such as the password-based
encryption algorithm, and then encodes it to PEM:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    EncryptedPrivateKeyInfo epki =
        EncryptedPrivateKeyInfo.encrypt(privateKey, password,
            &quot;PBEWithHmacSHA256AndAES_256&quot;, null, null);
    PEMEncoder encoder = PEMEncoder.of();
    String pem = encoder.encodeToString(epki);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New Security Property to Disable Algorithms at the JCE Layer&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A new security property named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.crypto.disabledAlgorithms&lt;/code&gt; has been
added which can be used to disable cryptographic algorithms at the JCE/JCA
API level. This property takes a list of algorithm names as specified in
the Standard Algorithm Names specification. The security property can be
overridden by a system property of the same name.&lt;/p&gt;

    &lt;p&gt;Initially the property is empty and contains no algorithms.&lt;/p&gt;

    &lt;p&gt;This is a very useful property which allows you to detect usage of
cryptographic algorithms at a comprehensive level across all code in
your application.&lt;/p&gt;

    &lt;p&gt;For more details on the syntax of the algorithm and the JCE services
that are supported, see the definition in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security&lt;/code&gt; configuration
file.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8244336&quot;&gt;JDK-8244336&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Various Performance Improvements&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A number of performance improvements in the AES, ML-DSA and Elliptic Curve
(P256) algorithms were made. See the following issues for more details:&lt;/p&gt;

    &lt;p&gt;Issues: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8371820&quot;&gt;8371820&lt;/a&gt;,
        &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8371450&quot;&gt;8371450&lt;/a&gt;,
        &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8371259&quot;&gt;8371259&lt;/a&gt;,
        &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8365581&quot;&gt;8365581&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Removed Obsolete Algorithms from Implementation Requirements&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The DESede (3DES) algorithms and Cipher algorithms using PKCS1Padding
have been removed from the implementation requirements of Java SE.
These algorithms are no longer recommended and should not be
requirements. The complete list of requirements removed is:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;AlgorithmParameters:
    DESede
Cipher:
    DESede/CBC/NoPadding
    DESede/CBC/PKCS5Padding
    DESede/ECB/NoPadding
    DESede/ECB/PKCS5Padding
    RSA/ECB/PKCS1Padding
KeyGenerator:
    DESede
SecretKeyFactory:
    DESede 

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8361964&quot;&gt;JDK-8361964&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Added PBES2 Algorithms as New Implementation Requirements&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The following PBES2 algorithms from
&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc8018&quot;&gt;RFC 8018: PKCS #5: Password-Based Cryptography Specification Version 2.1&lt;/a&gt;
have been added as new requirements:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;AlgorithmParameters:
    PBEWithHmacSHA256AndAES_128
    PBEWithHmacSHA256AndAES_256
Cipher:
    PBEWithHmacSHA256AndAES_128
    PBEWithHmacSHA256AndAES_256
Mac:
    PBEWithHmacSHA256
SecretKeyFactory:
    PBEWithHmacSHA256AndAES_128
    PBEWithHmacSHA256AndAES_256
    PBKDF2WithHmacSHA256 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8361964&quot;&gt;JDK-8361964&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;pki&quot;&gt;PKI&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New Root CA Certificates&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Several new root CA certificates have been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Four Sectigo root CA certificates, two for TLS, and two for code signing:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://crt.sh/?id=4256644603&quot;&gt;Sectigo Public Server Authentication Root E46&lt;/a&gt; with the following distinguished name:
            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=Sectigo Public Server Authentication Root E46, O=Sectigo Limited, C=GB
  &lt;/code&gt;
  &lt;/div&gt;
          &lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://crt.sh/?id=4256644734&quot;&gt;Sectigo Public Server Authentication Root R46&lt;/a&gt; with the following distinguished name:
            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=Sectigo Public Server Authentication Root R46, O=Sectigo Limited, C=GB
  &lt;/code&gt;
  &lt;/div&gt;
          &lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://crt.sh/?id=4256644597&quot;&gt;Sectigo Public Code Signing Root E46&lt;/a&gt; with the following distinguished name:
            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=Sectigo Public Code Signing Root E46, O=Sectigo Limited, C=GB
  &lt;/code&gt;
  &lt;/div&gt;
          &lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://crt.sh/?id=4256644598&quot;&gt;Sectigo Public Code Signing Root R46&lt;/a&gt; with the following distinguished name:
            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=Sectigo Public Code Signing Root R46, O=Sectigo Limited, C=GB
  &lt;/code&gt;
  &lt;/div&gt;
          &lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;These root certificates have also been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt;
keystore in Oracle’s JDK 25, 24.0.2, 21.0.8, 17.0.16, 11.0.27, and 8u461 releases.&lt;/p&gt;

        &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8359170&quot;&gt;JDK-8359170&lt;/a&gt;&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Removed Root CA Certificates&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Four AffirmTrust root certificates have been removed from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt;
keystore. These root CAs were deactivated by Entrust (who owns them) and
will no longer be supported. The four roots are:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://crt.sh/?id=1452345&quot;&gt;AffirmTrust Commercial&lt;/a&gt; with the following distinguished name:
        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=AffirmTrust Commercial, O=AffirmTrust, C=US
  &lt;/code&gt;
  &lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://crt.sh/?id=18223&quot;&gt;AffirmTrust Networking&lt;/a&gt; with the following distinguished name:
        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=AffirmTrust Networking, O=AffirmTrust, C=US
  &lt;/code&gt;
  &lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://crt.sh/?id=1073992&quot;&gt;AffirmTrust Premium&lt;/a&gt; with the following distinguished name:
        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=AffirmTrust Premium, O=AffirmTrust, C=US
  &lt;/code&gt;
  &lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://crt.sh/?id=2842896&quot;&gt;AffirmTrust Premium ECC&lt;/a&gt; with the following distinguished name:
        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=AffirmTrust Premium ECC, O=AffirmTrust, C=US
  &lt;/code&gt;
  &lt;/div&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;These root certificates have also been removed from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt;
   keystore in Oracle’s JDK 25.0.1, 21.0.9, 17.0.17, 11.0.29, and 8u471 releases.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8361212&quot;&gt;JDK-8361212&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;tls&quot;&gt;TLS&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Improved Checking in SunX509 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyManagerFactory&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The default SunX509 &lt;a href=&quot;https://docs.oracle.com/en/java/javase/25/docs/api/java.base/javax/net/ssl/KeyManagerFactory.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyManagerFactory&lt;/code&gt;&lt;/a&gt;,
which is used to provide certificates and key material for TLS connections,
has been improved. It now implements additional checks on certificates to
ensure the ones that are selected are compliant with current algorithm
constraints settings. This makes its checking consistent with the PKIX
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyManagerFactory&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Specifically, selection is based on the following rules:&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;Local certificates are checked against peer supported certificate
signature algorithms sent with the TLS &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;signature_algorithms_cert&lt;/code&gt;
extension.&lt;/li&gt;
      &lt;li&gt;Local certificates are checked against TLS algorithm constraints
specified in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.disabledAlgorithms&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.certpath.disabledAlgorithms&lt;/code&gt; security properties.&lt;/li&gt;
      &lt;li&gt;Local certificates are prioritized based on validity period and
certificate extensions.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;p&gt;The prior behavior can be re-enabled by setting the system property
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.SunX509KeyManager.certChecking&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;false&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8359956&quot;&gt;JDK-8359956&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;xml-signature&quot;&gt;XML Signature&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Disabled the XPath Filtering Transform&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;XML Signatures that use the
&lt;a href=&quot;https://www.w3.org/TR/xmldsig-core/#sec-XPath&quot;&gt;XPath Filtering Transform&lt;/a&gt;
have been disabled by default. The XPath transform, while powerful, has a
higher risk of introducing complexities and is not recommended in the
&lt;a href=&quot;https://www.w3.org/TR/xmldsig-bestpractices/#prefer-xpath-filter2&quot;&gt;XML Signature Best Practices document&lt;/a&gt;. If necessary, and at your own risk, the
transform can be re-enabled by removing it from the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.xml.dsig.secureValidationPolicy&lt;/code&gt; security property.&lt;/p&gt;

    &lt;p&gt;Alternatively, users should consider replacing their usages with the
&lt;a href=&quot;https://www.w3.org/TR/xmldsig-filter2/#sec-Intro&quot;&gt;XPath Filter 2 Transform&lt;/a&gt;,
which was designed to address the issues associated with the XPath Filtering
Transform.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8314180&quot;&gt;JDK-8314180&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New Property to Specify &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SecureRandom&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A new XML Signature property named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.xmldsig.SecureRandom&lt;/code&gt; has been
added which allows you to specify a specific &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SecureRandom&lt;/code&gt; instance to
use instead of the default &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SecureRandom&lt;/code&gt; that the JDK implementation uses.&lt;/p&gt;

    &lt;p&gt;This can be useful if you want more control over the secure random numbers
used in the generation of XML Signatures.&lt;/p&gt;

    &lt;p&gt;To use this property, you call the &lt;a href=&quot;https://docs.oracle.com/en/java/javase/25/docs/api/java.xml.crypto/javax/xml/crypto/XMLCryptoContext.html#setProperty(java.lang.String,java.lang.Object)&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;setProperty&lt;/code&gt;&lt;/a&gt; method of the
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/25/docs/api/java.xml.crypto/javax/xml/crypto/dsig/XMLSignContext.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;XMLSignContext&lt;/code&gt;&lt;/a&gt; class with the property
 name and the instance of the &lt;a href=&quot;https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/security/SecureRandom.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SecureRandom&lt;/code&gt;&lt;/a&gt; object you would like to use.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8359395&quot;&gt;JDK-8359395&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;tools&quot;&gt;Tools&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Signed JAR Support for ML-DSA&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;In JDK 21, we added support ML-DSA, which is a quantum-resistant digital
signature algorithm specified by NIST in &lt;a href=&quot;https://csrc.nist.gov/pubs/fips/204/final&quot;&gt;FIPS 204&lt;/a&gt;
and defined in &lt;a href=&quot;https://openjdk.org/jeps/497&quot;&gt;JEP 497&lt;/a&gt; for the Java Platform.&lt;/p&gt;

    &lt;p&gt;In this release, we have extended that support and added support for
signing JARs with ML-DSA. This can be done using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jarsigner&lt;/code&gt; utility
or the &lt;a href=&quot;https://docs.oracle.com/en/java/javase/25/docs/api/jdk.jartool/jdk/security/jarsigner/JarSigner.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;JarSigner&lt;/code&gt;&lt;/a&gt; API.&lt;/p&gt;

    &lt;p&gt;Here is an example of using ML-DSA to sign a JAR with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jarsigner&lt;/code&gt;:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    $ jarsigner -keystore ks –sigalg ML-DSA-65 -signedjar signed.jar
      test.jar mldsa
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8349732&quot;&gt;JDK-8349732&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java -XshowSettings:security:tls&lt;/code&gt; Now Shows TLS Named Groups and Signature Schemes&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java -XshowSettings:security:tls&lt;/code&gt; diagnostic command now shows the
TLS named groups (or key exchange algorithms) and signature schemes that
are enabled for TLS handshakes, in addition to the enabled protocols and
cipher suites.&lt;/p&gt;

    &lt;p&gt;Here is a sample run showing the new output:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    $ java -XshowSettings:security:tls
    Security TLS configuration (SunJSSE provider):
        Enabled Protocols:
            TLSv1.3
            TLSv1.2
   
        Enabled Cipher Suites:
            TLS_AES_256_GCM_SHA384
            TLS_AES_128_GCM_SHA256
            TLS_CHACHA20_POLY1305_SHA256
            TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
            TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
            TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
            TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
            TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
            TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
            TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
            TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256
            TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
            TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
            TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
            TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
            TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
            TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
            TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
            TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
            TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
            TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
            TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
            TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
            TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
            TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
            TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
            TLS_DHE_RSA_WITH_AES_256_CBC_SHA
            TLS_DHE_DSS_WITH_AES_256_CBC_SHA
            TLS_DHE_RSA_WITH_AES_128_CBC_SHA
            TLS_DHE_DSS_WITH_AES_128_CBC_SHA
            TLS_EMPTY_RENEGOTIATION_INFO_SCSV

        Enabled Named Groups:
            X25519MLKEM768
            x25519
            secp256r1
            secp384r1
            secp521r1
            x448
            ffdhe2048
            ffdhe3072
            ffdhe4096
            ffdhe6144
            ffdhe8192

        Enabled Signature Schemes:
            ecdsa_secp256r1_sha256
            ecdsa_secp384r1_sha384
            ecdsa_secp521r1_sha512
            ed25519
            ed448
            rsa_pss_rsae_sha256
            rsa_pss_rsae_sha384
            rsa_pss_rsae_sha512
            rsa_pss_pss_sha256
            rsa_pss_pss_sha384
            rsa_pss_pss_sha512
            rsa_pkcs1_sha256
            rsa_pkcs1_sha384
            rsa_pkcs1_sha512
            dsa_sha256
            ecdsa_sha224
            rsa_sha224
            dsa_sha224
            ecdsa_sha1
            rsa_pkcs1_sha1
            dsa_sha1

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Issues: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8351354&quot;&gt;JDK-8351354&lt;/a&gt;,
        &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8371074&quot;&gt;JDK-8371074&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Improved &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keytool&lt;/code&gt; Warning When Using JKS or JCEKS Keystores&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The warning that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keytool&lt;/code&gt; prints when a JKS or JCEKS keystore is used
has been improved to alert users that these keystores will eventually
be removed and also recommend migrating the keystores to PKCS12. The
warning emitted for JKS is now the following:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    &quot;JKS uses outdated cryptographic algorithms and will be removed in a future release. Migrate to PKCS12 using:
keytool -importkeystore -srckeystore &amp;lt;filename&amp;gt; -destkeystore &amp;lt;filename&amp;gt; -deststoretype pkcs12&quot; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;The warning for JCEKS is the same.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8353749&quot;&gt;JDK-8353749&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</content>
		</entry>
	
		<entry>
			<title>JDK 26 Security Enhancements</title>
			<link href="http://seanjmullan.org/blog/2026/03/16/jdk26"/>
			<updated>2026-03-16T00:00:00+00:00</updated>
			<id>http://seanjmullan.org/blog/2026/03/16/jdk26</id>
			<content type="html">&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/projects/jdk/26/&quot;&gt;JDK 26&lt;/a&gt; was released on March 17, 2026!
As with my previous &lt;a href=&quot;https://seanjmullan.org/blog/&quot;&gt;blogs&lt;/a&gt;, I
have compiled a list of what I think are the most interesting and useful
security enhancements in this release.  I have also grouped
them into appropriate categories (crypto, TLS, etc) which should make
it easier to find out what has changed in each specific area.
The &lt;a href=&quot;https://jdk.java.net/26/release-notes&quot;&gt;JDK 26 release notes&lt;/a&gt;
also contain further details on these and other enhancements.&lt;/p&gt;

&lt;p&gt;Highlights of this release include a second preview of the
&lt;a href=&quot;https://openjdk.org/jeps/524&quot;&gt;PEM API&lt;/a&gt;, API support for Hybrid Public
Key Encryption, and signed JAR support for the post-quantum ML-DSA algorithm.&lt;/p&gt;

&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of Contents&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#crypto&quot;&gt;Crypto&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#pki&quot;&gt;PKI&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#tls&quot;&gt;TLS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#xml-signature&quot;&gt;XML Signature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#tools&quot;&gt;Tools&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;crypto&quot;&gt;Crypto&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Hybrid Public Key Encryption&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;We have added support for Hybrid Public Key Encryption, or HPKE. HPKE is
a modern encryption scheme for encrypting arbitrary-sized plaintexts with
a recipient’s public key. HPKE is defined in
&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9180.html&quot;&gt;RFC 9180&lt;/a&gt;. It combines 3
different algorithms, a KEM, KDF, and an AEAD (authenticated encryption
with associated data) algorithm to produce a ciphertext.&lt;/p&gt;

    &lt;p&gt;To use HPKE in your applications, you use the existing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cipher&lt;/code&gt; API with
a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HPKEParameterSpec&lt;/code&gt; class which specifies the KEM, KDF, and AEAD
algorithms you want to use.&lt;/p&gt;

    &lt;p&gt;Initially in JDK 26, we only support traditional, non-PQC algorithms.
However, we plan to add support for PQC algorithms in a later JDK release
once the &lt;a href=&quot;https://datatracker.ietf.org/doc/draft-ietf-hpke-pq/&quot;&gt;Internet draft on Post-Quantum and Post-Quantum/Traditional Hybrid Algorithms for HPKE&lt;/a&gt; becomes an RFC.&lt;/p&gt;

    &lt;p&gt;This example from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HPKEParameterSpec&lt;/code&gt; javadoc shows a sender and a
recipient using HPKE to securely exchange messages with an X25519 key pair:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    // Recipient key pair generation
    KeyPairGenerator g = KeyPairGenerator.getInstance(&quot;X25519&quot;);
    KeyPair kp = g.generateKeyPair();

    // The HPKE sender cipher is initialized with the recipient&apos;s public
    // key and an HPKEParameterSpec using specified algorithm identifiers
    // and application-supplied info.
    Cipher senderCipher = Cipher.getInstance(&quot;HPKE&quot;);
    HPKEParameterSpec ps = HPKEParameterSpec.of(
                    HPKEParameterSpec.KEM_DHKEM_X25519_HKDF_SHA256,
                    HPKEParameterSpec.KDF_HKDF_SHA256,
                    HPKEParameterSpec.AEAD_AES_128_GCM)
            .withInfo(HexFormat.of().parseHex(&quot;010203040506&quot;));
    senderCipher.init(Cipher.ENCRYPT_MODE, kp.getPublic(), ps);

    // Retrieve the key encapsulation message (from the KEM step) from
    // the sender.
    byte[] kemEncap = senderCipher.getIV();

    // The HPKE recipient cipher is initialized with its own private key,
    // an HPKEParameterSpec using the same algorithm identifiers as used by
    // the sender, and the key encapsulation message from the sender.
    Cipher recipientCipher = Cipher.getInstance(&quot;HPKE&quot;);
    HPKEParameterSpec pr = HPKEParameterSpec.of(
                    HPKEParameterSpec.KEM_DHKEM_X25519_HKDF_SHA256,
                    HPKEParameterSpec.KDF_HKDF_SHA256,
                    HPKEParameterSpec.AEAD_AES_128_GCM)
            .withInfo(HexFormat.of().parseHex(&quot;010203040506&quot;))
            .withEncapsulation(kemEncap);
    recipientCipher.init(Cipher.DECRYPT_MODE, kp.getPrivate(), pr);

    // Encryption and decryption
    byte[] msg = &quot;Hello World&quot;.getBytes(StandardCharsets.UTF_8);
    byte[] ct = senderCipher.doFinal(msg);
    byte[] pt = recipientCipher.doFinal(ct);

    assert Arrays.equals(msg, pt);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8325448&quot;&gt;JDK-8325448&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;PKCS#12 KeyStore support for RFC 9879: Use of Password-Based Message Authentication Code 1 (PBMAC1)&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The JDK PKCS12 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyStore&lt;/code&gt; implementation now supports the more modern
PBMAC1 algorithm for integrity protection. To use the PBMAC1 algorithm,
set the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keystore.pkcs12.macAlgorithm&lt;/code&gt; property in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security&lt;/code&gt;
configuration file to a PBMAC1 algorithm, for example, “PBEWithHmacSHA256”.
Existing PKCS12 keystore files will continue to use the integrity
algorithm it was created with, but new keystore files will use the PBMAC1
algorithm.&lt;/p&gt;

    &lt;p&gt;In a future JDK release, the default value of the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keystore.pkcs12.macAlgorithm&lt;/code&gt; security property will be changed to a
PBMAC1 algorithm.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8343232&quot;&gt;JDK-8343232&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;JEP 524: PEM Encodings of Cryptographic Objects (Second Preview)&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The second preview API for encoding and decoding cryptographic objects
to/from the PEM format was delivered and defined in
&lt;a href=&quot;https://openjdk.org/jeps/524&quot;&gt;JEP 524&lt;/a&gt;. PEM is a widely used format
for transferring and storing DER-encoded cryptographic data such as
certificates, CRLs, private keys, and more. This was one of the
most commonly requested features in a JCE survey a few years ago.
The History section of the JEP contains a list of changes since the
first preview.&lt;/p&gt;

    &lt;p&gt;There are two primary APIs, a &lt;a href=&quot;https://docs.oracle.com/en/java/javase/26/docs/api/java.base/java/security/PEMEncoder.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PEMEncoder&lt;/code&gt;&lt;/a&gt;
class for encoding cryptographic objects to PEM, and a &lt;a href=&quot;https://docs.oracle.com/en/java/javase/26/docs/api/java.base/java/security/PEMDecoder.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PEMDecoder&lt;/code&gt;&lt;/a&gt;
class for decoding PEM data into cryptographic objects. There is also a
marker interface named &lt;a href=&quot;https://docs.oracle.com/en/java/javase/26/docs/api/java.base/java/security/DEREncodable.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DEREncodable&lt;/code&gt;&lt;/a&gt;,
and existing classes such as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X509Certificate&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X509CRL&lt;/code&gt;
have been retrofitted to implement this interface, thereby making it easier
to encode/decode these objects to/from PEM.&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PEMEncoder&lt;/code&gt; can also be configured for encryption which makes it easier
to encrypt and encode private keys in one step. Similarly, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PEMDecoder&lt;/code&gt;
can be configured for decryption to allow private keys to be decoded and
decrypted in one step. For more advanced usage, the existing
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/26/docs/api/java.base/javax/crypto/EncryptedPrivateKeyInfo.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;EncryptedPrivateKeyInfo&lt;/code&gt;&lt;/a&gt;
class has been enhanced with several new methods that make it easier
to encrypt and decrypt private keys.&lt;/p&gt;

    &lt;p&gt;Here is an example of encoding an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X509Certificate&lt;/code&gt; retrieved from a
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyStore&lt;/code&gt; to PEM:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    X509Certificate cert = (X509Certificate)keystore.getCertificate(&quot;mycert&quot;);
    PEMEncoder encoder = PEMEncoder.of();
    String pem = encoder.encodeToString(cert);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Here is an example of decoding the PEM back into an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X509Certificate&lt;/code&gt;:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    PEMDecoder decoder = PEMDecoder.of();
    X509Certificate cert = decoder.decode(pem, X509Certificate.class);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Here are two examples of encrypting a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PrivateKey&lt;/code&gt; with a password and
then encoding it into PEM. The first example configures &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PEMEncoder&lt;/code&gt;
for encryption and encrypts and encodes the private key directly in one
method call:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    PEMEncoder encoder = PEMEncoder.of();
    String pem = encoder.withEncryption(password).encodeToString(privateKey);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;The above example uses default parameters when encrypting. This second
example uses the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;EncryptedPrivateKeyInfo&lt;/code&gt; class to encrypt the
private key with additional parameters such as the password-based
encryption algorithm, and then encodes it to PEM:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    EncryptedPrivateKeyInfo epki =
        EncryptedPrivateKeyInfo.encrypt(privateKey, password,
            &quot;PBEWithHmacSHA256AndAES_256&quot;, null, null);
    PEMEncoder encoder = PEMEncoder.of();
    String pem = encoder.encodeToString(epki);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New Security Property to Disable Algorithms at the JCE Layer&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A new security property named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.crypto.disabledAlgorithms&lt;/code&gt; has been
added which can be used to disable cryptographic algorithms at the JCE/JCA
API level. This property takes a list of algorithm names as specified in
the Standard Algorithm Names specification. The security property can be
overridden by a system property of the same name.&lt;/p&gt;

    &lt;p&gt;Initially the property is empty and contains no algorithms.&lt;/p&gt;

    &lt;p&gt;This is a very useful property which allows you to detect usage of
cryptographic algorithms at a comprehensive level across all code in
your application.&lt;/p&gt;

    &lt;p&gt;For more details on the syntax of the algorithm and the JCE services
that are supported, see the definition in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security&lt;/code&gt; configuration
file.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8244336&quot;&gt;JDK-8244336&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Various Performance Improvements&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A number of performance improvements in the AES, ML-DSA and Elliptic Curve
(P256) algorithms were made. See the following issues for more details:&lt;/p&gt;

    &lt;p&gt;Issues: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8371820&quot;&gt;8371820&lt;/a&gt;,
        &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8371450&quot;&gt;8371450&lt;/a&gt;,
        &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8371259&quot;&gt;8371259&lt;/a&gt;,
        &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8365581&quot;&gt;8365581&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Removed Obsolete Algorithms from Implementation Requirements&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The DESede (3DES) algorithms and Cipher algorithms using PKCS1Padding
have been removed from the implementation requirements of Java SE.
These algorithms are no longer recommended and should not be
requirements. The complete list of requirements removed is:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;AlgorithmParameters:
    DESede
Cipher:
    DESede/CBC/NoPadding
    DESede/CBC/PKCS5Padding
    DESede/ECB/NoPadding
    DESede/ECB/PKCS5Padding
    RSA/ECB/PKCS1Padding
KeyGenerator:
    DESede
SecretKeyFactory:
    DESede 

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8361964&quot;&gt;JDK-8361964&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Added PBES2 Algorithms as New Implementation Requirements&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The following PBES2 algorithms from
&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc8018&quot;&gt;RFC 8018: PKCS #5: Password-Based Cryptography Specification Version 2.1&lt;/a&gt;
have been added as new requirements:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;AlgorithmParameters:
    PBEWithHmacSHA256AndAES_128
    PBEWithHmacSHA256AndAES_256
Cipher:
    PBEWithHmacSHA256AndAES_128
    PBEWithHmacSHA256AndAES_256
Mac:
    PBEWithHmacSHA256
SecretKeyFactory:
    PBEWithHmacSHA256AndAES_128
    PBEWithHmacSHA256AndAES_256
    PBKDF2WithHmacSHA256 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8361964&quot;&gt;JDK-8361964&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;pki&quot;&gt;PKI&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New Root CA Certificates&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Several new root CA certificates have been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Four Sectigo root CA certificates, two for TLS, and two for code signing:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://crt.sh/?id=4256644603&quot;&gt;Sectigo Public Server Authentication Root E46&lt;/a&gt; with the following distinguished name:
            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=Sectigo Public Server Authentication Root E46, O=Sectigo Limited, C=GB
  &lt;/code&gt;
  &lt;/div&gt;
          &lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://crt.sh/?id=4256644734&quot;&gt;Sectigo Public Server Authentication Root R46&lt;/a&gt; with the following distinguished name:
            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=Sectigo Public Server Authentication Root R46, O=Sectigo Limited, C=GB
  &lt;/code&gt;
  &lt;/div&gt;
          &lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://crt.sh/?id=4256644597&quot;&gt;Sectigo Public Code Signing Root E46&lt;/a&gt; with the following distinguished name:
            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=Sectigo Public Code Signing Root E46, O=Sectigo Limited, C=GB
  &lt;/code&gt;
  &lt;/div&gt;
          &lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://crt.sh/?id=4256644598&quot;&gt;Sectigo Public Code Signing Root R46&lt;/a&gt; with the following distinguished name:
            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=Sectigo Public Code Signing Root R46, O=Sectigo Limited, C=GB
  &lt;/code&gt;
  &lt;/div&gt;
          &lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;These root certificates have also been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt;
keystore in Oracle’s JDK 25, 24.0.2, 21.0.8, 17.0.16, 11.0.27, and 8u461 releases.&lt;/p&gt;

        &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8359170&quot;&gt;JDK-8359170&lt;/a&gt;&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Removed Root CA Certificates&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Four AffirmTrust root certificates have been removed from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt;
keystore. These root CAs were deactivated by Entrust (who owns them) and
will no longer be supported. The four roots are:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://crt.sh/?id=1452345&quot;&gt;AffirmTrust Commercial&lt;/a&gt; with the following distinguished name:
        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=AffirmTrust Commercial, O=AffirmTrust, C=US
  &lt;/code&gt;
  &lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://crt.sh/?id=18223&quot;&gt;AffirmTrust Networking&lt;/a&gt; with the following distinguished name:
        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=AffirmTrust Networking, O=AffirmTrust, C=US
  &lt;/code&gt;
  &lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://crt.sh/?id=1073992&quot;&gt;AffirmTrust Premium&lt;/a&gt; with the following distinguished name:
        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=AffirmTrust Premium, O=AffirmTrust, C=US
  &lt;/code&gt;
  &lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://crt.sh/?id=2842896&quot;&gt;AffirmTrust Premium ECC&lt;/a&gt; with the following distinguished name:
        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=AffirmTrust Premium ECC, O=AffirmTrust, C=US
  &lt;/code&gt;
  &lt;/div&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;These root certificates have also been removed from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt;
   keystore in Oracle’s JDK 25.0.1, 21.0.9, 17.0.17, 11.0.29, and 8u471 releases.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8361212&quot;&gt;JDK-8361212&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;tls&quot;&gt;TLS&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Improved Checking in SunX509 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyManagerFactory&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The default SunX509 &lt;a href=&quot;https://docs.oracle.com/en/java/javase/26/docs/api/java.base/javax/net/ssl/KeyManagerFactory.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyManagerFactory&lt;/code&gt;&lt;/a&gt;,
which is used to provide certificates and key material for TLS connections,
has been improved. It now implements additional checks on certificates to
ensure the ones that are selected are compliant with current algorithm
constraints settings. This makes its checking consistent with the PKIX
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyManagerFactory&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Specifically, selection is based on the following rules:&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;Local certificates are checked against peer supported certificate
signature algorithms sent with the TLS &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;signature_algorithms_cert&lt;/code&gt;
extension.&lt;/li&gt;
      &lt;li&gt;Local certificates are checked against TLS algorithm constraints
specified in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.disabledAlgorithms&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.certpath.disabledAlgorithms&lt;/code&gt; security properties.&lt;/li&gt;
      &lt;li&gt;Local certificates are prioritized based on validity period and
certificate extensions.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;p&gt;The prior behavior can be re-enabled by setting the system property
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.SunX509KeyManager.certChecking&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;false&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8359956&quot;&gt;JDK-8359956&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;xml-signature&quot;&gt;XML Signature&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Disabled the XPath Filtering Transform&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;XML Signatures that use the
&lt;a href=&quot;https://www.w3.org/TR/xmldsig-core/#sec-XPath&quot;&gt;XPath Filtering Transform&lt;/a&gt;
have been disabled by default. The XPath transform, while powerful, has a
higher risk of introducing complexities and is not recommended in the
&lt;a href=&quot;https://www.w3.org/TR/xmldsig-bestpractices/#prefer-xpath-filter2&quot;&gt;XML Signature Best Practices document&lt;/a&gt;. If necessary, and at your own risk, the
transform can be re-enabled by removing it from the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.xml.dsig.secureValidationPolicy&lt;/code&gt; security property.&lt;/p&gt;

    &lt;p&gt;Alternatively, users should consider replacing their usages with the
&lt;a href=&quot;https://www.w3.org/TR/xmldsig-filter2/#sec-Intro&quot;&gt;XPath Filter 2 Transform&lt;/a&gt;,
which was designed to address the issues associated with the XPath Filtering
Transform.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8314180&quot;&gt;JDK-8314180&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New Property to Specify &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SecureRandom&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A new XML Signature property named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.xmldsig.SecureRandom&lt;/code&gt; has been
added which allows you to specify a specific &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SecureRandom&lt;/code&gt; instance to
use instead of the default &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SecureRandom&lt;/code&gt; that the JDK implementation uses.&lt;/p&gt;

    &lt;p&gt;This can be useful if you want more control over the secure random numbers
used in the generation of XML Signatures.&lt;/p&gt;

    &lt;p&gt;To use this property, you call the &lt;a href=&quot;https://docs.oracle.com/en/java/javase/26/docs/api/java.xml.crypto/javax/xml/crypto/XMLCryptoContext.html#setProperty(java.lang.String,java.lang.Object)&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;setProperty&lt;/code&gt;&lt;/a&gt; method of the
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/26/docs/api/java.xml.crypto/javax/xml/crypto/dsig/XMLSignContext.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;XMLSignContext&lt;/code&gt;&lt;/a&gt; class with the property
 name and the instance of the &lt;a href=&quot;https://docs.oracle.com/en/java/javase/26/docs/api/java.base/java/security/SecureRandom.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SecureRandom&lt;/code&gt;&lt;/a&gt; object you would like to use.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8359395&quot;&gt;JDK-8359395&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;tools&quot;&gt;Tools&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Signed JAR Support for ML-DSA&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;In JDK 24, we added support ML-DSA, which is a quantum-resistant digital
signature algorithm specified by NIST in &lt;a href=&quot;https://csrc.nist.gov/pubs/fips/204/final&quot;&gt;FIPS 204&lt;/a&gt;
and defined in &lt;a href=&quot;https://openjdk.org/jeps/497&quot;&gt;JEP 497&lt;/a&gt; for the Java Platform.&lt;/p&gt;

    &lt;p&gt;In this release, we have extended that support and added support for
signing JARs with ML-DSA. This can be done using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jarsigner&lt;/code&gt; utility
or the &lt;a href=&quot;https://docs.oracle.com/en/java/javase/26/docs/api/jdk.jartool/jdk/security/jarsigner/JarSigner.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;JarSigner&lt;/code&gt;&lt;/a&gt; API.&lt;/p&gt;

    &lt;p&gt;Here is an example of using ML-DSA to sign a JAR with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jarsigner&lt;/code&gt;:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    $ jarsigner -keystore ks –sigalg ML-DSA-65 -signedjar signed.jar test.jar mldsa
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8349732&quot;&gt;JDK-8349732&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java -XshowSettings:security:tls&lt;/code&gt; Now Shows TLS Named Groups and Signature Schemes&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java -XshowSettings:security:tls&lt;/code&gt; diagnostic command now shows the
TLS named groups (or key exchange algorithms) and signature schemes that
are enabled for TLS handshakes, in addition to the enabled protocols and
cipher suites.&lt;/p&gt;

    &lt;p&gt;Here is a sample run showing the new output:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    $ java -XshowSettings:security:tls
    Security TLS configuration (SunJSSE provider):
        Enabled Protocols:
            TLSv1.3
            TLSv1.2
   
        Enabled Cipher Suites:
            TLS_AES_256_GCM_SHA384
            TLS_AES_128_GCM_SHA256
            TLS_CHACHA20_POLY1305_SHA256
            TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
            TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
            TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
            TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
            TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
            TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
            TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
            TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256
            TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
            TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
            TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
            TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
            TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
            TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
            TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
            TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
            TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
            TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
            TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
            TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
            TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
            TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
            TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
            TLS_DHE_RSA_WITH_AES_256_CBC_SHA
            TLS_DHE_DSS_WITH_AES_256_CBC_SHA
            TLS_DHE_RSA_WITH_AES_128_CBC_SHA
            TLS_DHE_DSS_WITH_AES_128_CBC_SHA
            TLS_EMPTY_RENEGOTIATION_INFO_SCSV

        Enabled Named Groups:
            X25519MLKEM768
            x25519
            secp256r1
            secp384r1
            secp521r1
            x448
            ffdhe2048
            ffdhe3072
            ffdhe4096
            ffdhe6144
            ffdhe8192

        Enabled Signature Schemes:
            ecdsa_secp256r1_sha256
            ecdsa_secp384r1_sha384
            ecdsa_secp521r1_sha512
            ed25519
            ed448
            rsa_pss_rsae_sha256
            rsa_pss_rsae_sha384
            rsa_pss_rsae_sha512
            rsa_pss_pss_sha256
            rsa_pss_pss_sha384
            rsa_pss_pss_sha512
            rsa_pkcs1_sha256
            rsa_pkcs1_sha384
            rsa_pkcs1_sha512
            dsa_sha256
            ecdsa_sha224
            rsa_sha224
            dsa_sha224
            ecdsa_sha1
            rsa_pkcs1_sha1
            dsa_sha1

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Issues: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8351354&quot;&gt;JDK-8351354&lt;/a&gt;,
        &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8371074&quot;&gt;JDK-8371074&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Improved &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keytool&lt;/code&gt; Warning When Using JKS or JCEKS Keystores&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The warning that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keytool&lt;/code&gt; prints when a JKS or JCEKS keystore is used
has been improved to alert users that these keystores will eventually
be removed and also recommend migrating the keystores to PKCS12. The
warning emitted for JKS is now the following:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    &quot;JKS uses outdated cryptographic algorithms and will be removed in a future release. Migrate to PKCS12 using:
keytool -importkeystore -srckeystore &amp;lt;filename&amp;gt; -destkeystore &amp;lt;filename&amp;gt; -deststoretype pkcs12&quot; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;The warning for JCEKS is the same.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8353749&quot;&gt;JDK-8353749&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</content>
		</entry>
	
		<entry>
			<title>JDK 25 Security Enhancements</title>
			<link href="http://seanjmullan.org/blog/2025/09/23/jdk25"/>
			<updated>2025-09-23T00:00:00+00:00</updated>
			<id>http://seanjmullan.org/blog/2025/09/23/jdk25</id>
			<content type="html">&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/projects/jdk/25/&quot;&gt;JDK 25&lt;/a&gt; was released on September 16, 2025!
As with my previous &lt;a href=&quot;https://seanjmullan.org/blog/&quot;&gt;blogs&lt;/a&gt;, I
have compiled a list of what I think are the most interesting and useful
security enhancements in this release.  I have also grouped
them into appropriate categories (crypto, TLS, etc) which should make
it easier to find out what has changed in each specific area.
The &lt;a href=&quot;https://jdk.java.net/25/release-notes&quot;&gt;JDK 25 release notes&lt;/a&gt;
also contain further details on these and other enhancements.&lt;/p&gt;

&lt;p&gt;Highlights of this release include a final version of the
&lt;a href=&quot;https://openjdk.org/jeps/510&quot;&gt;Key Derivation Function API&lt;/a&gt; and a new
preview &lt;a href=&quot;https://openjdk.org/jeps/470&quot;&gt;API for encoding and decoding cryptographic objects to/from PEM&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of Contents&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#crypto&quot;&gt;Crypto&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#tls&quot;&gt;TLS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#perf&quot;&gt;Performance Improvements&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#security-manager&quot;&gt;Security Manager&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#miscellaneous&quot;&gt;Miscellaneous&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;crypto&quot;&gt;Crypto&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;JEP 470: PEM Encodings of Cryptographic Objects (Preview)&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A new preview API for encoding and decoding cryptographic objects to/from
the PEM format has been introduced in JDK 25 and defined in
&lt;a href=&quot;https://openjdk.org/jeps/470&quot;&gt;JEP 470&lt;/a&gt;. PEM is a widely used format
for transferring and storing DER-encoded cryptographic data such as 
certificates, CRLs, private keys, and more. This was one of the
most commonly requested features in a JCE survey a few years ago.&lt;/p&gt;

    &lt;p&gt;Two primary APIs have been added, a &lt;a href=&quot;https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/security/PEMEncoder.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PEMEncoder&lt;/code&gt;&lt;/a&gt;
class for encoding cryptographic objects to PEM, and a &lt;a href=&quot;https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/security/PEMDecoder.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PEMDecoder&lt;/code&gt;&lt;/a&gt;
class for decoding PEM data into cryptographic objects. A new marker
interface named &lt;a href=&quot;https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/security/DEREncodable.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DEREncodable&lt;/code&gt;&lt;/a&gt;
has been added, and existing classes such as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X509Certificate&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X509CRL&lt;/code&gt;
have been retrofitted to implement this interface, thereby making it easier
to encode/decode these objects to/from PEM.&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PEMEncoder&lt;/code&gt; can also be configured for encryption which makes it easier
to encrypt and encode private keys in one step. Similarly, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PEMDecoder&lt;/code&gt;
can be configured for decryption to allow private keys to be decoded and
decrypted in one step. For more advanced usage, the existing
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/25/docs/api/java.base/javax/crypto/EncryptedPrivateKeyInfo.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;EncryptedPrivateKeyInfo&lt;/code&gt;&lt;/a&gt;
class has also been enhanced with several new methods that make it easier
to encrypt and decrypt private keys.&lt;/p&gt;

    &lt;p&gt;Here is an example of encoding an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X509Certificate&lt;/code&gt; retrieved from a
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyStore&lt;/code&gt; to PEM:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    X509Certificate cert = (X509Certificate)keystore.getCertificate(&quot;mycert&quot;);
    PEMEncoder encoder = PEMEncoder.of();
    String pem = encoder.encodeToString(cert);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Here is an example of decoding the PEM back into an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X509Certificate&lt;/code&gt;:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    PEMDecoder decoder = PEMDecoder.of();
    X509Certificate cert = decoder.decode(pem, X509Certificate.class);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Here are two examples of encrypting a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PrivateKey&lt;/code&gt; with a password and
then encoding it into PEM. The first example configures &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PEMEncoder&lt;/code&gt;
for encryption and encrypts and encodes the private key directly in one
method call:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    PEMEncoder encoder = PEMEncoder.of();
    String pem = encoder.withEncryption(password).encodeToString(privateKey);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;The above example uses default parameters when encrypting. This second
example uses the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;EncryptedPrivateKeyInfo&lt;/code&gt; class to encrypt the
private key with additional parameters such as the password-based
encryption algorithm, and then encodes it to PEM:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    EncryptedPrivateKeyInfo epki =
        EncryptedPrivateKeyInfo.encryptKey(privateKey, password,
            &quot;PBEWithHmacSHA256AndAES_256&quot;, null, null);
    PEMEncoder encoder = PEMEncoder.of();
    String pem = encoder.encodeToString(epki);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;JEP 510: Key Derivation Function API&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A preview of the Key Derivation Function (KDF) API was delivered in JDK 24
and defined in &lt;a href=&quot;https://openjdk.org/jeps/478&quot;&gt;JEP 478&lt;/a&gt;. This release
delivers the final version of the API, without any changes. KDF is an
API for deriving keys from key material and is more fully described in 
&lt;a href=&quot;https://openjdk.org/jeps/510&quot;&gt;JEP 510&lt;/a&gt;. Also included is an
implementation of the HMAC-based Extract-and-Expand Key Derivation
Function (HKDF), which is defined in
&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc5869.html&quot;&gt;RFC 5869&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;KDF will be a very valuable API for several future enhancements that
depend on key derivation. These include PQC mechanisms such as
Hybrid Key Exchange in TLS 1.3
(&lt;a href=&quot;https://datatracker.ietf.org/doc/draft-ietf-tls-hybrid-design/&quot;&gt;IETF Draft&lt;/a&gt;)
and Hybrid Public Key Encryption
(&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9180.html&quot;&gt;RFC 9180&lt;/a&gt;). The API is also
designed to be used for strong and modern password-based algorithms such
as Argon2 (&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9106.html&quot;&gt;RFC 9106&lt;/a&gt;).&lt;/p&gt;

    &lt;p&gt;The main new class is &lt;a href=&quot;https://docs.oracle.com/en/java/javase/25/docs/api/java.base/javax/crypto/KDF.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.crypto.KDF&lt;/code&gt;&lt;/a&gt;. The JEP gives an example of
using the HKDF-SHA256 algorithm to derive a 32 byte AES key:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    // Create a KDF object for the specified algorithm
    KDF hkdf = KDF.getInstance(&quot;HKDF-SHA256&quot;); 

    // Create an ExtractExpand parameter specification
    AlgorithmParameterSpec params =
        HKDFParameterSpec.ofExtract()
                 .addIKM(initialKeyMaterial)
                 .addSalt(salt).thenExpand(info, 32);

    // Derive a 32-byte AES key
    SecretKey key = hkdf.deriveKey(&quot;AES&quot;, params);

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;SHAKE128-256 and SHAKE256-512 MessageDigest Algorithms&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Two new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MessageDigest&lt;/code&gt; algorithms have been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SUN&lt;/code&gt; provider:
SHAKE128-256 and SHAKE256-512. These are fixed-length versions of the
SHAKE128 and SHAKE256 Extendable-Output Functions (XOFs) defined in
&lt;a href=&quot;https://csrc.nist.gov/pubs/fips/202/final&quot;&gt;NIST FIPS 202&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Here is an example using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MessageDigest&lt;/code&gt; to digest some bytes with
SHAKE128-256:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    byte[] bytes = ...
    MessageDigest md = MessageDigest.getInstance(&quot;SHAKE128-256&quot;);
    byte[] digest = md.digest(bytes);

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8354305&quot;&gt;JDK-8354305&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;PKCS#11 Support for the HKDF-SHA256, HKDF-SHA384 and HKDF-SHA512 Key Derivation Function Algorithms&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Support for the HKDF-SHA256, HKDF-SHA384 and HKDF-SHA512 Key Derivation
Function algorithms has been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SunPKCS11&lt;/code&gt; provider. These
algorithms can be used with the new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KDF&lt;/code&gt; API in JDK 25. See the
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/25/security/pkcs11-reference-guide1.html#JSSEC-GUID-D3EF9023-7DDC-435D-9186-D2FD05674777&quot;&gt;SunPKCS11 Provider Supported Algorithms&lt;/a&gt;
section of the PKCS#11 Reference Guide for more details.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8328119&quot;&gt;JDK-8328119&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Added TLSv1.3 and CNSA 1.0 Algorithms to Implementation Requirements&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;In the Java Security Standard Algorithm Names Specification, new
requirements have been added to the
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/25/docs/specs/security/standard-names.html#security-algorithm-implementation-requirements&quot;&gt;list of cryptographic requirements all Java SE implementations must support&lt;/a&gt;.
All cryptographic algorithms
that are needed to implement the TLSv1.3 cipher suites and signature
mechanisms and that are defined by
&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc8446&quot;&gt;RFC 8446&lt;/a&gt; as MUST or SHOULD
requirements have been added. All algorithms that are required by
&lt;a href=&quot;https://media.defense.gov/2021/Oct/15/2002874275/-1/-1/0/CNSA_WORKSHEET_20211015.PDF&quot;&gt;CNSA 1.0&lt;/a&gt;
have also been added. No required algorithms or protocols are being
removed at this time. These are the new requirements:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AlgorithmParameters&lt;/code&gt;
        &lt;ul&gt;
          &lt;li&gt;ChaCha20-Poly1305&lt;/li&gt;
          &lt;li&gt;EC with secp256r1 or secp384r1 curves&lt;/li&gt;
          &lt;li&gt;RSASSA-PSS with MGF1 mask generation function and SHA-256 or SHA-384 hash algorithm&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cipher&lt;/code&gt;
        &lt;ul&gt;
          &lt;li&gt;AES/GCM/NoPadding with 256 bit key size&lt;/li&gt;
          &lt;li&gt;ChaCha20-Poly1305&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyAgreement&lt;/code&gt;
        &lt;ul&gt;
          &lt;li&gt;ECDH with secp256r1 or secp384r1 curves&lt;/li&gt;
          &lt;li&gt;X25519&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyFactory&lt;/code&gt;
        &lt;ul&gt;
          &lt;li&gt;EC&lt;/li&gt;
          &lt;li&gt;RSASSA-PSS&lt;/li&gt;
          &lt;li&gt;X25519&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyGenerator&lt;/code&gt;
        &lt;ul&gt;
          &lt;li&gt;AES with 256 bit key size&lt;/li&gt;
          &lt;li&gt;ChaCha20&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyPairGenerator&lt;/code&gt;
        &lt;ul&gt;
          &lt;li&gt;DH with 3072 bit key size&lt;/li&gt;
          &lt;li&gt;EC with secp256r1 or secp384r1 curves&lt;/li&gt;
          &lt;li&gt;RSA with 3072 bit key size&lt;/li&gt;
          &lt;li&gt;RSASSA-PSS with 2048, 3072, 4096 bit key sizes&lt;/li&gt;
          &lt;li&gt;X25519&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MessageDigest&lt;/code&gt;
        &lt;ul&gt;
          &lt;li&gt;SHA-384&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Signature&lt;/code&gt;
        &lt;ul&gt;
          &lt;li&gt;RSASSA-PSS with MGF1 mask generation function and SHA-256 or SHA-384 hash algorithm&lt;/li&gt;
          &lt;li&gt;SHA256WithECDSA with secp256r1 curve&lt;/li&gt;
          &lt;li&gt;SHA384WithECDSA with secp384r1 curve&lt;/li&gt;
          &lt;li&gt;SHA384WithRSA&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SSLContext&lt;/code&gt;
        &lt;ul&gt;
          &lt;li&gt;TLSv1.3&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8283795&quot;&gt;JDK-8283795&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New Key Algorithms Section of the Java Security Standard Algorithm Names Specification&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A new &lt;a href=&quot;https://docs.oracle.com/en/java/javase/25/docs/specs/security/standard-names.html#key-algorithms&quot;&gt;Key Algorithms section&lt;/a&gt;
has been added to the Java Security Standard Algorithm Names Specification
listing the standard names of keys generated or created by the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyFactory&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SecretKeyFactory&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyGenerator&lt;/code&gt;, or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyPairGenerator&lt;/code&gt;
APIs. Two subsections distinguish between &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Asymmetric&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SecretKey&lt;/code&gt; (or
symmetric) algorithms.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8346736&quot;&gt;JDK-8346736&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Added PBES2 as a Standard AlgorithmParameters Algorithm&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;PBES2 had been added as a standard algorithm to the
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/25/docs/specs/security/standard-names.html#algorithmparameters-algorithms&quot;&gt;AlgorithmParameters section&lt;/a&gt;
of the Java Security Standard Algorithm Names Specification. The PBES2
algorithm is defined in
&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc8018&quot;&gt;PKCS #5: Password-Based Cryptography Specification, Version 2.1&lt;/a&gt;.
A PBES2 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AlgorithmParameters&lt;/code&gt; implementation is supported by the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SunJCE&lt;/code&gt; provider.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8348405&quot;&gt;JDK-8348405&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;tls&quot;&gt;TLS&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Support for TLS Keying Material Exporters&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;New methods have been added to the
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/25/docs/api/java.base/javax/net/ssl/ExtendedSSLSession.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.net.ssl.ExtendedSession&lt;/code&gt;&lt;/a&gt; class
that allow applications to generate additional application-level keying
material from a connection’s negotiated TLS keys.&lt;/p&gt;

    &lt;p&gt;These new APIs are useful for various exporter mechanisms that depend
on keying material, such as those listed in the
&lt;a href=&quot;https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#exporter-labels&quot;&gt;TLS Exporter Labels section&lt;/a&gt;
of the IANA registry.&lt;/p&gt;

    &lt;p&gt;Two new methods have been added:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    public SecretKey exportKeyingMaterialKey(String keyAlg,
        String label, byte[] context, int length) throws SSLKeyException
    public byte[] exportKeyingMaterialData(
        String label, byte[] context, int length) throws SSLKeyException 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;The first method exports the keying material as a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SecretKey&lt;/code&gt; and the
second method as a byte array. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SecretKey&lt;/code&gt; method is useful for
implementations that store keys on hardware or tokens.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8341346&quot;&gt;JDK-8341346&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New Mechanism to Disable Signature Schemes Based on Their TLS Scope&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.disabledAlgorithms&lt;/code&gt; security property has been enhanced to
support selectively disabling algorithms in TLS handshake or certificate
signatures. This new syntax allows you to more easily disable an algorithm
only for handshake signatures or only for certificate signatures, which
might be desirable depending on various factors.&lt;/p&gt;

    &lt;p&gt;The syntax extends the existing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UsageConstraint&lt;/code&gt; to have a new
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UsageType&lt;/code&gt; component, ex:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    UsageConstraint:
        usage UsageType { UsageType }

    UsageType:
        HandshakeSignature | CertificateSignature 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;The algorithm name can be a &lt;a href=&quot;https://docs.oracle.com/en/java/javase/25/docs/specs/security/standard-names.html#signature-algorithms&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Signature&lt;/code&gt; algorithm&lt;/a&gt;
(ex: SHA1withRSA), a
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/25/docs/specs/security/standard-names.html#key-algorithms&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Key&lt;/code&gt; algorithm&lt;/a&gt; (ex: RSA), or a
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/25/docs/specs/security/standard-names.html#signature-schemes&quot;&gt;TLS signature scheme&lt;/a&gt;
(ex: rsa_pkcs1_sha1).&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8349583&quot;&gt;JDK-8349583&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Disabled SHA-1 in TLS 1.2 and DTLS 1.2 Handshake Signatures&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;SHA-1 in TLS 1.2 and DTLS 1.2 handshake signatures is now disabled by
default. SHA-1 is deprecated for use in handshake signatures as specified
in &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9325&quot;&gt;RFC 9155&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Users can re-enable SHA-1 in handshake signatures, at their own risk, by
removing “rsa_pkcs1_sha1 usage HandshakeSignature, ecdsa_sha1 usage HandshakeSignature, dsa_sha1 usage HandshakeSignature” from the
   &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.disabledAlgorithms&lt;/code&gt; security property in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security&lt;/code&gt;
configuration file.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8353879&quot;&gt;JDK-8353879&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;performance-improvements&quot;&gt;Performance Improvements&lt;/h3&gt;

&lt;p&gt;Several performance improvements have been made to the crypto and
TLS implementations:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Optimize Java Implementation of ML-KEM&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The performance of the ML-KEM &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KEM&lt;/code&gt; implementation has been improved by
1-2%.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8347608&quot;&gt;JDK-8347608&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Optimize Java Implementation of ML-DSA&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The performance of the ML-DSA &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Signature&lt;/code&gt; implementation has been improved
by approximately 10%.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8347606&quot;&gt;JDK-8347606&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Change ChaCha20 Intrinsic to use Quarter-Round Parallel Implementation on aarch64&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The performance of the ChaCha20 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cipher&lt;/code&gt; implementation has been improved
by 2-4% on aarch64 processors.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8349106&quot;&gt;JDK-8349106&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Reduce TLS Stateless Session Ticket Size&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The size of TLS stateless session tickets has been significantly reduced.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8357033&quot;&gt;JDK-8357033&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;security-manager&quot;&gt;Security Manager&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Various Permission Classes Deprecated for Removal&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Many permission classes have been deprecated for removal as they are
no longer useful now that the Security Manager has been
&lt;a href=&quot;https://openjdk.org/jeps/486&quot;&gt;permanently disabled in JDK 24&lt;/a&gt;.
The following classes are now terminally deprecated:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.UnresolvedPermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.net.ssl.SSLPermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.security.auth.AuthPermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.security.auth.PrivateCredentialPermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.security.auth.kerberos.DelegationPermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.security.auth.kerberos.ServicePermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.sun.security.jgss.InquireSecContextPermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.lang.RuntimePermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.lang.reflect.ReflectPermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.io.FilePermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.io.SerializablePermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.nio.file.LinkPermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.util.logging.LoggingPermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.util.PropertyPermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.jfr.FlightRecorderPermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.net.NetPermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.net.URLPermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.net.NetworkPermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.sun.tools.attach.AttachPermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.sun.jdi.JDIPermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.lang.management.ManagementPermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.management.MBeanPermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.management.MBeanTrustPermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.management.MBeanServerPermission&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.management.remote.SubjectDelegationPermission&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;In addition, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;getPermission&lt;/code&gt; method defined in
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.net.URLConnection&lt;/code&gt; and its subclass &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.net.HttpURLConnection&lt;/code&gt;
has been deprecated for removal.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8348967&quot;&gt;JDK-8348967&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;miscellaneous&quot;&gt;Miscellaneous&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Turn on Timestamp and Thread Details by Default for java.security.debug&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The “thread” and “timestamp” options that were added to the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.debug&lt;/code&gt; system property in JDK 23 are now on by default.&lt;/p&gt;

    &lt;p&gt;Each debug statement will now also include the thread id, thread name,
caller information (source code and line number) and the date and time.&lt;/p&gt;

    &lt;p&gt;For example, below is a portion of the output of an application run with
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-Djava.security.debug=properties&lt;/code&gt;:&lt;/p&gt;

    &lt;hr /&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;properties[0x1|main|Security.java:161|2024-09-20 09:31:39.929]: java.security
properties[0x1|main|Security.java:122|2024-09-20 09:31:39.931]: Initial security property: jdk.jar.disabledAlgorithms=MD2, MD5, RSA keySize &amp;lt; 1024, DSA keySize &amp;lt; 1024, SHA1 denyAfter 2019-01-01 
properties[0x1|main|Security.java:122|2024-09-20 09:31:39.931]: Initial security property: security.provider.13=SunPKCS11
properties[0x1|main|Security.java:122|2024-09-20 09:31:39.931]: Initial security property: security.provider.12=Apple 
properties[0x1|main|Security.java:122|2024-09-20 09:31:39.931]: Initial security property: http.auth.digest.disabledAlgorithms=MD5, SHA-1
properties[0x1|main|Security.java:122|2024-09-20 09:31:39.932]: Initial security property: jdk.security.legacyAlgorithms=SHA1, RSA keySize &amp;lt; 2048, DSA keySize &amp;lt; 2048, DES, DESede, MD5, RC2, ARCFOUR
properties[0x1|main|Security.java:122|2024-09-20 09:31:39.932]: Initial security property: securerandom.source=file:/dev/random
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8350689&quot;&gt;JDK-8350689&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Javadoc for the java.security.debug Property&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.debug&lt;/code&gt; property is now documented in the
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/security/doc-files/debug-system-property.html#java.security.debug&quot;&gt;javadoc&lt;/a&gt;.
This is a very useful property for debugging security code.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8328914&quot;&gt;JDK-8328914&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</content>
		</entry>
	
		<entry>
			<title>JDK 24 Security Enhancements</title>
			<link href="http://seanjmullan.org/blog/2025/04/07/jdk24"/>
			<updated>2025-04-07T00:00:00+00:00</updated>
			<id>http://seanjmullan.org/blog/2025/04/07/jdk24</id>
			<content type="html">&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/projects/jdk/24/&quot;&gt;JDK 24&lt;/a&gt; was released on March 18, 2025!
As with my previous &lt;a href=&quot;https://seanjmullan.org/blog/&quot;&gt;blogs&lt;/a&gt;, I
have compiled a list of what I think are the most interesting and useful
security enhancements in this release.  I have also grouped
them into appropriate categories (crypto, PKI, etc) which should make
it easier to find out what has changed in each specific area.
The &lt;a href=&quot;https://jdk.java.net/24/release-notes&quot;&gt;JDK 24 release notes&lt;/a&gt;
also contain further details on these and other enhancements.&lt;/p&gt;

&lt;p&gt;This is a significant release for Java Security as it contains two new core
quantum-resistant cryptographic algorithms,
&lt;a href=&quot;https://openjdk.org/jeps/496&quot;&gt;ML-KEM for key encapsulation&lt;/a&gt;, and
&lt;a href=&quot;https://openjdk.org/jeps/497&quot;&gt;ML-DSA for digital signatures&lt;/a&gt;. It also
includes a new
&lt;a href=&quot;https://openjdk.org/jeps/478&quot;&gt;Preview API for Key Derivation Functions&lt;/a&gt;, which 
will be an important building block for subsequent post-quantum cryptography
work. This release also &lt;a href=&quot;https://openjdk.org/jeps/411&quot;&gt;permanently disables the Security Manager&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In addition, JDK 24 includes one other important feature that improves
security but is not part of the security libraries area:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://openjdk.org/jeps/498&quot;&gt;JEP 498&lt;/a&gt;: Warn upon Use of Memory-Access Methods in sun.misc.Unsafe&lt;/p&gt;

    &lt;p&gt;A warning is now issued at run time on the first use of the memory-access
methods in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sun.misc.Unsafe&lt;/code&gt;. These methods were deprecated for removal in
JDK 23 in &lt;a href=&quot;https://openjdk.org/jeps/471&quot;&gt;JEP 471&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of Contents&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#crypto&quot;&gt;Crypto&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#pki&quot;&gt;PKI&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#tls&quot;&gt;TLS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#security-manager&quot;&gt;Security Manager&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#miscellaneous&quot;&gt;Miscellaneous&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;crypto&quot;&gt;Crypto&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;JEP 496: Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SunJCE&lt;/code&gt; provider now supports the quantum-resistant ML-KEM
key encapsulation mechanism. This mechanism is specified in 
&lt;a href=&quot;https://csrc.nist.gov/pubs/fips/203/final&quot;&gt;FIPS 203&lt;/a&gt;, and is
based on lattices. New &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyPairGenerator&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyFactory&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KEM&lt;/code&gt;
implementations for ML-KEM have been added. Three parameter sets in
increasing strength are supported: ML-KEM-512, ML-KEM-768, and ML-KEM-1024.&lt;/p&gt;

    &lt;p&gt;Here is an example which uses ML-KEM to establish a shared secret key
between two parties, a sender and a receiver:&lt;/p&gt;

    &lt;hr /&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;// The receiver generates an ML-KEM-768 key pair
KeyPairGenerator kpg = KeyPairGenerator.getInstance(&quot;ML-KEM&quot;);
kpg.initialize(NamedParameterSpec.ML_KEM_768);
KeyPair kp = kpg.genKeyPair();

// The sender obtains the receiver&apos;s public key from
// an X.509 certificate (this part is not shown)

// The sender generates a key encapsulation message and secret key
// from the receiver’s public key
KEM kem = KEM.getInstance(&quot;ML-KEM&quot;);
KEM.Encapsulator enc = kem.newEncapsulator(receiverCert.getPublicKey());
KEM.Encapsulated encap = enc.encapsulate();
SecretKey skey = encap.key();
byte[] msg = encap.encapsulation(); // send this to the receiver

// The sender then sends the encapsulated message to the receiver
// (this part is not shown)

// The receiver decapsulates the key encapsulation message with its
// private key to obtain the secret key
byte[] msg = …; // received from sender
KEM kem = KEM.getInstance(&quot;ML-KEM&quot;);
KEM.Decapsulator dec = kem.newDecapsulator(kp.getPrivateKey());
SecretKey skey = dec.decapsulate(msg);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keytool&lt;/code&gt; utility also supports generating ML-KEM key pairs. Here is
an example of generating an ML-KEM key pair and certificate:&lt;/p&gt;

    &lt;hr /&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ keytool -keystore ks -storepass changeit \
       -genkeypair -alias ec -keyalg EC \
       -dname CN=EC -ext bc
Generating 384-bit EC (secp384r1) key pair and self-signed certificate (SHA384withECDSA) with a validity of 90 days
    for: CN=EC

$ keytool -keystore ks -storepass changeit \
        -genkeypair -alias mlkem -keyalg ML-KEM \
        -groupname ML-KEM-768 -dname CN=ML-KEM \
        -signer ec
Generating ML-KEM-768 key pair and a certificate (SHA384withECDSA) issued by &amp;lt;ec&amp;gt; with a validity of 90 days
    for: CN=ML-KEM
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;Note that in order to create the certificate, we need a different key to
sign the certificate because ML-KEM itself is not a signature algorithm.
The first command creates an EC key pair and self-signed certificate
and the second command creates an ML-KEM-768 key pair and a certificate
signed by the EC key.&lt;/p&gt;

    &lt;p&gt;JEP: &lt;a href=&quot;https://openjdk.org/jeps/496&quot;&gt;496: Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;JEP 497: Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SUN&lt;/code&gt; provider now supports the quantum-resistant ML-DSA
signature algorithm. This algorithm is specified in 
&lt;a href=&quot;https://csrc.nist.gov/pubs/fips/203/final&quot;&gt;FIPS 204&lt;/a&gt;, and is
based on lattices. New &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyPairGenerator&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyFactory&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Signature&lt;/code&gt;
implementations for ML-DSA have been added. Three parameter sets in
increasing strength are supported: ML-DSA-44, ML-DSA-65, and ML-DSA-87.&lt;/p&gt;

    &lt;p&gt;Using ML-DSA in your applications is very similar to other signature
algorithms. Here is an example which uses ML-DSA to sign and verify
a message:&lt;/p&gt;

    &lt;hr /&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;// The signer generates an ML-DSA-65 key pair
KeyPairGenerator kpg = KeyPairGenerator.getInstance(&quot;ML-DSA&quot;);
kpg.initialize(NamedParameterSpec.ML_DSA_65);
KeyPair kp = kpg.genKeyPair();

// The signer signs a message using its private key
Signature sig = Signature.getInstance(&quot;ML-DSA&quot;);
sig.initSign(kp.getPrivate());
sig.update(message);
byte[] signature = sig.sign();

// The signer then sends the signed message to the verifier
// (this part is not shown)

// The verifier verifies the message using the signer’s public key
// (which in this case is in an X.509 certificate)
Signature sig = Signature.getInstance(&quot;ML-DSA&quot;);
sig.initVerify(signerCert);
sig.update(message);
assert sig.verify(signature);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keytool&lt;/code&gt; utility also supports generating ML-DSA key pairs. Here is
an example of generating an ML-DSA key pair and certificate:&lt;/p&gt;

    &lt;hr /&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ keytool -keystore ks -storepass changeit \
        -genkeypair -alias mldsa -keyalg ML-DSA \
        -groupname ML-DSA-65 -dname CN=ML-DSA
Generating ML-DSA-65 key pair and self-signed certificate (ML-DSA-65) with a validity of 90 days
    for: CN=ML-DSA
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;This command creates an ML-DSA-65 key pair and a self-signed certificate.&lt;/p&gt;

    &lt;p&gt;JEP: &lt;a href=&quot;https://openjdk.org/jeps/497&quot;&gt;497: Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;JEP 478: Key Derivation Function API (Preview)&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A new preview API for deriving keys from key material has been introduced
in this release and is more fully described in 
&lt;a href=&quot;https://openjdk.org/jeps/478&quot;&gt;JEP 478&lt;/a&gt;. It includes an implementation of
the HMAC-based Extract-and-Expand Key Derivation Function (HKDF), which is
defined in &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc5869.html&quot;&gt;RFC 5869&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;KDF will be a very valuable API for several future enhancements that
depend on key derivation. These include PQC mechanisms such as
Hybrid Key Exchange in TLS 1.3
(&lt;a href=&quot;https://datatracker.ietf.org/doc/draft-ietf-tls-hybrid-design/&quot;&gt;IETF Draft&lt;/a&gt;)
and Hybrid Public Key Encryption
(&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9180.html&quot;&gt;RFC 9180&lt;/a&gt;). The API is also
designed to be used for strong and modern password-based algorithms such
as Argon2 (&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9106.html&quot;&gt;RFC 9106&lt;/a&gt;).&lt;/p&gt;

    &lt;p&gt;The main new class is &lt;a href=&quot;https://docs.oracle.com/en/java/javase/24/docs/api/java.base/javax/crypto/KDF.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.crypto.KDF&lt;/code&gt;&lt;/a&gt;. The JEP gives an example of
using the HKDF-SHA256 algorithm to derive a 32 byte AES key:&lt;/p&gt;

    &lt;hr /&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;// Create a KDF object for the specified algorithm
KDF hkdf = KDF.getInstance(&quot;HKDF-SHA256&quot;); 

// Create an ExtractExpand parameter specification
AlgorithmParameterSpec params =
    HKDFParameterSpec.ofExtract()
             .addIKM(initialKeyMaterial)
             .addSalt(salt).thenExpand(info, 32);

// Derive a 32-byte AES key
SecretKey key = hkdf.deriveKey(&quot;AES&quot;, params);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;JEP: &lt;a href=&quot;https://openjdk.org/jeps/478&quot;&gt;478: Key Derivation Function API (Preview)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Standard Hash and MGF Algorithm Names Defined for RSASSA-PSS Signatures&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A new &lt;a href=&quot;https://docs.oracle.com/en/java/javase/24/docs/specs/security/standard-names.html#pssparameterspec&quot;&gt;PSSParameterSpec section&lt;/a&gt;
has been added to the Java Security Standard Algorithm Names Specification
listing the standard hash and MGF (Message Generation Function)
algorithms that can be specified when instantiating a
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/24/docs/api/java.base/java/security/spec/PSSParameterSpec.html#%3Cinit%3E(java.lang.String,java.lang.String,java.security.spec.AlgorithmParameterSpec,int,int)&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.spec.PSSParameterSpec&lt;/code&gt;&lt;/a&gt; object.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8248981&quot;&gt;JDK-8248981&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;SHA3 Performance Improved&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The performance of the SHA3 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MessageDigest&lt;/code&gt; implementations has improved
by 6% to 27%, depending on the platform and the length of the message
digest. This performance improvement applies to the SHA3-224, SHA3-256,
SHA3-384, and SHA3-512 algorithms. An additional 30-40% can be experienced
on AVX-512 capable platforms due to new intrinsic implementations on that
platform.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8333867&quot;&gt;JDK-8333867&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;PKCS#11 Support for AES CTS (Ciphertext Stealing) Mode&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SunPKCS11&lt;/code&gt; provider has been enhanced to support AES Ciphertext
Stealing mode, if the configured PKCS#11 token supports it. The
“AES/CTS/NoPadding”, “AES_128/CTS/NoPadding”, “AES_192/CTS/NoPadding”,
and “AES_256/CTS/NoPadding” &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cipher&lt;/code&gt; algorithms are supported.&lt;/p&gt;

    &lt;p&gt;The PKCS#11 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cipherTextStealingVariant&lt;/code&gt; attribute should be set to
the CTS variant used by the PKCS#11 implementation. These correspond
to the 3 variants defined by NIST SP 800-38A: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CS1&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CS2&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CS3&lt;/code&gt;.
If NSS is used as the PKCS#11 implementation, it automatically sets it
to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CS1&lt;/code&gt;. If this attribute is not set, the CTS modes are disabled by
default.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8330842&quot;&gt;JDK-8330842&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;pki&quot;&gt;PKI&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New Root CA Certificates&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Several new root CA certificates have been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Two SSL.com root CA certificates
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://crt.sh/?id=7439766705&quot;&gt;SSL.com TLS ECC Root CA 2022&lt;/a&gt; has the following distinguished name:
            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=SSL.com TLS ECC Root CA 2022, O=SSL Corporation, C=US
  &lt;/code&gt;
  &lt;/div&gt;
          &lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://crt.sh/?id=7439767372&quot;&gt;SSL.com TLS RSA Root CA 2022&lt;/a&gt; has the following distinguished name:
            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=SSL.com TLS RSA Root CA 2022, O=SSL Corporation, C=US
  &lt;/code&gt;
  &lt;/div&gt;
          &lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;These root certificates have also been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt;
keystore in Oracle’s JDK 23.0.1, 21.0.5, 17.0.13, 11.0.25, and 8u431 releases.&lt;/p&gt;

        &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8341057&quot;&gt;JDK-8341057&lt;/a&gt;&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;tls&quot;&gt;TLS&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New Wildcard Mechanism for Disabling TLS Cipher Suites&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.disabledAlgorithms&lt;/code&gt; security property has been enhanced to
support disabling TLS cipher suites using a wildcard syntax. This
new syntax allows you to more easily disable more than one cipher suite.
For example, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TLS_RSA_*&lt;/code&gt; would disable all cipher suites starting with
“TLS_RSA_”. Only cipher suites starting with “TLS_” can be disabled using
this mechanism.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8341964&quot;&gt;JDK-8341964&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Entrust TLS Server Certificates Distrusted&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The JDK will no longer trust TLS Server certificates issued by Entrust.
The list of affected certificates includes certificates branded as Entrust
and AffirmTrust, which was managed by Entrust. TLS Server certificates
issued on or before November 11, 2024 will continue to be trusted until
they expire. Certificates issued after that date will be rejected. See
the &lt;a href=&quot;https://jdk.java.net/24/release-notes#JDK-8337664&quot;&gt;release note&lt;/a&gt; for
more information and a list of Certificate Authorities that are affected.&lt;/p&gt;

    &lt;p&gt;This change has already been made in Oracle’s JDK 23.0.1, 21.0.5, 17.0.13,
11.0.25, and 8u431 releases.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8337664&quot;&gt;JDK-8337664&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;TLS_RSA Cipher Suites Disabled by Default&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The TLS_RSA cipher suites are now disabled by default. These cipher suites
do not preserve forward secrecy and &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9325&quot;&gt;RFC 9325&lt;/a&gt;
recommends that they should not be used. This change disables any cipher
suite starting with “TLS_RSA_”.&lt;/p&gt;

    &lt;p&gt;Users can re-enable these cipher suites, at their own risk, by removing
“TLS_RSA_*” from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.disabledAlgorithms&lt;/code&gt; security property in the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security&lt;/code&gt; configuration file.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8245545&quot;&gt;JDK-8245545&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;security-manager&quot;&gt;Security Manager&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Permanently Disable the Security Manager&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;In JDK 17, the Security Manager was deprecated for removal via JEP 411.
This included the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.lang.SecurityManager&lt;/code&gt; API and several APIs related
to the Security Manager.&lt;/p&gt;

    &lt;p&gt;In this release, we have taken the next major step and permanently
disabled the Security Manager. It is no longer possible to enable a
Security Manager at startup on the command line, or at run time by
calling &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;System.setSecurityManager&lt;/code&gt;. The Security Manager
related APIs have been degraded to be non-functional or to behave as
in prior releases when a Security Manager was not enabled.&lt;/p&gt;

    &lt;p&gt;Developers should take action to remove dependencies on the Security
Manager, if applicable. There are several methods you can use to
determine if your code is dependent on the Security Manager:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Check scripts or documentation for Security Manager references&lt;/li&gt;
      &lt;li&gt;Run the application on one of JDK 17 through 23 and look for
deprecation warnings on the console&lt;/li&gt;
      &lt;li&gt;Run the application on one of JDK 17 through 23 with the command-line
option &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-Djava.security.manager=disallow&lt;/code&gt;. If the code is dynamically
setting a Security Manager, it will throw an
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UnsupportedOperationException&lt;/code&gt;.&lt;/li&gt;
      &lt;li&gt;Use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdeprscan&lt;/code&gt; tool on JDK 17 or later to scan for uses of
deprecated Security Manager APIs&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;The JVM will exit with a fatal error at startup if an application is run
with a Security Manager, ex:&lt;/p&gt;

    &lt;hr /&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;java –Djava.security.manager MyApp

Error occurred during initialization of VM
java.lang.Error: A command line option has attempted to allow or enable the Security Manager. Enabling a Security Manager is not supported.
        at java.lang.System.initPhase3(java.base@24-internal/System.java:2067)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;If an application enables a Security Manager at run time, an
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UnsupportedOperationException&lt;/code&gt; will be thrown, ex:&lt;/p&gt;

    &lt;hr /&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;java MyApp
    
Exception in thread &quot;main&quot; java.lang.UnsupportedOperationException: Setting a Security Manager is not supported
        at java.base/java.lang.System.setSecurityManager(System.java:320)
        ...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;Libraries supporting the Security Manager typically use one or two common
coding patterns, ex:&lt;/p&gt;

    &lt;hr /&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;// checking permissions
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
    sm.checkPermission(...);
}

// asserting privileges
SomeType v = AccessController.doPrivileged(
    (PrivilegedAction&amp;lt;SomeType&amp;gt;)() -&amp;gt; {
        ...
        return theResult;
});
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;These methods will behave the same as in previous JDK releases when a
Security Manager was not enabled: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;System.getSecurityManager&lt;/code&gt; will always
return &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;null&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AccessController.doPrivileged&lt;/code&gt; will execute the action
immediately.&lt;/p&gt;

    &lt;p&gt;A small number of applications or libraries use advanced parts of the
Security Manager APIs, ex: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AccessController::checkPermission&lt;/code&gt; to check
permissions directly, or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Policy::setPolicy&lt;/code&gt; to use a custom policy
implementation.&lt;/p&gt;

    &lt;p&gt;These APIs, among others, have been degraded to throw exceptions or
provide an execution environment that disallows access to all resources by
default.&lt;/p&gt;

    &lt;p&gt;For applications that use JAAS, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Subject.getSubject&lt;/code&gt; has been changed to
always throw &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UnsupportedOperationException&lt;/code&gt;. This API depends on the
terminally deprecated &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AccessControlContext&lt;/code&gt; API. Replacement APIs were
added in JDK 18. If using this API, you must replace calls to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Subject.getSubject&lt;/code&gt; with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Subject.current&lt;/code&gt; and you should replace calls
to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Subject.doAs&lt;/code&gt; with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Subject.callAs&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;See the &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8266577&quot;&gt;CSR&lt;/a&gt; for a complete list of API changes.&lt;/p&gt;

    &lt;p&gt;In a future release the Security Manager APIs will be removed.&lt;/p&gt;

    &lt;p&gt;JEP: &lt;a href=&quot;https://openjdk.java.net/jeps/411&quot;&gt;486: Permanently Disable the Security Manager&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;miscellaneous&quot;&gt;Miscellaneous&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Support for Including Security Properties Files&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security&lt;/code&gt; security properties file now supports including
other properties files. A new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;include &amp;lt;file&amp;gt;&lt;/code&gt; directive can be added
to include another properties file. The effect of including a file is
equivalent to defining its properties inline at the inclusion point.
This feature is very useful for defining different property files
that can be included based on different security profiles.&lt;/p&gt;

    &lt;p&gt;For more information and examples, see the
&lt;a href=&quot;https://docs-uat.us.oracle.com/en/java/javase/24/security/security-properties-file.html#GUID-FF09EB34-CD27-4D1B-B55B-A4A4E6A0F039&quot;&gt;Security Properties Files Inclusion section&lt;/a&gt;
of the Security Developer Guide.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8319332&quot;&gt;JDK-8319332&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</content>
		</entry>
	
		<entry>
			<title>JDK 23 Security Enhancements</title>
			<link href="http://seanjmullan.org/blog/2024/09/17/jdk23"/>
			<updated>2024-09-17T00:00:00+00:00</updated>
			<id>http://seanjmullan.org/blog/2024/09/17/jdk23</id>
			<content type="html">&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/projects/jdk/23/&quot;&gt;JDK 23&lt;/a&gt; was released on September 17, 2024!
As with my previous &lt;a href=&quot;https://seanjmullan.org/blog/&quot;&gt;blogs&lt;/a&gt;, I
have compiled a list of what I think are the most interesting and useful
security enhancements in this release.  I have also grouped
them into appropriate categories (crypto, PKI, etc) which should make
it easier to find out what has changed in each specific area.
The &lt;a href=&quot;https://jdk.java.net/23/release-notes&quot;&gt;JDK 23 release notes&lt;/a&gt;
also contain further details on these and other enhancements.&lt;/p&gt;

&lt;p&gt;Highlights of this release include new “thread” and “timestamp” 
debugging options, crypto related performance improvements, and a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyStore&lt;/code&gt;
for accessing root certificates in the MacOS KeyChain.&lt;/p&gt;

&lt;p&gt;Also, one other important JDK 23 feature that is not part of the security
libraries area but is worth mentioning is:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://openjdk.org/jeps/471&quot;&gt;JEP 471&lt;/a&gt;: Deprecate the Memory-Access Methods in sun.misc.Unsafe for Removal&lt;/p&gt;

    &lt;p&gt;This JEP deprecates the memory-access methods in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sun.misc.Unsafe&lt;/code&gt; for
removal in a future release. Quoting from the JEP:
“Removing the memory-access methods in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sun.misc.Unsafe&lt;/code&gt; is part of a
long-term coordinated effort to ensure that the Java Platform has
&lt;a href=&quot;https://openjdk.org/jeps/8305968&quot;&gt;integrity by default&lt;/a&gt;.”&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of Contents&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#crypto&quot;&gt;Crypto&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#pki&quot;&gt;PKI&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#authorization&quot;&gt;Authorization&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#kerberos&quot;&gt;Kerberos&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#miscellaneous&quot;&gt;Miscellaneous&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;crypto&quot;&gt;Crypto&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Increased CipherInputStream buffer size&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The buffer size of &lt;a href=&quot;https://docs.oracle.com/en/java/javase/23/docs/api/java.base/javax/crypto/CipherInputStream.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.crypto.CipherInputStream&lt;/code&gt;&lt;/a&gt;
has been increased from 512 bytes to 8192 bytes. This change can improve
performance and is more consistent with buffer sizes for other APIs such as
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.io.FileInputStream&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8330108&quot;&gt;JDK-833018&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New SecureRandom() performance improved&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The performance of constructing a &lt;a href=&quot;https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/security/SecureRandom.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.SecureRandom&lt;/code&gt;&lt;/a&gt;
object via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;new SecureRandom()&lt;/code&gt; has been improved.&lt;/p&gt;

    &lt;p&gt;Issues: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8324646&quot;&gt;JDK-8324646&lt;/a&gt;,
        &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8324648&quot;&gt;JDK-8324648&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New PKCS11 allowLegacy attribute&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A new PKCS11 configuration attribute named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;allowLegacy&lt;/code&gt; has been
introduced. Applications can set this value to “true” to bypass
legacy checks. The default value is “false”.&lt;/p&gt;

    &lt;p&gt;As cryptographic algorithms weaken, some PKCS11 libraries may begin
limiting the use of these algorithms. For example, a PKCS11 library
may allow an application to verify existing signatures signed with
a particular algorithm, but forbid new signatures to be generated with
that algorithm. This attribute allows applications to workaround these
restrictions if necessary, at their own risk.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8293345&quot;&gt;JDK-8293345&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;pki&quot;&gt;PKI&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New root CA certificates&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Several new root CA certificates have been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Two Certainly root CA certificates
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://crt.sh/?id=5150405959&quot;&gt;Certainly Root R1&lt;/a&gt; has the following distinguished name:
            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=Certainly Root R1, O=Certainly, C=US
  &lt;/code&gt;
  &lt;/div&gt;
          &lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://crt.sh/?id=5150403703&quot;&gt;Certainly Root E1&lt;/a&gt; has the following distinguished name:
            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=Certainly Root E1, O=Certainly, C=US
  &lt;/code&gt;
  &lt;/div&gt;
          &lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;These root certificates have also been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt;
keystore in Oracle’s JDK 22.0.1, 21.0.3, 17.0.11, 11.0.23, 8u411, and
7u421 releases.&lt;/p&gt;

        &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8321408&quot;&gt;JDK-8321408&lt;/a&gt;&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;Two GlobalSign root CA certificates
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://crt.sh/?id=1730333109&quot;&gt;GlobalSign Root R46&lt;/a&gt; has the following distinguished name:
            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
CN=GlobalSign Root R46, O=GlobalSign nv-sa, C=BE
&lt;/code&gt;
&lt;/div&gt;
          &lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://crt.sh/?id=1730335161&quot;&gt;GlobalSign Root E46&lt;/a&gt; has the following distinguished name:
            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
CN=GlobalSign Root E46, O=GlobalSign nv-sa, C=BE
&lt;/code&gt;
&lt;/div&gt;
          &lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;These root certificates have also been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt;
keystore in Oracle’s JDK 22.0.2, 21.0.4, 17.0.12, 11.0.24, 8u421,
and 7u431 releases.&lt;/p&gt;

        &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8316138&quot;&gt;JDK-8316138&lt;/a&gt;&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New KeyStore for MacOS root certificates&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A new &lt;a href=&quot;https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/security/KeyStore.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.KeyStore&lt;/code&gt;&lt;/a&gt; named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeychainStore-ROOT&lt;/code&gt; has been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Apple&lt;/code&gt;
security provider. This keystore contains root certificates stored in
the system keychain on MacOS systems. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Apple&lt;/code&gt; provider now supports
two KeyStores, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeychainStore-Root&lt;/code&gt; and the existing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeychainStore&lt;/code&gt; 
which contains private keys and certificates for the user’s keychain.&lt;/p&gt;

    &lt;p&gt;This enhancement will fix issues that caused HTTPs connections to fail
because the JDK was unable to find a root certificate to
establish trust in the peer’s certificate chain. After this change,
users should set the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.net.ssl.trustStoreType&lt;/code&gt; system
property to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeychainStore-ROOT&lt;/code&gt; when making TLS connections.&lt;/p&gt;

    &lt;p&gt;Here is an example of using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keytool&lt;/code&gt; utility to list the roots
in the MacOS KeyChain:&lt;/p&gt;

    &lt;hr /&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;keytool -list -storetype KeychainStore-ROOT -keystore NONE
Enter keystore password:  

*****************  WARNING WARNING WARNING  *****************
* The integrity of the information stored in your keystore  *
* has NOT been verified!  In order to verify its integrity, *
* you must provide your keystore password.                  *
*****************  WARNING WARNING WARNING  *****************

Keystore type: KEYCHAINSTORE-ROOT
Keystore provider: Apple

Your keystore contains 153 entries

aaa certificate services, Sep 20, 2024, trustedCertEntry, 
Certificate fingerprint (SHA-256): D7:A7:A0:FB:5D:7E:27:31:D7:71:E9:48:4E:BC:DE:F7:1D:5F:0C:3E:0A:29:48:78:2B:C8:3E:E0:EA:69:9E:F4
ac raiz fnmt-rcm, Sep 20, 2024, trustedCertEntry, 
Certificate fingerprint (SHA-256): EB:C5:57:0C:29:01:8C:4D:67:B1:AA:12:7B:AF:12:F7:03:B4:61:1E:BC:17:B7:DA:B5:57:38:94:17:9B:93:FA
accvraiz1, Sep 20, 2024, trustedCertEntry, 
Certificate fingerprint (SHA-256): 9A:6E:C0:12:E1:A7:DA:9D:BE:34:19:4D:47:8A:D7:C0:DB:18:22:FB:07:1D:F1:29:81:49:6E:D1:04:38:41:13
actalis authentication root ca, Sep 20, 2024, trustedCertEntry, 
Certificate fingerprint (SHA-256): 55:92:60:84:EC:96:3A:64:B9:6E:2A:BE:01:CE:0B:A8:6A:64:FB:FE:BC:C7:AA:B5:AF:C1:55:B3:7F:D7:60:66
...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8320362&quot;&gt;JDK-8320362&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New system property to use POST for all OCSP requests&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;JDK 17 introduced a performance enhancement whereby the JDK uses
the HTTP GET method for small OCSP requests, and POST for all other
requests. However, some OCSP responders do not handle GET requests
well, and this has caused issues that can’t be easily worked around.&lt;/p&gt;

    &lt;p&gt;Thus, a new system property named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.sun.security.ocsp.useget&lt;/code&gt; has been
introduced. When set to “false”, the JDK will &lt;em&gt;only&lt;/em&gt; use the HTTP
POST method when submitting OCSP requests. The default if not set, is
“true” with the behavior being the same as before.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8328638&quot;&gt;JDK-8328638&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;authorization&quot;&gt;Authorization&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Subject.getSubject() now throws UnsupportedOperationException unless a Security Manager is allowed or enabled&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;a href=&quot;https://docs.oracle.com/en/java/javase/23/docs/api/java.base/javax/security/auth/Subject.html#getSubject(java.security.AccessControlContext)&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;getSubject&lt;/code&gt;&lt;/a&gt; method of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.security.auth.Subject&lt;/code&gt; has been
changed to throw an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UnsupportedOperationException&lt;/code&gt;. Users can revert
to previous behavior by allowing or enabling a Security Manager on the
command line, via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-Djava.security.manager&lt;/code&gt;. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Subject.getSubject&lt;/code&gt;
method does not depend on a Security Manager but requires the feature be
“allowed” due to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AccessControlContext&lt;/code&gt; parameter.&lt;/p&gt;

    &lt;p&gt;This change was made to prepare users for a future release where this
method will be changed to &lt;em&gt;always&lt;/em&gt; throw &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UnsupportedOperationException&lt;/code&gt;.
This method is problematic because it depends on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AccessControlContext&lt;/code&gt;,
which is one of the Security Manager APIs that was &lt;a href=&quot;https://openjdk.org/jeps/411&quot;&gt;deprecated for
removal in JDK 17&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;The good news is that a replacement API (&lt;a href=&quot;https://docs.oracle.com/en/java/javase/23/docs/api/java.base/javax/security/auth/Subject.html#current()&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Subject.current()&lt;/code&gt;&lt;/a&gt;) was added
in JDK 18. Applications and libraries should strongly consider replacing
their calls to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Subject.getSubject()&lt;/code&gt; with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Subject.current()&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8296244&quot;&gt;JDK-8296244&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;kerberos&quot;&gt;Kerberos&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New security/system property to support case-sensitive principal names&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A new security property named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.security.krb5.name.case.sensitive&lt;/code&gt; has
been introduced to allow Kerberos principal names to be looked up in
keytab and credential cache files in a case-sensitive manner. Prior to
this change, principal names were always treated as case-insensitive,
meaning a principal name of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SEAN@ACME.ORG&lt;/code&gt; would match &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sean@acme.org&lt;/code&gt;.
However, some Kerberos implementations treat these principals as distinct.&lt;/p&gt;

    &lt;p&gt;If the property is set to “true”, the JDK Kerberos implementation will
use a case-sensitive comparison when matching principal names.
The default value of this property, if not set, is “false” to
preserve existing behavior. A system property of the same name can
also be used, and it will override the value of the security property.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8331975&quot;&gt;JDK-8331975&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Enhanced Kerberos debugging&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Debug output of the Kerberos component is now directed to standard
error instead of standard output. Each message is now prefixed with
the Kerberos subcomponent that it applies to: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;krb5loginmodule&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jgss&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;krb5&lt;/code&gt;, etc.&lt;/p&gt;

    &lt;p&gt;Here is example output of debugging code with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sun.security.krb5.debug&lt;/code&gt;
system property set to “true”:&lt;/p&gt;

    &lt;hr /&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;krb5: Java config name: null
krb5: Native config name: /etc/krb5.conf
krb5: Loading config file from /etc/krb5.conf
krb5: Loaded from native config
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8327818&quot;&gt;JDK-8327818&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;miscellaneous&quot;&gt;Miscellaneous&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New “thread” and “timestamp” options for the java.security.debug system property&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;New “thread” and “timestamp” options have been added to the 
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.debug&lt;/code&gt; system property to help you debug applications.&lt;/p&gt;

    &lt;p&gt;The “thread” option will print the thread and caller information of
each debug statement. The “timestamp” option will print the date and
time of each debug statement. These new options can be extremely helpful
when debugging multi-threaded applications.&lt;/p&gt;

    &lt;p&gt;The options can be appended with a “+” sign to a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.debug&lt;/code&gt;
setting. For example, below is a portion of the output of an application
run with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-Djava.security.debug=properties+thread+timestamp&lt;/code&gt;. Each
debug line contains a timestamp and the thread id and caller.&lt;/p&gt;

    &lt;hr /&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;properties[0x1|main|Security.java:161|2024-09-20 09:31:39.929]: java.security
properties[0x1|main|Security.java:122|2024-09-20 09:31:39.931]: Initial security property: jdk.jar.disabledAlgorithms=MD2, MD5, RSA keySize &amp;lt; 1024, DSA keySize &amp;lt; 1024, SHA1 denyAfter 2019-01-01
properties[0x1|main|Security.java:122|2024-09-20 09:31:39.931]: Initial security property: security.provider.13=SunPKCS11
properties[0x1|main|Security.java:122|2024-09-20 09:31:39.931]: Initial security property: security.provider.12=Apple
properties[0x1|main|Security.java:122|2024-09-20 09:31:39.931]: Initial security property: http.auth.digest.disabledAlgorithms=MD5, SHA-1
properties[0x1|main|Security.java:122|2024-09-20 09:31:39.932]: Initial security property: jdk.security.legacyAlgorithms=SHA1, RSA keySize &amp;lt; 2048, DSA keySize &amp;lt; 2048, DES, DESede, MD5, RC2, ARCFOUR
properties[0x1|main|Security.java:122|2024-09-20 09:31:39.932]: Initial security property: securerandom.source=file:/dev/random
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8051959&quot;&gt;JDK-8051959&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</content>
		</entry>
	
		<entry>
			<title>JDK 22 Security Enhancements</title>
			<link href="http://seanjmullan.org/blog/2024/03/20/jdk22"/>
			<updated>2024-03-20T00:00:00+00:00</updated>
			<id>http://seanjmullan.org/blog/2024/03/20/jdk22</id>
			<content type="html">&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/projects/jdk/22/&quot;&gt;JDK 22&lt;/a&gt; was released on March 19, 2024!
As with my previous &lt;a href=&quot;https://seanjmullan.org/blog/&quot;&gt;blogs&lt;/a&gt;, I
have compiled a list of what I think are the most interesting and useful
security enhancements in this release.  I have also grouped
them into appropriate categories (crypto, TLS, etc) which should make
it easier to find out what has changed in each specific area.
The &lt;a href=&quot;https://jdk.java.net/22/release-notes&quot;&gt;JDK 22 release notes&lt;/a&gt;
also contain further details on these and other enhancements.&lt;/p&gt;

&lt;p&gt;Highlights of this release include a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;security&lt;/code&gt; category for the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java -XshowSettings&lt;/code&gt; option and several new root CA certificates.&lt;/p&gt;

&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of Contents&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#crypto&quot;&gt;Crypto&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#pki&quot;&gt;PKI&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#tls&quot;&gt;TLS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#xml-signature&quot;&gt;XML Signature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#tools&quot;&gt;Tools&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;crypto&quot;&gt;Crypto&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New java.security.AsymmetricKey interface&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A new standard interface named
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/security/AsymmetricKey.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.AsymmetricKey&lt;/code&gt;&lt;/a&gt;
has been added. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AsymmetricKey&lt;/code&gt; is a subinterface of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.Key&lt;/code&gt;
and represents an asymmetric key, which can either be a private or public
key. The existing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.PublicKey&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.PrivateKey&lt;/code&gt;
classes have been retrofitted to be subinterfaces of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AsymmetricKey&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AsymmetricKey&lt;/code&gt; interface provides a default implementation of the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;getParams&lt;/code&gt; method which returns &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;null&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;All asymmetric key subclasses now have a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;getParams&lt;/code&gt; method. This has two
primary benefits:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Application code can retrieve parameters from a public or private key
without using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;instanceof&lt;/code&gt; to first determine the subclass.&lt;/li&gt;
      &lt;li&gt;Many asymmetric algorithm parameters can be represented using the
existing &lt;a href=&quot;https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/security/spec/NamedParameterSpec.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NamedParameterSpec&lt;/code&gt;&lt;/a&gt;
subclass. As future asymmetric algorithms are introduced, the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AsymmetricKey&lt;/code&gt; interface will allow earlier versions of Java SE to
more easily support new asymmetric algorithms that can represent their
parameters as a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NamedParameterSpec&lt;/code&gt;, thus avoiding the need to
introduce new algorithm-specific &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AlgorithmParameterSpec&lt;/code&gt; APIs.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8318096&quot;&gt;JDK-8318096&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;The jdk.crypto.ec module has been subsumed into java.base&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.crypto.ec&lt;/code&gt; module is now deprecated with the intent to eventually
remove it. All of the code in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.crypto.ec&lt;/code&gt; module has been moved
into the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.base&lt;/code&gt; module. This includes the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SunEC&lt;/code&gt; security provider.
The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.crypto.ec&lt;/code&gt; module still exists, but it is now empty.&lt;/p&gt;

    &lt;p&gt;This change will make it easier for users to deploy applications that
depend on elliptic curve cryptographic algorithms.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8308398&quot;&gt;JDK-8308398&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;pki&quot;&gt;PKI&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New root CA certificates&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Several new root CA certificates have been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Three eMudhra Technologies root CA certificates
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://crt.sh/?caid=96590&quot;&gt;emSign Root CA - G1&lt;/a&gt; has the following distinguished name:
            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=emSign Root CA - G1, O=eMudhra Technologies Limited, OU=emSign PKI, C=IN
  &lt;/code&gt;
  &lt;/div&gt;
          &lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://crt.sh/?caid=96589&quot;&gt;emSign Root CA - G2&lt;/a&gt; has the following distinguished name:
            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=emSign Root CA - G2, O=eMudhra Technologies Limited, OU=emSign PKI, C=IN
  &lt;/code&gt;
  &lt;/div&gt;
          &lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://crt.sh/?caid=96593&quot;&gt;emSign ECC Root CA - G3&lt;/a&gt; has the following distinguished name:
            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=emSign ECC Root CA - G3, O=eMudhra Technologies Limited, OU=emSign PKI, C=IN
  &lt;/code&gt;
  &lt;/div&gt;
          &lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8319187&quot;&gt;JDK-8319187&lt;/a&gt;&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;Four DigiCert root CA certificates
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://crt.sh/?caid=207461&quot;&gt;DigiCert TLS RSA4096 Root G5&lt;/a&gt; has the following distinguished name:
            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
CN=DigiCert TLS RSA4096 Root G5, O=&quot;DigiCert, Inc.&quot;, C=US
&lt;/code&gt;
&lt;/div&gt;
          &lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://crt.sh/?caid=207460&quot;&gt;DigiCert TLS ECC P384 Root G5&lt;/a&gt; has the following distinguished name:
            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
CN=DigiCert TLS ECC P384 Root G5, O=&quot;DigiCert, Inc.&quot;, C=US
&lt;/code&gt;
&lt;/div&gt;
          &lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://crt.sh/?caid=208332&quot;&gt;DigiCert CS RSA4096 Root G5&lt;/a&gt; has the following distinguished name:
            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
CN=DigiCert CS RSA4096 Root G5, O=&quot;DigiCert, Inc.&quot;, C=US
&lt;/code&gt;
&lt;/div&gt;
          &lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://crt.sh/?caid=208331&quot;&gt;DigiCert CS ECC P384 Root G5&lt;/a&gt; has the following distinguished name:
            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
CN=DigiCert CS ECC P384 Root G5, O=&quot;DigiCert, Inc.&quot;, C=US
&lt;/code&gt;

&lt;/div&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
        &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8318759&quot;&gt;JDK-8318759&lt;/a&gt;&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://crt.sh/?caid=183269&quot;&gt;Let’s Encrypt ISRG Root X2&lt;/a&gt; has the following distinguished name:
        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
 &lt;code&gt;
 CN=ISRG Root X2, O=Internet Security Research Group, C=US
 &lt;/code&gt;
 &lt;/div&gt;

        &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8317374&quot;&gt;JDK-8317374&lt;/a&gt;&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://crt.sh/?caid=109075&quot;&gt;Telia Root CA v2&lt;/a&gt; has the following distinguished name:
        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
 &lt;code&gt;
 CN=Telia Root CA v2, O=Telia Finland Oyj, C=FI
 &lt;/code&gt;
 &lt;/div&gt;

        &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8317373&quot;&gt;JDK-8317373&lt;/a&gt;&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://crt.sh/?caid=18456&quot;&gt;Certigna Root CA&lt;/a&gt; has the following distinguished name:
        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
 &lt;code&gt;
 CN=Certigna Root CA, OU=0002 48146308100036, O=Dhimyotis, C=FR
 &lt;/code&gt;
 &lt;/div&gt;

        &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8314960&quot;&gt;JDK-8314960&lt;/a&gt;&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these root certificates have also been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt;
   keystore in Oracle’s JDK 21.0.2, 17.0.10, 11.0.22, 8u401, and 7u411 releases.&lt;/p&gt;

&lt;h3 id=&quot;tls&quot;&gt;TLS&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Additional system properties to control maximum length of client and server certificate chains&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Additional system properties named
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.client.maxInboundCertificateChainLength&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.server.maxInboundCertificateChainLength&lt;/code&gt; have been added to
allow users to control the maximum length of TLS server and client
certificate chains. These properties provide flexibility by having
separate properties for client and server configurations.&lt;/p&gt;

    &lt;p&gt;On the client side, a user would set
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.client.maxInboundCertificateChainLength&lt;/code&gt; to an integer value if
they want to control the maximum size of a server’s certificate chain,
for example:&lt;/p&gt;

    &lt;hr /&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ java -Djdk.tls.client.maxInboundCertificateChainLength=7 ... &amp;lt;rest of command line&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;On the server side, a user would set
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.server.maxInboundCertificateChainLength&lt;/code&gt; to an integer value if
they want to control the maximum size of a client’s certificate chain, for
example:&lt;/p&gt;

    &lt;hr /&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ java -Djdk.tls.server.maxInboundCertificateChainLength=5 ... &amp;lt;rest of command line&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;These properties, if set, override the existing
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.maxCertificateChainLength&lt;/code&gt; system property. If properties are not
set, a default of 10 is used for server certificate chains, and 8 for
client certificate chains.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8311596&quot;&gt;JDK-8311596&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;xml-signature&quot;&gt;XML Signature&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Support for SHA-3 based RSA signature algorithms&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The JDK XML Signature implementation now supports XML signatures
signed with RSA signature algorithms with SHA-3 digests.&lt;/p&gt;

    &lt;p&gt;Four new standard &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SignatureMethod&lt;/code&gt; URIs have also been added:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/22/docs/api/java.xml.crypto/javax/xml/crypto/dsig/SignatureMethod.html#SHA3_224_RSA_MGF1&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SignatureMethod.SHA3_224_RSA_MGF1&lt;/code&gt;&lt;/a&gt;:
the RSA signature algorithm with SHA3-224 and MGF1.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/22/docs/api/java.xml.crypto/javax/xml/crypto/dsig/SignatureMethod.html#SHA3_256_RSA_MGF1&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SignatureMethod.SHA3_256_RSA_MGF1&lt;/code&gt;&lt;/a&gt;:
the RSA signature algorithm with SHA3-256 and MGF1.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/22/docs/api/java.xml.crypto/javax/xml/crypto/dsig/SignatureMethod.html#SHA3_384_RSA_MGF1&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SignatureMethod.SHA3_384_RSA_MGF1&lt;/code&gt;&lt;/a&gt;:
the RSA signature algorithm with SHA3-384 and MGF1.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/22/docs/api/java.xml.crypto/javax/xml/crypto/dsig/SignatureMethod.html#SHA3_512_RSA_MGF1&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SignatureMethod.SHA3_512_RSA_MGF1&lt;/code&gt;&lt;/a&gt;:
the RSA signature algorithm with SHA3-512 and MGF1.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8319124&quot;&gt;JDK-8319124&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;tools&quot;&gt;Tools&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;keytool and jarsigner support for the HSS/LMS signature algorithm&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;In JDK 21, we added JCE support for the HSS/LMS signature algorithm (see my
&lt;a href=&quot;https://seanjmullan.org/blog/2023/09/22/jdk21&quot;&gt;JDK 21 blog&lt;/a&gt; for more
details). In this release, we have extended that functionality by also
adding HSS/LMS support to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jarsigner&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keytool&lt;/code&gt; utilities.&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jarsigner&lt;/code&gt; now supports signing and verifying JAR files with the
HSS/LMS algorithm.  &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keytool&lt;/code&gt; now supports generating HSS/LMS public
keypairs.&lt;/p&gt;

    &lt;p&gt;Note that the JDK only supports HSS/LMS signature &lt;em&gt;verification&lt;/em&gt;, so in
order to sign JAR files with HSS/LMS, you will need to use a 3rd party
provider that supports signing. Similarly, in order to generate key pairs
you will also need to use a 3rd party provider that supports generation
of HSS/LMS keypairs.&lt;/p&gt;

    &lt;p&gt;An example of generating an HSS/LMS keypair with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keytool&lt;/code&gt; is as follows:&lt;/p&gt;

    &lt;hr /&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ keytool -genkeypair -alias Duke -dname CN=&quot;Duke&quot; -keystore &amp;lt;keystore&amp;gt; -keyalg HSS/LMS \
  -groupname LMS_SHA256_M24_H5,LMOTS_SHA256_N24_W1,LMS_SHA256_M24_H5,LMOTS_SHA256_N24_W1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;This will generate an HSS/LMS keypair with the specified group names.
You may also need to specify additional options to specify the third
party JCE provider that supports HSS/LMS keypair generation.&lt;/p&gt;

    &lt;p&gt;An example of signing a JAR with HSS/LMS with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jarsigner&lt;/code&gt; is as follows:&lt;/p&gt;

    &lt;hr /&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ jarsigner -keystore &amp;lt;keystore&amp;gt; -sigalg HSS/LMS &amp;lt;jarfile&amp;gt; Duke
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;This will sign a JAR file with the HSS/LMS signature algorithm using the
private key stored in the specified keystore with an alias name of “Duke”.
You may also need to specify additional options to specify the third party
JCE provider that supports HSS/LMS signing. Also, note that it isn’t
necessary to specify the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-sigalg&lt;/code&gt; option as it will by default be
determined based on the private key’s algorithm.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8302233&quot;&gt;JDK-8302233&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New security category for the java -XshowSettings option&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java -XshowSettings&lt;/code&gt; option can be used to print useful information
about the current JDK configuration, such as system properties, VM settings,
and more. In JDK 22, this option has been enhanced to show details
about security related settings. The syntax of the new option is as
follows:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-XshowSetttings:security&lt;/code&gt; will show all security settings.&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-XshowSetttings:security:properties&lt;/code&gt; will show the values of security
 properties.&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-XshowSetttings:security:providers&lt;/code&gt; will show the installed security
 providers and their supported algorithms.&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-XshowSetttings:security:tls&lt;/code&gt; will show the enabled TLS protocols and
 cipher suites.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Here are sample runs showing each of these options:&lt;/p&gt;

    &lt;hr /&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ java -XshowSettings:security:properties
Security properties:
    crypto.policy=unlimited
    http.auth.digest.disabledAlgorithms=MD5, SHA-1
    jceks.key.serialFilter=
        java.base/java.lang.Enum;
        java.base/java.security.KeyRep;
        java.base/java.security.KeyRep$Type;
        java.base/javax.crypto.spec.SecretKeySpec;
        !*
    jdk.certpath.disabledAlgorithms=
        MD2,
        MD5,
        SHA1 jdkCA &amp;amp; usage TLSServer,
        RSA keySize &amp;lt; 1024,
        DSA keySize &amp;lt; 1024,
        EC keySize &amp;lt; 224,
        SHA1 usage SignedJAR &amp;amp; denyAfter 2019-01-01
    jdk.io.permissionsUseCanonicalPath=false
    jdk.jar.disabledAlgorithms=
        MD2,
        MD5,
        RSA keySize &amp;lt; 1024,
        DSA keySize &amp;lt; 1024,
        SHA1 denyAfter 2019-01-01
    jdk.sasl.disabledMechanisms=
    jdk.security.caDistrustPolicies=SYMANTEC_TLS
    jdk.security.legacyAlgorithms=
        SHA1,
        RSA keySize &amp;lt; 2048,
        DSA keySize &amp;lt; 2048,
        DES,
        DESede,
        MD5,
        RC2,
        ARCFOUR
    jdk.tls.alpnCharset=ISO_8859_1
    jdk.tls.disabledAlgorithms=
        SSLv3,
        TLSv1,
        TLSv1.1,
        DTLSv1.0,
        RC4,
        DES,
        MD5withRSA,
        DH keySize &amp;lt; 1024,
        EC keySize &amp;lt; 224,
        3DES_EDE_CBC,
        anon,
        NULL,
        ECDH
&amp;lt;remaining output snipped&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;
&lt;hr /&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    $ java -XshowSettings:security:providers
    Security provider static configuration: (in order of preference)
        ----------------------------------------
        Provider name: SUN
        Provider information: SUN (DSA key/parameter generation; DSA signing;
            SHA-1, MD5 digests; SecureRandom; X.509 certificates; PKCS12, JKS &amp;amp;
            DKS keystores; PKIX CertPathValidator; PKIX CertPathBuilder; LDAP,
            Collection CertStores, JavaPolicy Policy; JavaLoginConfig
            Configuration)
        Provider services: (type : algorithm)
            AlgorithmParameterGenerator.DSA
              aliases: [OID.1.2.840.10040.4.1, 1.3.14.3.2.12, 1.2.840.10040.4.1]
            AlgorithmParameters.DSA
              aliases: [OID.1.2.840.10040.4.1, 1.3.14.3.2.12, 1.2.840.10040.4.1]
            CertPathBuilder.PKIX
            CertPathValidator.PKIX
            CertStore.Collection
            CertStore.com.sun.security.IndexedCollection
            CertificateFactory.X.509
              aliases: [X509]
            Configuration.JavaLoginConfig
            KeyFactory.DSA
              aliases: [1.3.14.3.2.12, 1.2.840.10040.4.1, OID.1.2.840.10040.4.1]
            KeyFactory.HSS/LMS
              aliases: [OID.1.2.840.113549.1.9.16.3.17,
                1.2.840.113549.1.9.16.3.17]
            KeyPairGenerator.DSA
              aliases: [1.2.840.10040.4.1, OID.1.2.840.10040.4.1, 1.3.14.3.2.12]
            KeyStore.CaseExactJKS
            KeyStore.DKS
            KeyStore.JKS
            KeyStore.PKCS12
            MessageDigest.MD2
              aliases: [OID.1.2.840.113549.2.2, 1.2.840.113549.2.2]
            MessageDigest.MD5 
              aliases: [OID.1.2.840.113549.2.5, 1.2.840.113549.2.5]
            MessageDigest.SHA-1
              aliases: [SHA1, SHA, 1.3.14.3.2.26, OID.1.3.14.3.2.26]
            MessageDigest.SHA-224
              aliases: [OID.2.16.840.1.101.3.4.2.4, SHA224,
                2.16.840.1.101.3.4.2.4]
            MessageDigest.SHA-256
              aliases: [SHA256, OID.2.16.840.1.101.3.4.2.1,
                2.16.840.1.101.3.4.2.1]
            MessageDigest.SHA-384
              aliases: [OID.2.16.840.1.101.3.4.2.2, SHA384,
                2.16.840.1.101.3.4.2.2]
            MessageDigest.SHA-512
              aliases: [OID.2.16.840.1.101.3.4.2.3, 2.16.840.1.101.3.4.2.3,
                SHA512]
            MessageDigest.SHA-512/224
              aliases: [SHA512/224, OID.2.16.840.1.101.3.4.2.5,
                2.16.840.1.101.3.4.2.5]
            MessageDigest.SHA-512/256
              aliases: [SHA512/256, OID.2.16.840.1.101.3.4.2.6,
                2.16.840.1.101.3.4.2.6]
            MessageDigest.SHA3-224
              aliases: [OID.2.16.840.1.101.3.4.2.7, 2.16.840.1.101.3.4.2.7]
            MessageDigest.SHA3-256
              aliases: [OID.2.16.840.1.101.3.4.2.8, 2.16.840.1.101.3.4.2.8]
            MessageDigest.SHA3-384
              aliases: [OID.2.16.840.1.101.3.4.2.9, 2.16.840.1.101.3.4.2.9]
            MessageDigest.SHA3-512
              aliases: [2.16.840.1.101.3.4.2.10, OID.2.16.840.1.101.3.4.2.10]
            SecureRandom.DRBG
            SecureRandom.NativePRNG
            SecureRandom.NativePRNGBlocking
            SecureRandom.NativePRNGNonBlocking
            SecureRandom.SHA1PRNG
            Signature.HSS/LMS
              aliases: [1.2.840.113549.1.9.16.3.17,
                OID.1.2.840.113549.1.9.16.3.17]
            Signature.NONEwithDSA
              aliases: [RawDSA]
            Signature.NONEwithDSAinP1363Format
            Signature.SHA1withDSA
              aliases: [DSS, 1.3.14.3.2.13, OID.1.2.840.10040.4.3, SHA1/DSA, DSA,
                SHA-1/DSA, SHAwithDSA, DSAWithSHA1, SHA/DSA, 1.2.840.10040.4.3,
                1.3.14.3.2.27]
            Signature.SHA1withDSAinP1363Format
            Signature.SHA224withDSA
              aliases: [2.16.840.1.101.3.4.3.1, OID.2.16.840.1.101.3.4.3.1]
            Signature.SHA224withDSAinP1363Format
            Signature.SHA256withDSA
              aliases: [2.16.840.1.101.3.4.3.2, OID.2.16.840.1.101.3.4.3.2]
            Signature.SHA256withDSAinP1363Format
            Signature.SHA3-224withDSA
              aliases: [2.16.840.1.101.3.4.3.5, OID.2.16.840.1.101.3.4.3.5]
            Signature.SHA3-224withDSAinP1363Format
            Signature.SHA3-256withDSA
              aliases: [2.16.840.1.101.3.4.3.6, OID.2.16.840.1.101.3.4.3.6]
            Signature.SHA3-256withDSAinP1363Format
            Signature.SHA3-384withDSA
              aliases: [2.16.840.1.101.3.4.3.7, OID.2.16.840.1.101.3.4.3.7]
            Signature.SHA3-384withDSAinP1363Format
            Signature.SHA3-512withDSA
              aliases: [2.16.840.1.101.3.4.3.8, OID.2.16.840.1.101.3.4.3.8]
            Signature.SHA3-512withDSAinP1363Format
            Signature.SHA384withDSA
              aliases: [2.16.840.1.101.3.4.3.3, OID.2.16.840.1.101.3.4.3.3]
            Signature.SHA384withDSAinP1363Format
            Signature.SHA512withDSA
              aliases: [2.16.840.1.101.3.4.3.4, OID.2.16.840.1.101.3.4.3.4]
            Signature.SHA512withDSAinP1363Format
    &amp;lt;remaining output snipped&amp;gt;

---
---
    $ java -XshowSettings:security:tls
    Security TLS configuration (SunJSSE provider):
        Enabled Protocols:
            TLSv1.3
            TLSv1.2

        Enabled Cipher Suites:
            TLS_AES_256_GCM_SHA384
            TLS_AES_128_GCM_SHA256
            TLS_CHACHA20_POLY1305_SHA256
            TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
            TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
            TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
            TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
            TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
            TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
            TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
            TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256
            TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
            TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
            TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
            TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
            TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
            TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
            TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
            TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
            TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
            TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
            TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
            TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
            TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
            TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
            TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
            TLS_DHE_RSA_WITH_AES_256_CBC_SHA
            TLS_DHE_DSS_WITH_AES_256_CBC_SHA
            TLS_DHE_RSA_WITH_AES_128_CBC_SHA
            TLS_DHE_DSS_WITH_AES_128_CBC_SHA
            TLS_RSA_WITH_AES_256_GCM_SHA384
            TLS_RSA_WITH_AES_128_GCM_SHA256
            TLS_RSA_WITH_AES_256_CBC_SHA256
            TLS_RSA_WITH_AES_128_CBC_SHA256
            TLS_RSA_WITH_AES_256_CBC_SHA
            TLS_RSA_WITH_AES_128_CBC_SHA
            TLS_EMPTY_RENEGOTIATION_INFO_SCSV

--- 

Issue: [JDK-8281658](https://bugs.openjdk.org/browse/JDK-8281658)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</content>
		</entry>
	
		<entry>
			<title>JDK 21 Security Enhancements</title>
			<link href="http://seanjmullan.org/blog/2023/09/22/jdk21"/>
			<updated>2023-09-22T00:00:00+00:00</updated>
			<id>http://seanjmullan.org/blog/2023/09/22/jdk21</id>
			<content type="html">&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/projects/jdk/21/&quot;&gt;JDK 21&lt;/a&gt; was released on September 19, 2023!
As with my previous &lt;a href=&quot;https://seanjmullan.org/blog/&quot;&gt;blogs&lt;/a&gt;, I
have compiled a list of what I think are the most interesting and useful
security enhancements in this release.  I have also grouped
them into appropriate categories (crypto, TLS, etc) which should make
it easier to find out what has changed in each specific area.
The &lt;a href=&quot;https://jdk.java.net/21/release-notes&quot;&gt;JDK 21 release notes&lt;/a&gt;
also contain further details on these and other enhancements.&lt;/p&gt;

&lt;p&gt;Highlights of this release include a new API for KEM (Key Encapsulation
Mechanism) and a signature verification implementation of HSS/LMS
(Leighton-Micali Signature system with the Hierarchical Signature System).
Both of these are important initial pieces for providing Java applications
with the tools they will need to withstand large-scale quantum computer attacks.&lt;/p&gt;

&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of Contents&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#crypto&quot;&gt;Crypto&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#pki&quot;&gt;PKI&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#tls&quot;&gt;TLS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#xml-signature&quot;&gt;XML Signature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#tools&quot;&gt;Tools&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;crypto&quot;&gt;Crypto&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Key Encapsulation Mechanism API&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A new standard API for Key Encapsulation Mechanism (KEM) has been
introduced in this release and is more fully described in
&lt;a href=&quot;https://openjdk.org/jeps/452&quot;&gt;JEP 452&lt;/a&gt;. A KEM is a modern cryptographic
mechanism that uses properties of a public key to securely establish a
shared symmetric key between two parties. KEMs are increasing in popularity
and will be an important component of new algorithms being developed for
Post-Quantum Cryptography (PQC).&lt;/p&gt;

    &lt;p&gt;The JDK includes an implementation of KEM for the DHKEM algorithm as
defined in &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9180#name-dh-based-kem-dhkem&quot;&gt;RFC 9180&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;The main new class in the API is &lt;a href=&quot;https://docs.oracle.com/en/java/javase/21/docs/api/java.base/javax/crypto/KEM.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.crypto.KEM&lt;/code&gt;&lt;/a&gt;.
The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KEM&lt;/code&gt; API description provides an example of using the API:&lt;/p&gt;

    &lt;hr /&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;// Receiver side
var kpg = KeyPairGenerator.getInstance(&quot;X25519&quot;);
var kp = kpg.generateKeyPair();

// Sender side
var kem1 = KEM.getInstance(&quot;DHKEM&quot;);
var sender = kem1.newEncapsulator(kp.getPublic());
var encapsulated = sender.encapsulate();
var k1 = encapsulated.key();

// Receiver side
var kem2 = KEM.getInstance(&quot;DHKEM&quot;);
var receiver = kem2.newDecapsulator(kp.getPrivate());
var k2 = receiver.decapsulate(encapsulated.encapsulation());

assert Arrays.equals(k1.getEncoded(), k2.getEncoded());
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;JEP: &lt;a href=&quot;https://openjdk.org/jeps/452&quot;&gt;JEP 452&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Leighton-Micali Signature (HSS/LMS) verification&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The SUN provider now supports signature verification for the Leighton-Micali
Signature (LMS) system with its multi-tree variant, the Hierarchical
Signature System (HSS).&lt;/p&gt;

    &lt;p&gt;Defined in &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc8554.html&quot;&gt;RFC 8554&lt;/a&gt;,
HSS/LMS is a stateful hash-based signature system and is one of the
signature algorithms that &lt;a href=&quot;https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-208.pdf&quot;&gt;NIST recommends&lt;/a&gt; for
providing protection against quantum attacks. It is believed that this
algorithm will not be broken by large-scale quantum computers.&lt;/p&gt;

    &lt;p&gt;New standard algorithms named “HSS/LMS” have been defined for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyFactory&lt;/code&gt;
and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Signature&lt;/code&gt;. The “HSS/LMS” &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyFactory&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Signature&lt;/code&gt; implementations
only support public keys and signature verification. This is because
the NIST recommendation requires that the key and signature generation
be done on hardware. If you try to generate a signature, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;initSign&lt;/code&gt;
method of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Signature&lt;/code&gt; will throw an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;InvalidKeyException&lt;/code&gt;. If you try to
generate a private key, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;generatePrivate&lt;/code&gt; method of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyFactory&lt;/code&gt; will
throw an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;InvalidKeySpecException&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8298127&quot;&gt;JDK-8298127&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Support for PKCS#11 PBES2 password-based cryptography algorithms&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The SunPKCS11 provider now supports PBES2 password-based cryptography
algorithms for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cipher&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Mac&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SecretKeyFactory&lt;/code&gt;. These algorithms
use the PKCS#11 standard mechanisms for password-based cryptography. With
this enhancement, it is now possible to use the SunPKCS11 provider for
integrity and privacy protection with a PKCS12 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyStore&lt;/code&gt;.
The list of new algorithms for each service are:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cipher&lt;/code&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA1AndAES_128&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA224AndAES_128&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA256AndAES_128&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA384AndAES_128&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA512AndAES_128&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA1AndAES_256&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA224AndAES_256&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA256AndAES_256&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA384AndAES_256&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA512AndAES_256&lt;/code&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Mac&lt;/code&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HmacPBESHA1&lt;/code&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SecretKeyFactory&lt;/code&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA1AndAES_128&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA224AndAES_128&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA256AndAES_128&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA384AndAES_128&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA512AndAES_128&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA1AndAES_256&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA224AndAES_256&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA256AndAES_256&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA384AndAES_256&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA512AndAES_256&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBKDF2WithHmacSHA1&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBKDF2WithHmacSHA224&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBKDF2WithHmacSHA256&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBKDF2WithHmacSHA384&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBKDF2WithHmacSHA512&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HmacPBESHA1&lt;/code&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Support for several additional PBES2 algorithms have also been added which
do not yet have PKCS#11 standard mechanisms defined:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Mac&lt;/code&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HmacPBESHA224&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HmacPBESHA256&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HmacPBESHA384&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HmacPBESHA512&lt;/code&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SecretKeyFactory&lt;/code&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HmacPBESHA224&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HmacPBESHA256&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HmacPBESHA384&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HmacPBESHA512&lt;/code&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8301553&quot;&gt;JDK-8301553&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Support for PBES2 Cipher and Mac algorithms with SHA-512/224 and SHA-512/256 digests&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The SunJCE provider now supports PBES2 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AlgorithmParameters&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cipher&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Mac&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SecretKeyFactory&lt;/code&gt; algorithms with SHA-512/224 and SHA-512/256
digests. The list of new algorithms for each service are:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AlgorithmParameters&lt;/code&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA512/224AndAES_128&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA512/256AndAES_128&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA512/224AndAES_256&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA512/256AndAES_256&lt;/code&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cipher&lt;/code&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA512/224AndAES_128&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA512/256AndAES_128&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA512/224AndAES_256&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA512/256AndAES_256&lt;/code&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Mac&lt;/code&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA512/224&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA512/256&lt;/code&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SecretKeyFactory&lt;/code&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA512/224AndAES_128&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA512/256AndAES_128&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA512/224AndAES_256&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBEWithHmacSHA512/256AndAES_256&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBKDF2WithHmacSHA512/224&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PBKDF2WithHmacSHA512/256&lt;/code&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8288050&quot;&gt;JDK-8288050&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;pki&quot;&gt;PKI&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Enhanced OCSP, certificate, and CRL fetch timeouts&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Several new system properties have been introduced that allow you to
control the connect and read timeouts for network connections related
to certificate and CRL fetching, and OCSP:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.sun.security.cert.timeout&lt;/code&gt;: for controlling connection timeouts
when fetching certs from locations in an AuthorityInformationAccess
extension of an X.509 certificate.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.sun.security.cert.readtimeout&lt;/code&gt;: for controlling read timeouts
when fetching certs from locations in an AuthorityInformationAccess
extension of an X.509 certificate.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.sun.security.ocsp.readtimeout&lt;/code&gt;: for controlling read timeouts
when using OCSP to check the revocation status of an X.509 certificate.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;These new properties have a flexible syntax that allow timeout values
to be specified in seconds or milliseconds. In addition, the existing
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.sun.security.ocsp.timeout&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.sun.security.crl.timeout&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.sun.security.crl.readtimeout&lt;/code&gt; properties have been enhanced to use
this syntax (previously they only supported seconds). The syntax allows
timeouts in milliseconds to be specified as a decimal integer ending in
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ms&lt;/code&gt;, and in seconds as a decimal integer or a decimal integer ending in
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;s&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Here is an example of setting the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.sun.security.cert.timeout&lt;/code&gt; property
to 100 milliseconds:&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java -Dcom.sun.security.cert.timeout=100ms ...&lt;/code&gt;&lt;/p&gt;

    &lt;p&gt;Here is another example of setting the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.sun.security.cert.timeout&lt;/code&gt;
property to 2 seconds:&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java -Dcom.sun.security.cert.timeout=2s ...&lt;/code&gt;&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8179502&quot;&gt;JDK-8179502&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New root CA certificates&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Several new root CA certificates have been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Four Google Trust Services (GTS) root CA certificates&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;
            &lt;p&gt;&lt;a href=&quot;https://crt.sh/?id=3263026969&quot;&gt;GTS Root R1&lt;/a&gt; has the following distinguished name:&lt;/p&gt;

            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=GTS Root R1, O=Google Trust Services LLC, C=US
  &lt;/code&gt;
  &lt;/div&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;&lt;a href=&quot;https://crt.sh/?id=3448820660&quot;&gt;GTS Root R2&lt;/a&gt; has the following distinguished name:&lt;/p&gt;

            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=GTS Root R2, O=Google Trust Services LLC, C=US
  &lt;/code&gt;
  &lt;/div&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;&lt;a href=&quot;https://crt.sh/?id=3448822382&quot;&gt;GTS Root R3&lt;/a&gt; has the following distinguished name:&lt;/p&gt;

            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=GTS Root R3, O=Google Trust Services LLC, C=US
  &lt;/code&gt;
  &lt;/div&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;&lt;a href=&quot;https://crt.sh/?id=3263026968&quot;&gt;GTS Root R4&lt;/a&gt; has the following distinguished name:&lt;/p&gt;

            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=GTS Root R4, O=Google Trust Services LLC, C=US
  &lt;/code&gt;
  &lt;/div&gt;
          &lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;These root certificates have also been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore in
Oracle’s JDK 20.0.2, 17.0.8, 11.0.20, 8u381, and 7u391 releases.&lt;/p&gt;

        &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8307134&quot;&gt;JDK-8307134&lt;/a&gt;&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;&lt;a href=&quot;https://crt.sh/?id=8559119&quot;&gt;TWCA Global Root CA&lt;/a&gt; has the following distinguished name:&lt;/p&gt;

        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
  &lt;code&gt;
  CN=TWCA Global Root CA, OU=Root CA, O=TAIWAN-CA, C=TW
  &lt;/code&gt;
  &lt;/div&gt;

        &lt;p&gt;This root certificate has also been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore in
Oracle’s JDK 20.0.2, 17.0.8, 11.0.20, 8u381, and 7u391 releases.&lt;/p&gt;

        &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8305975&quot;&gt;JDK-8305975&lt;/a&gt;&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Two Microsoft root CA certificates&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;
            &lt;p&gt;&lt;a href=&quot;https://crt.sh/?id=2565145421&quot;&gt;Microsoft ECC Root CA 2017&lt;/a&gt; has the following distinguished name:&lt;/p&gt;

            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
 &lt;code&gt;
 CN=Microsoft ECC Root Certificate Authority 2017, O=Microsoft Corporation, C=US
 &lt;/code&gt;
 &lt;/div&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;&lt;a href=&quot;https://crt.sh/?id=2565151295&quot;&gt;Microsoft RSA Root CA 2017&lt;/a&gt; has the following distinguished name:&lt;/p&gt;

            &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
 &lt;code&gt;
 CN=Microsoft RSA Root Certificate Authority 2017, O=Microsoft Corporation, C=US
 &lt;/code&gt;
 &lt;/div&gt;
          &lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;These root certificates have also been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore in
 Oracle’s JDK 20.0.2, 17.0.8, 11.0.20, 8u381, and 7u391 releases.&lt;/p&gt;

        &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8304760&quot;&gt;JDK-8304760&lt;/a&gt;&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;&lt;a href=&quot;https://crt.sh/?id=8559119&quot;&gt;Certigna Root CA&lt;/a&gt; has the following distinguished name:&lt;/p&gt;

        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
 &lt;code&gt;
 CN=Certigna, O=Dhimyotis, C=FR
 &lt;/code&gt;
 &lt;/div&gt;

        &lt;p&gt;This root certificate has also been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore in
Oracle’s JDK 20.0.1, 17.0.7, 11.0.19, 8u371, and 7u381 releases.&lt;/p&gt;

        &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8245654&quot;&gt;JDK-8245654&lt;/a&gt;&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;tls&quot;&gt;TLS&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;The default Diffie-Hellman group size has been increased from 1024 bits
to 2048 bits&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The JDK implementations of TLS 1.0, 1.1, and 1.2 now use a default
Diffie Hellman keysize of 2048 bits when a TLS_DHE cipher suite is
negotiated &lt;em&gt;and&lt;/em&gt; either the client or server do not support FFDHE,
which can be used to negotiate a stronger keysize. The JDK TLS
implementation supports FFDHE and it is enabled by default; however the
peer that the JDK is negotiating a TLS session with may not support it.&lt;/p&gt;

    &lt;p&gt;As a workaround, users can revert to the previous size by setting the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.ephemeralDHKeySize&lt;/code&gt; system property to 1024, but this is not
recommended and should be done at your own risk. Also, while this
change also applies to TLS 1.0 and 1.1, those protocols are no longer
recommended and are disabled by default.&lt;/p&gt;

    &lt;p&gt;This change does not affect TLS 1.3 as the minimum DH group size is
already 2048 bits.&lt;/p&gt;

    &lt;p&gt;This change is also listed on the &lt;a href=&quot;https://www.java.com/en/jre-jdk-cryptoroadmap.html&quot;&gt;Java Cryptographic Roadmap&lt;/a&gt; and is
targeted for Oracle’s October 2023 JDK releases for 21u, 17u, 11u, and 8u.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8301700&quot;&gt;JDK-8301700&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;xml-signature&quot;&gt;XML Signature&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Support for the EdDSA signature algorithm&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The JDK XML Signature implementation now supports &lt;a href=&quot;https://en.wikipedia.org/wiki/EdDSA&quot;&gt;the Edwards-Curve Digital
Signature Algorithm (EdDSA)&lt;/a&gt;, which
means that XML Signatures can now be signed or verified with the EdDSA
algorithm.&lt;/p&gt;

    &lt;p&gt;Two new standard &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SignatureMethod&lt;/code&gt; URIs have also been added:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/21/docs/api/java.xml.crypto/javax/xml/crypto/dsig/SignatureMethod.html#ED25519&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SignatureMethod.ED25519&lt;/code&gt;&lt;/a&gt;: URI
representing the Edwards-Curve signature algorithm with Ed25519.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/21/docs/api/java.xml.crypto/javax/xml/crypto/dsig/SignatureMethod.html#ED448&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SignatureMethod.ED448&lt;/code&gt;&lt;/a&gt;: URI
representing the Edwards-Curve signature algorithm with Ed448.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8305972&quot;&gt;JDK-8305972&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New system property to toggle XML Signature secure validation mode&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A new &lt;a href=&quot;https://docs.oracle.com/en/java/javase/21/docs/api/java.xml.crypto/javax/xml/crypto/dsig/dom/DOMValidateContext.html#org.jcp.xml.dsig.secureValidation&quot;&gt;system property named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;org.jcp.xml.dsig.secureValidation&lt;/code&gt;&lt;/a&gt;
has been added that allows you to more easily enable or disable the XML
Signature secure processing mode. The property should be set to “true” to
enable or “false” to disable.&lt;/p&gt;

    &lt;p&gt;Note that the secure processing mode is enabled by default, and provides
additional security by restricting weak algorithms and other potentially
unsafe constructs in XML signatures. See the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.xml.dsig.secureValidationPolicy&lt;/code&gt; security property in the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security&lt;/code&gt; file for more details.&lt;/p&gt;

    &lt;p&gt;There may be circumstances where you may need to disable the secure
processing mode (for example, to verify a legacy signature that uses a weak
algorithm), but in general disabling the secure processing mode is not
recommended and should be done at your own risk.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8301260&quot;&gt;JDK-8301260&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New security property to enable or disable support for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;here()&lt;/code&gt; function&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;a href=&quot;https://www.w3.org/TR/xmldsig-core1/#function-here&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;here()&lt;/code&gt; function&lt;/a&gt; is an XPath function defined by the W3C Recommendation
for XML Signature that can be used to help select node-sets for use in
XPath transforms. However, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;here()&lt;/code&gt; function is not a standard XPath
function and is not supported by the standard Java XPath API, and supporting    it requires an implementation-specific dependency on Xalan internal APIs.
We intend to eventually disable support for this function by default.&lt;/p&gt;

    &lt;p&gt;With this release, we have added a new security property named
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.xml.dsig.hereFunctionSupported&lt;/code&gt; and set its default value to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt;
(which means the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;here()&lt;/code&gt; function is still supported by default). We
encourage users to set this property to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;false&lt;/code&gt; and test their
applications to see if anything breaks.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8305972&quot;&gt;JDK-8305972&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;tools&quot;&gt;Tools&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;keytool now warns if weak PBE algorithms are used&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keytool&lt;/code&gt; utility now emits warnings if weak password-based encryption
(PBE) algorithms are specified with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-genseckey&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-importpass&lt;/code&gt;
options.&lt;/p&gt;

    &lt;p&gt;Here is an example showing this warning when using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keytool -genseckey&lt;/code&gt; with
a weak PBE algorithm (in this case, “PBEwithMD5andDES”):&lt;/p&gt;

    &lt;hr /&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ keytool -genseckey -keystore ks -keyalg PBEwithMD5andDES
Enter keystore password:  
Enter the password to be stored:  
Re-enter password: 

Warning:
The generated secret key uses the PBEwithMD5andDES algorithm which is considered a security risk.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8286907&quot;&gt;JDK-8286907&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;The jarsigner -altsigner and -altsignerpath options are removed&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-altsigner&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-altsignerpath&lt;/code&gt; options have been removed from the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jarsigner&lt;/code&gt; utility. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.sun.jarsigner.ContentSigner&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.sun.jarsigner.ContentSignerParameters&lt;/code&gt; APIs, which these options
depended on, have also been removed. These APIs were originally
deprecated in JDK 9 and marked for removal in JDK 15. There is an alternate
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/15/docs/api/jdk.jartool/jdk/security/jarsigner/JarSigner.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;JarSigner&lt;/code&gt;&lt;/a&gt;
API that is much more powerful and should be used instead.&lt;/p&gt;

    &lt;p&gt;Running &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jarsigner&lt;/code&gt; with one of these options (ex: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-altsigner&lt;/code&gt;) now
produces the following error:&lt;/p&gt;

    &lt;hr /&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ jarsigner -altsigner
Illegal option: -altsigner

Please type jarsigner --help for usage
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8303410&quot;&gt;JDK-8303410&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</content>
		</entry>
	
		<entry>
			<title>JDK 20 Security Enhancements</title>
			<link href="http://seanjmullan.org/blog/2023/03/22/jdk20"/>
			<updated>2023-03-22T00:00:00+00:00</updated>
			<id>http://seanjmullan.org/blog/2023/03/22/jdk20</id>
			<content type="html">&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/projects/jdk/20/&quot;&gt;JDK 20&lt;/a&gt; was released on March 21, 2023! As with
my previous &lt;a href=&quot;https://seanjmullan.org/blog/&quot;&gt;blogs&lt;/a&gt;, I
have compiled a list of what I think are the most interesting and useful
security enhancements in this release.  I have also grouped
them into appropriate categories (crypto, TLS, etc) which should make
it easier to find out what has changed in each specific area.
The &lt;a href=&quot;https://jdk.java.net/20/release-notes&quot;&gt;JDK 20 release notes&lt;/a&gt;
also contain further details on these and other enhancements.&lt;/p&gt;

&lt;p&gt;Highlights of this release include further improvements that strengthen
the default security of the Java Platform, improved crypto performance, and
new JFR events for security monitoring.&lt;/p&gt;

&lt;p&gt;One other important JDK 20 feature that is related to security but not part
of the security libraries area is the introduction of new system and security
properties to control what object factory classes are allowed to reconstruct
Java objects from JNDI/LDAP and JNDI/RMI contexts. See the
&lt;a href=&quot;https://jdk.java.net/20/release-notes#JDK-8290368&quot;&gt;release note&lt;/a&gt; for
more details on these new properties.&lt;/p&gt;

&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of Contents&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#general&quot;&gt;General&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#crypto&quot;&gt;Crypto&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#tls&quot;&gt;TLS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#tools&quot;&gt;Tools&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New InvalidParameterException constructors that take cause as a parameter&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;New constructors have been added to the
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/security/InvalidParameterException.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;InvalidParameterException&lt;/code&gt;&lt;/a&gt;
API that take a cause (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Throwable&lt;/code&gt;) as a parameter. This provides a more
convenient option than having to separately call the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;initCause&lt;/code&gt; method.&lt;/p&gt;

    &lt;p&gt;For example, you can now throw an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;InvalidParameterException&lt;/code&gt; as:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    throw new InvalidParameterException(new NullPointerException())
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;or:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    throw new InvalidParameterException(&quot;parameter is null&quot;, new NullPointerException())
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8296226&quot;&gt;JDK-8296226&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New service attributes added to the Standard Algorithm Names specification&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Four additional service attributes have been added to the &lt;a href=&quot;https://docs.oracle.com/en/java/javase/20/docs/specs/security/standard-names.html#service-attributes&quot;&gt;Service Attributes section&lt;/a&gt; of the Java Security Standard Algorithm Names
specification. The attributes are &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SupportedKeyClasses&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SupportedKeyFormats&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SupportedModes&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SupportedPaddings&lt;/code&gt;. These
attributes were previously defined and used in the JDK security providers,
but had not been defined as standard attributes until now.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8297161&quot;&gt;JDK-8297161&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;An error is now thrown if the java.security file fails to load&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;An &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;InternalError&lt;/code&gt; is now thrown at runtime if a security property is
retrieved but the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security&lt;/code&gt; file does not exist or fails to load.
Prior to this change, if there was a problem loading the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security&lt;/code&gt;
file, a subset of critical properties with hard-coded defaults was used.&lt;/p&gt;

    &lt;p&gt;If this issue occurs, you will see an exception stack trace like the following:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    Exception in thread &quot;main&quot; java.lang.InternalError: Error loading java.security file
    	at java.base/java.security.Security.initialize(Security.java:105)
    	at java.base/java.security.Security.lambda$static$0(Security.java:84)
    	at java.base/java.security.AccessController.doPrivileged(AccessController.java:319)
    	at java.base/java.security.Security.&amp;lt;clinit&amp;gt;(Security.java:83)
            ...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8155246&quot;&gt;JDK-8155246&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;crypto&quot;&gt;Crypto&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Crypto performance related improvements&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Several performance related improvements have been made in the crypto
area. Below are details on each of the more significant improvements
and a pointer to the corresponding issue.&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;&lt;strong&gt;ChaCha20 intrinsics for x86_64 and aarch64 platforms&lt;/strong&gt;&lt;/p&gt;

        &lt;p&gt;The &lt;a href=&quot;https://docs.oracle.com/en/java/javase/20/security/oracle-providers.html#GUID-A47B1249-593C-4C38-A0D0-68FA7681E0A7&quot;&gt;SunJCE&lt;/a&gt; provider implementation of the &lt;a href=&quot;https://docs.oracle.com/en/java/javase/20/docs/specs/security/standard-names.html#cipher-algorithms&quot;&gt;ChaCha20&lt;/a&gt; &lt;a href=&quot;https://docs.oracle.com/en/java/javase/20/docs/api/java.base/javax/crypto/Cipher.html&quot;&gt;Cipher&lt;/a&gt; algorithm now
provides an optimized intrinsic for x86_64 and aarch64 platforms, yielding
a significant improvement in performance. These optimized routines are
designed for x86_64 chipsets that support the AVX, AVX2 and/or AVX512
instruction sets, and aarch64 chips that support the Advanced SIMD
instruction set. The intrinsics are enabled by default on the supported
platforms, but can be disabled by providing the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-XX:-UseChaCha20Intrinsics&lt;/code&gt; command-line option to Java. Flags that
control intrinsics require the option&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt; -XX:+UnlockDiagnosticVMOptions&lt;/code&gt;.&lt;/p&gt;

        &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8247645&quot;&gt;JDK-8247645&lt;/a&gt;&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;&lt;strong&gt;Poly1305 intrinsics for ByteBuffers&lt;/strong&gt;&lt;/p&gt;

        &lt;p&gt;The x86_64 intrinsic for the SunJCE provider implementation of Poly1305 
(used as the authenticator for the &lt;a href=&quot;https://docs.oracle.com/en/java/javase/20/docs/specs/security/standard-names.html#cipher-algorithms&quot;&gt;ChaCha20&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cipher&lt;/code&gt; algorithm) has been
enhanced to also apply to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ByteBuffer&lt;/code&gt;s. The intrinsic is now enabled
for the &lt;a href=&quot;https://docs.oracle.com/en/java/javase/20/docs/api/java.base/javax/crypto/CipherSpi.html#engineUpdate(byte%5B%5D,int,int)&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CipherSpi.engineUpdate(byte[], ...)&lt;/code&gt;&lt;/a&gt; and
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/20/docs/api/java.base/javax/crypto/CipherSpi.html#engineUpdate(java.nio.ByteBuffer,java.nio.ByteBuffer)&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CipherSpi.engineUpdate(ByteBuffer, ...)&lt;/code&gt;&lt;/a&gt; methods.&lt;/p&gt;

        &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8297379&quot;&gt;JDK-8297379&lt;/a&gt;&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;&lt;strong&gt;Improved MD5 intrinsics for x86_64 platforms&lt;/strong&gt;&lt;/p&gt;

        &lt;p&gt;The performance of the &lt;a href=&quot;https://docs.oracle.com/en/java/javase/20/docs/specs/security/standard-names.html#messagedigest-algorithms&quot;&gt;MD5&lt;/a&gt; &lt;a href=&quot;https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/security/MessageDigest.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MessageDigest&lt;/code&gt;&lt;/a&gt; intrinsic for x86_64 platforms
has been significantly improved.&lt;/p&gt;

        &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8296548&quot;&gt;JDK-8296548&lt;/a&gt;&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;&lt;strong&gt;Improved EC point multiplication for secp256r1 curve&lt;/strong&gt;&lt;/p&gt;

        &lt;p&gt;The performance of the elliptic curve point multiplication for the
secp256r1 curve has been significantly improved by using pre-computed
tables and more efficient algorithms. This performance improvement
applies to the &lt;a href=&quot;https://docs.oracle.com/en/java/javase/20/security/oracle-providers.html#GUID-091BF58C-82AB-4C9C-850F-1660824D5254&quot;&gt;SunEC&lt;/a&gt; security provider.&lt;/p&gt;

        &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8295011&quot;&gt;JDK-8295011&lt;/a&gt;&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;&lt;strong&gt;Improved ECC math operations&lt;/strong&gt;&lt;/p&gt;

        &lt;p&gt;Improved BigInteger and curve point operations result in a modest
performance improvement for elliptic curve calculations. This
performance improvement applies to the &lt;a href=&quot;https://docs.oracle.com/en/java/javase/20/security/oracle-providers.html#GUID-091BF58C-82AB-4C9C-850F-1660824D5254&quot;&gt;SunEC&lt;/a&gt; security provider.&lt;/p&gt;

        &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8294997&quot;&gt;JDK-8294997&lt;/a&gt;&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;tls&quot;&gt;TLS&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;DTLS 1.0 is now disabled by default&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The DTLS 1.0 protocol has been disabled by default, improving out of the
box security. This protocol has various weaknesses and is no longer
recommended. See &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc8996&quot;&gt;RFC 8996&lt;/a&gt; for
more information.&lt;/p&gt;

    &lt;p&gt;Applications should be using the more secure DTLS 1.2 protocol, which is
supported by the JDK. However, if you encounter issues and need to get
your application working, you can (at your own risk), re-enable DTLS 1.0
by removing “DTLSv1.0” from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.disabledAlgorithms&lt;/code&gt; security
property in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security&lt;/code&gt; configuration file.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8256660&quot;&gt;JDK-8256660&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;ECDH cipher suites disabled by default&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The TLS_ECDH cipher suites have been added to the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.disabledAlgorithms&lt;/code&gt; security property and are now disabled by
default. These ciphers do not preserve forward secrecy and are rarely used
in practice. Some TLS_ECDH cipher suites are already disabled because they
use 3DES, RC4, anon, or NULL, which were previously disabled. This action
disables all remaining ECDH cipher suites.&lt;/p&gt;

    &lt;p&gt;However, if you encounter issues and need to get your application working,
you can (at your own risk), re-enable these cipher suites by removing
“ECDH” from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.disabledAlgorithms&lt;/code&gt; security property in the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security&lt;/code&gt; configuration file.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8279164&quot;&gt;JDK-8279164&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New APIs for customizing TLS and DTLS named groups&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Two new APIs have been added which allow applications to customize
and retrieve the prioritized list of named groups used to negotiate the
key exchange mechanism in a TLS or DTLS connection:
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/20/docs/api/java.base/javax/net/ssl/SSLParameters.html#setNamedGroups(java.lang.String[])&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.net.ssl.SSLParameters::setNamedGroups&lt;/code&gt;&lt;/a&gt; and
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/20/docs/api/java.base/javax/net/ssl/SSLParameters.html#getNamedGroups()&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.net.ssl.SSLParameters::getNamedGroups&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;An example of setting named groups is the following:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    SSLParameters params = new SSLParameters();
    params.setNamedGroups(new String[] { &quot;x25519&quot;, &quot;secp256r1&quot; });
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8281236&quot;&gt;JDK-8281236&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;tools&quot;&gt;Tools&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New JFR event for recording initial security properties&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A new event for recording the initial values of security properties has
been added to the Java Flight Recorder tool. This is useful for recording
an initial snapshot of the security configuration. The event is named
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.InitialSecurityProperty&lt;/code&gt; and is enabled by default. When used together
with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.SecurityPropertyModification&lt;/code&gt; event, JFR will record the
initial and subsequent settings for all security properties, which can
provide important details of the security environment used by the
application.&lt;/p&gt;

    &lt;p&gt;Below is a sample screenshot of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.InitialSecurityProperty&lt;/code&gt; event
and some of the values captured for each of the security properties.&lt;/p&gt;

    &lt;p&gt;&lt;img src=&quot;/images/InitialSecurityProperties.jpg&quot; alt=&quot;Initial Security Properties&quot; /&gt;&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8292177&quot;&gt;JDK-8292177&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New JFR event for security provider usage&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A new event has been added to the Java Flight Recorder tool for recording
each time a security provider is accessed. This is useful for recording
each cryptographic algorithm or service that an application uses, providing
additional insight into the security of the application. The event is named
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.SecurityProviderService&lt;/code&gt; and contains three fields for the type of
service, the algorithm, and the provider name. This event is disabled by
default but can be enabled via the JFR configuration files or standard
JFR options.&lt;/p&gt;

    &lt;p&gt;Below is a sample screenshot of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.SecurityProviderService&lt;/code&gt; event
and some of the values captured for each algorithms requested.&lt;/p&gt;

    &lt;p&gt;&lt;img src=&quot;/images/SecurityProviderServiceRequests.jpg&quot; alt=&quot;Security Provider Service Requests&quot; /&gt;&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8254711&quot;&gt;JDK-8254711&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</content>
		</entry>
	
		<entry>
			<title>JDK 19 Security Enhancements</title>
			<link href="http://seanjmullan.org/blog/2022/09/22/jdk19"/>
			<updated>2022-09-22T00:00:00+00:00</updated>
			<id>http://seanjmullan.org/blog/2022/09/22/jdk19</id>
			<content type="html">&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/projects/jdk/19/&quot;&gt;JDK 19&lt;/a&gt; was released on September 20, 2022! As with
my previous &lt;a href=&quot;https://seanjmullan.org/blog/&quot;&gt;blogs&lt;/a&gt;, I
have compiled a list of what I think are the most interesting and useful
security enhancements in this release.  I have also grouped
them into appropriate categories (crypto, PKI, etc) which should make
it easier to find out what has changed in each specific area.
The &lt;a href=&quot;https://jdk.java.net/19/release-notes&quot;&gt;JDK 19 release notes&lt;/a&gt;
also contain further details on these and other enhancements.&lt;/p&gt;

&lt;p&gt;Highlights of this release include further improvements that strengthen
the default security of the Java Platform and improved TLS performance.
There are also several other really useful enhancements such as adding
KeyStore support for accessing local machine certificates on Windows
and support for TLS channel binding tokens with HTTPS and Kerberos.&lt;/p&gt;

&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of Contents&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#crypto&quot;&gt;Crypto&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#pki&quot;&gt;PKI&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#tls&quot;&gt;TLS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#tools&quot;&gt;Tools&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#networking&quot;&gt;Networking&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;crypto&quot;&gt;Crypto&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Default key sizes increased&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The default sizes for keys generated by JDK implementations of
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyPairGenerator&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyGenerator&lt;/code&gt; have been increased as follows:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;For the “RSA”, “RSASSA-PSS”, and “DH” algorithms, the default size has
been increased from 2048 bits to 3072 bits&lt;/li&gt;
      &lt;li&gt;For the “EC” algorithm, the default size has been increased from 256
bits to 384 bits&lt;/li&gt;
      &lt;li&gt;For the “AES” algorithm, the default size has been increased from 128
bits to 256 bits (if permitted by crypto policy), otherwise the default
falls back to 128 bits&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8267319&quot;&gt;JDK-8267319&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;SHA3 performance increased up to 2x&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The JDK “SUN” provider SHA3 message digest algorithm performance has
been increased up to 2x.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8275914&quot;&gt;JDK-8275914&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;OAEPParameterSpec.DEFAULT is deprecated&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;a href=&quot;https://docs.oracle.com/en/java/javase/19/docs/api/java.base/javax/crypto/spec/OAEPParameterSpec.html#DEFAULT&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DEFAULT&lt;/code&gt;&lt;/a&gt;
static field of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.crypto.spec.OAEPParameterSpec&lt;/code&gt; class has been
deprecated.  This constant uses default algorithms such as SHA-1 that have
weakened. Applications should avoid using this constant and explicitly
specify the parameters using the &lt;a href=&quot;https://docs.oracle.com/en/java/javase/19/docs/api/java.base/javax/crypto/spec/OAEPParameterSpec.html#%3Cinit%3E(java.lang.String,java.lang.String,java.security.spec.AlgorithmParameterSpec,javax.crypto.spec.PSource)&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OAEPParameterSpec(String, String, AlgorithmParameterSpec, PSource)&lt;/code&gt;&lt;/a&gt; constructor.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8284553&quot;&gt;JDK-8284553&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;PSSParameterSpec(int) and PSSParameterSpec.DEFAULT are deprecated&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;a href=&quot;https://docs.oracle.com/en/java/javase/19/docs/api/java.base/java/security/spec/PSSParameterSpec.html#%3Cinit%3E(int)&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PSSParameterSpec(int)&lt;/code&gt;&lt;/a&gt;
constructor and &lt;a href=&quot;https://docs.oracle.com/en/java/javase/19/docs/api/java.base/java/security/spec/PSSParameterSpec.html#DEFAULT&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DEFAULT&lt;/code&gt;&lt;/a&gt; static field have been deprecated. This constructor and constant uses SHA-1 as the
default hash algorithm which has weakened and is no longer recommended.
Applications should avoid using this constructor or constant and explicitly
specify the parameters using the
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/19/docs/api/java.base/java/security/spec/PSSParameterSpec.html#%3Cinit%3E(java.lang.String,java.lang.String,java.security.spec.AlgorithmParameterSpec,int,int)&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PSSParameterSpec(String, String, AlgorithmParameterSpec, int, int)&lt;/code&gt;&lt;/a&gt; constructor.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;pki&quot;&gt;PKI&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New Windows KeyStore types for accessing local machine certificates&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Two additional &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyStore&lt;/code&gt; types have been added,
“Windows-MY-LOCALMACHINE” and “Windows-ROOT-LOCALMACHINE”, which provide
access to keys and certificates stored on the Windows Operating
System that are available to &lt;em&gt;all&lt;/em&gt; accounts.&lt;/p&gt;

    &lt;p&gt;The other Windows &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyStore&lt;/code&gt; types, “Windows-MY” and “Windows-ROOT” 
provide access to keys and certificates associated with the
&lt;em&gt;current user’s&lt;/em&gt; account only. To avoid confusion, new names for these types
have also been introduced, “Windows-MY-CURRENTUSER” and
“Windows-ROOT-CURRENTUSER” which map to “Windows-MY” and “Windows-ROOT”,
respectively.&lt;/p&gt;

    &lt;p&gt;The new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyStore&lt;/code&gt; types are documented in the
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/19/security/oracle-providers.html#GUID-4F1737D6-1569-4340-B140-678C70E63CD5&quot;&gt;SunMSCAPI Provider section&lt;/a&gt;
of the JDK Providers Guide.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-6782021&quot;&gt;JDK-6782021&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Enhanced support for OtherNames in X.509 certificates&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The JDK implementation of the &lt;a href=&quot;https://docs.oracle.com/en/java/javase/19/docs/api/java.base/java/security/cert/X509Certificate.html#getSubjectAlternativeNames()&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;getSubjectAlternativeNames&lt;/code&gt;&lt;/a&gt;
and the &lt;a href=&quot;https://docs.oracle.com/en/java/javase/19/docs/api/java.base/java/security/cert/X509Certificate.html#getIssuerAlternativeNames()&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;getIssuerAlternativeNames&lt;/code&gt;&lt;/a&gt;
methods of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X509Certificate&lt;/code&gt; API have been enhanced to return more
useful information for OtherName types. The returned list now has a 3rd
and 4th entry which contain the OID (as a String) and the
ASN.1 encoded value (as a String if it is a character string, otherwise a
byte array). These additional values can help applications to more
easily identify what type the OtherName is, and avoid additional parsing
of the encoded value to determine the OID and value.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8277976&quot;&gt;JDK-8277976&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;tls&quot;&gt;TLS&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;TLS performance related improvements&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Several performance related improvements have been made which speedup 
and reduce the amount of memory used during a TLS handshake. See the
following issues for more details:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8286433&quot;&gt;Cache certificates decoded from TLS session tickets&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8284694&quot;&gt;Avoid evaluating SSLAlgorithmConstraints twice&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8285398&quot;&gt;Cache the results of constraint checks&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;3DES suites removed from default enabled TLS cipher suites&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;3DES cipher suites have been removed from the default enabled TLS cipher
suites. Note that these cipher suites were &lt;em&gt;already disabled&lt;/em&gt; since “3DES”
is included in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.disabledAlgorithms&lt;/code&gt; security property and by
default the suites will not be considered for a TLS connection handshake.&lt;/p&gt;

    &lt;p&gt;This change makes it much harder to enable 3DES cipher suites either
accidentally or maliciously. Per RFC 7525, implementations SHOULD NOT
negotiate cipher suites that use algorithms offering less than 128 bits
of security. The strength of 3DES is 112 bits, which is less than
128 bits of security.&lt;/p&gt;

    &lt;p&gt;We don’t recommend re-enabling the suites, but the
&lt;a href=&quot;https://jdk.java.net/19/release-notes#JDK-8163327&quot;&gt;release note&lt;/a&gt; contains
instructions for doing that, if necessary.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8163327&quot;&gt;JDK-8163327&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New APIs for customizing TLS and DTLS signature schemes&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Two new APIs have been added which allow applications to customize
and retrieve the prioritized list of signature schemes used when
negotiating a TLS or DTLS connection:
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/19/docs/api/java.base/javax/net/ssl/SSLParameters.html#setSignatureSchemes(java.lang.String[])&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.net.ssl.SSLParameters::setSignatureSchemes&lt;/code&gt;&lt;/a&gt; and
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/19/docs/api/java.base/javax/net/ssl/SSLParameters.html#getSignatureSchemes()&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.net.ssl.SSLParameters::getSignatureSchemes&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8280494&quot;&gt;JDK-8280494&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;RFC 6125 endpoint identification algorithm fully supported&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc6125&quot;&gt;RFC 6125&lt;/a&gt; defines procedures
for verifying identities in TLS certificates. The JDK implementation
was mostly compliant except for one case which has now been corrected:
the implementation will not attempt to match wildcard domains in TLS
certificates where the wildcard character comprises a label other than
the left-most label (ex: we won’t match “foo.*.example.net”).&lt;/p&gt;

    &lt;p&gt;If necessary, applications can workaround this restriction by implementing
their own &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HostnameVerifier&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TrustManager&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-7192189&quot;&gt;JDK-7192189&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New SSLException constructors that take cause as a parameter&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;New constructors have been added to the
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/19/docs/api/java.base/javax/net/ssl/SSLHandshakeException.html#%3Cinit%3E(java.lang.String,java.lang.Throwable)&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SSLHandshakeException&lt;/code&gt;&lt;/a&gt;,
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/19/docs/api/java.base/javax/net/ssl/SSLKeyException.html#%3Cinit%3E(java.lang.String,java.lang.Throwable)&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SSLKeyException&lt;/code&gt;&lt;/a&gt;,
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/19/docs/api/java.base/javax/net/ssl/SSLPeerUnverifiedException.html#%3Cinit%3E(java.lang.String,java.lang.Throwable)&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SSLPeerUnverifiedException&lt;/code&gt;&lt;/a&gt;, and
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/19/docs/api/java.base/javax/net/ssl/SSLProtocolException.html#%3Cinit%3E(java.lang.String,java.lang.Throwable)&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SSLProtocolException&lt;/code&gt;&lt;/a&gt; APIs that take a cause
(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Throwable&lt;/code&gt;) as a parameter. This provides a more convenient option
than having to separately call the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;initCause&lt;/code&gt; method.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8282723&quot;&gt;JDK-8282723&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;tools&quot;&gt;Tools&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Default digest and signature algorithms strengthened for jarsigner&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The default digest and signature algorithms used by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jarsigner&lt;/code&gt; when
signing JAR files have been strengthened.&lt;/p&gt;

    &lt;p&gt;The default digest algorithm has been changed from SHA-256 to SHA-384.&lt;/p&gt;

    &lt;p&gt;The default signature algorithm for RSA and RSASSA-PSS keys greater than
or equal to 624 bits has been changed from SHA256withRSA to SHA384withRSA,
except for keys greater than 7680 bits where SHA512withRSA is used.
Similarly, the default signature algorithm for EC keys has been changed
from SHA256withECDSA to SHA384withECDSA, except for keys greater than or
equal to 512 bits where SHA512withECDSA is used.&lt;/p&gt;

    &lt;p&gt;Here is the complete table of signature algorithm defaults from
the &lt;a href=&quot;https://docs.oracle.com/en/java/javase/19/docs/specs/man/jarsigner.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jarsigner&lt;/code&gt; tool specification&lt;/a&gt;:&lt;/p&gt;

    &lt;p&gt;&lt;img src=&quot;/images/DefaultSignatureAlgorithms.jpg&quot; alt=&quot;Default Signature Algorithms&quot; /&gt;&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8267319&quot;&gt;JDK-8267319&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;RC2 and RC4 added to jdk.security.legacyAlgorithms security property&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;“RC2” and “ARCFOUR” (RC4) have been added to the 
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.security.legacyAlgorithms&lt;/code&gt; security property in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security&lt;/code&gt;
configuration file. Keys using these algorithms are no longer recommended.&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keytool&lt;/code&gt; will now emit warnings if keys of this algorithm are used in any
commands associated with secret key entries of a keystore. Here is an
example:&lt;/p&gt;

    &lt;hr /&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ keytool -genseckey -keyalg RC2 -keysize 128 -keystore keystore
Enter keystore password:  
Generated 128-bit RC2 secret key

Warning:
The generated secret key uses the RC2 algorithm which is considered a security risk.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8286090&quot;&gt;JDK-8286090&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;DES, DESede, and MD5 added to jdk.security.legacyAlgorithms security property&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;“DES”, “DESede” (3DES) and “MD5” have been added to the 
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.security.legacyAlgorithms&lt;/code&gt; security property in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security&lt;/code&gt;
configuration file. Keys using these algorithms are no longer recommended.&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keytool&lt;/code&gt; will now emit warnings if keys or certificates use any of
these algorithms. Here is an example:&lt;/p&gt;

    &lt;hr /&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ keytool -genseckey -keyalg DES -keystore keystore
Enter keystore password:
Generated 56-bit DES secret key

Warning:
The generated secret key uses the DES algorithm which is considered a security risk.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8255552&quot;&gt;JDK-8255552&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New jarsigner -providerPath option&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-providerPath&lt;/code&gt; option has been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jarsigner&lt;/code&gt; tool. This
option allows the user to specify the class path of an alternate keystore
implementation and can be used in conjunction with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-providerClass&lt;/code&gt;
option. Here is an example:&lt;/p&gt;

    &lt;hr /&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ jarsigner -keystore keystore -storetype MYKS -providerPath mods/test.myks \
  -providerClass org.test.MyProvider signed.jar mykey
Enter keystore password:  
jar signed.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8281175&quot;&gt;JDK-8281175&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New Kerberos ktab options for providing salt values&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Two new options have been added to the Windows &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ktab&lt;/code&gt; tool to allow users to
provide alternate salt values when using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-a&lt;/code&gt; option to generate keys.
These salt values are used instead of using the default salt which is
a concatenation of the realm and username. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-s &amp;lt;salt&amp;gt;&lt;/code&gt; option allows the
user to provide their own salt, and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-f&lt;/code&gt; option will fetch the salt
from the KDC. These options are useful if the KDC uses a different salt
value, or the user simply wants to use a different salt value.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8279064&quot;&gt;JDK-8279064&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;networking&quot;&gt;Networking&lt;/h3&gt;

&lt;p&gt;Two other important JDK 19 security related enhancements in the networking
area that provide significant security benefits and are worth mentioning are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;HTTPS Channel Binding support for Java GSS/Kerberos&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;This enhancement adds support for TLS channel binding for Negotiate/Kerberos
authentication over HTTPS through &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.net.HttpsURLConnection&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;A new system property named
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/19/docs/api/java.base/java/net/doc-files/net-properties.html#jdk.https.negotiate.cbt&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.https.negotiate.cbt&lt;/code&gt;&lt;/a&gt; has
been introduced to allow users to configure how channel binding tokens
are used by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HttpsURLConnection&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;See the &lt;a href=&quot;https://jdk.java.net/19/release-notes#JDK-8279842&quot;&gt;release note&lt;/a&gt;
for more details.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8279842&quot;&gt;JDK-8279842&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Disable http DIGEST mechanism with MD5 and SHA-1 by default&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The MD5 and SHA-1 HTTP DIGEST mechanisms have been disabled by default.
These algorithms have weaknesses and are no longer recommended.&lt;/p&gt;

    &lt;p&gt;A new system property named &lt;a href=&quot;https://docs.oracle.com/en/java/javase/19/docs/api/java.base/java/net/doc-files/net-properties.html#http.auth.digest.reEnabledAlgorithms&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;http.auth.digest.reEnabledAlgorithms&lt;/code&gt;&lt;/a&gt;
has been introduced which can be used to re-enable these mechanisms, if
necessary, and at your own risk.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.org/browse/JDK-8281561&quot;&gt;JDK-8281561&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</content>
		</entry>
	
		<entry>
			<title>JDK 18 Security Enhancements</title>
			<link href="http://seanjmullan.org/blog/2022/03/23/jdk18"/>
			<updated>2022-03-23T00:00:00+00:00</updated>
			<id>http://seanjmullan.org/blog/2022/03/23/jdk18</id>
			<content type="html">&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/projects/jdk/18/&quot;&gt;JDK 18&lt;/a&gt; was released on March 22, 2022! As with
my previous &lt;a href=&quot;https://seanjmullan.org/blog/&quot;&gt;blogs&lt;/a&gt;, I
have compiled a list of what I think are the most interesting and useful
security enhancements in this release.  I have also grouped
them into appropriate categories (crypto, PKI, etc) which should make
it easier to find out what has changed in each specific area.
The &lt;a href=&quot;https://jdk.java.net/18/release-notes&quot;&gt;JDK 18 release notes&lt;/a&gt;
also contain further details on these and other enhancements.&lt;/p&gt;

&lt;p&gt;Highlights of this release include further improvements that strengthen
the default security of the Java Platform, support for new crypto algorithms,
and new alternative JAAS APIs that do not depend on deprecated 
Security Manager APIs. See below for more details on these and other
enhancements.&lt;/p&gt;

&lt;p&gt;Several performance improvements have also been made in the crypto, TLS
and JAAS/Kerberos components. See
&lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8270317&quot;&gt;JDK-8270317&lt;/a&gt;, 
&lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8276660&quot;&gt;JDK-8276660&lt;/a&gt;, 
&lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8273299&quot;&gt;JDK-8273299&lt;/a&gt;, 
&lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8268427&quot;&gt;JDK-8268427&lt;/a&gt;, 
&lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8267125&quot;&gt;JDK-8267125&lt;/a&gt;, 
and &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8273026&quot;&gt;JDK-8273026&lt;/a&gt;
for more details.&lt;/p&gt;

&lt;p&gt;Also, one other important JDK 18 feature that is not part of the security
libraries area but is definitely worth mentioning is:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/421&quot;&gt;JEP 421: Deprecate Finalization for Removal&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;This JEP deprecates finalization for removal in a future release. Finalizers
can cause various security issues and require special care when using.
More robust replacements and techniques are already available and are
&lt;a href=&quot;https://openjdk.java.net/jeps/421#Alternative-techniques&quot;&gt;listed in the JEP&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of Contents&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#crypto&quot;&gt;Crypto&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#pki&quot;&gt;PKI&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#kerberos&quot;&gt;Kerberos&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#security-manager&quot;&gt;Security Manager&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#tools&quot;&gt;Tools&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#signed-jars&quot;&gt;Signed JARs&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;crypto&quot;&gt;Crypto&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;PKCS#11 support for AES Key Wrap and AES Key Wrap With Padding (KWP) modes&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SunPKCS11&lt;/code&gt; provider now supports the AES Key Wrap and AES Key Wrap
With Padding (KWP) cipher modes if the underlying PKCS11 native library
supports them.&lt;/p&gt;

    &lt;p&gt;These standard modes are designed to protect cryptographic keys and
are defined in &lt;a href=&quot;https://csrc.nist.gov/publications/detail/sp/800-38f/final&quot;&gt;NIST SP 800-38F&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;This enhancement builds on
&lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8248268&quot;&gt;the enhancement in JDK 17&lt;/a&gt;
which added and improved support for these modes to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SunJCE&lt;/code&gt; provider.&lt;/p&gt;

    &lt;p&gt;Use these modes in your Java application with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.crypto.Cipher&lt;/code&gt;
API with the algorithm transformations &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;AES/KW/NoPadding&quot;&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;AES/KW/PKCS5Padding&quot;&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;AES/KWP/NoPadding&quot;&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;The JCE algorithm mappings to the PKCS11 mechanisms are as follows:&lt;/p&gt;

    &lt;hr /&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;AES/KW/NoPadding Cipher =&amp;gt; CKM_AES_KEY_WRAP mechanism
AES/KW/PKCS5Padding Cipher =&amp;gt; CKM_AES_KEY_WRAP_PAD mechanism
AES/KWP/NoPadding Cipher =&amp;gt; CKM_AES_KEY_WRAP_KWP mechanism
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;See the &lt;a href=&quot;https://docs.oracle.com/en/java/javase/18/security/pkcs11-reference-guide1.html#GUID-30E98B63-4910-40A1-A6DD-663EAF466991&quot;&gt;PKCS#11 Reference Guide&lt;/a&gt;
for more information about PKCS#11 support in the JDK.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8264849&quot;&gt;JDK-8264849&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyStore::getAttributes()&lt;/code&gt; API&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A new &lt;a href=&quot;https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/security/KeyStore.html#getAttributes(java.lang.String)&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;getAttributes(String alias)&lt;/code&gt; method&lt;/a&gt;
has been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.KeyStore&lt;/code&gt; API. This method returns a
set of attributes associated with a KeyStore alias, or entry. Before this
change, the attributes of an entry could only be obtained by calling the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;getAttributes&lt;/code&gt; method of a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyStore.Entry&lt;/code&gt;. If the entry was a
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PrivateKeyEntry&lt;/code&gt;, the application needed to provide the proper password
to unlock the entry, even if the attributes associated with the entry
were not protected. This new API avoids that issue.&lt;/p&gt;

    &lt;p&gt;A corresponding &lt;a href=&quot;https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/security/KeyStoreSpi.html#engineGetAttributes(java.lang.String)&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;engineGetAttributes(String alias)&lt;/code&gt;&lt;/a&gt;
method has also been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyStoreSpi&lt;/code&gt; class for providers to
implement. If not overridden by a provider, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyStore::getAttributes&lt;/code&gt;
method will return an empty set. Third party providers should add support
for this API when adding support for JDK 18.&lt;/p&gt;

    &lt;p&gt;See the &lt;a href=&quot;https://docs.oracle.com/en/java/javase/18/security/java-cryptography-architecture-jca-reference-guide.html#GUID-AB51DEFD-5238-4F96-967F-082F6D34FBEA&quot;&gt;Key Management section of the JCA Reference Guide&lt;/a&gt;
for more information about KeyStores.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8225181&quot;&gt;JDK-8225181&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;A passwordless PKCS12 keystore is now easier to create&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Passwordless keystores (a keystore with no password required to
unlock it) are useful when the keystore is stored in a secure
location and is only intended to store non-sensitive information, such
as public X.509 certificates. With a passwordless PKCS12 keystore,
certificates are not encrypted and there is no Mac applied as an
integrity check is not necessary.&lt;/p&gt;

    &lt;p&gt;Prior to this change, creating a passwordless PKCS12 keystore was
difficult, and required setting various security properties. Now, a
passwordless PKCS12 keystore can be created by simply specifying a
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;null&lt;/code&gt; password to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyStore::store(outStream, password)&lt;/code&gt; API.
The keystore can then be loaded with a null (or any) password with
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyStore::load()&lt;/code&gt; API.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8231107&quot;&gt;JDK-8231107&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;pki&quot;&gt;PKI&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore is now in PKCS12 format&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore, which holds the root CA certificates bundled
with the JDK, has been converted from the non-standard JKS format to the
standard PKCS12 format.&lt;/p&gt;

    &lt;p&gt;This change has several benefits. It moves &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; away from the obsolete
JKS format. And it transitions &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; to the PKCS12 format which
supports a passwordless keystore – this means that you no longer have to
specify (or change) the default password “changeit”, unless you intend to
store sensitive material within it.&lt;/p&gt;

    &lt;p&gt;See the &lt;a href=&quot;#crypto&quot;&gt;Crypto&lt;/a&gt; section for more details on passwordless
keystores.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8275252&quot;&gt;JDK-8275252&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;OCSP responses support for RSASSA-PSS&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;OCSP responses signed with the RSASSA-PSS signature algorithm are now
supported.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8274471&quot;&gt;JDK-8274471&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Removal of Google’s GlobalSign Root Certificate&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The “GlobalSign” Root CA certificate is now expired and has been removed
from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore. This &lt;a href=&quot;https://crt.sh/?q=14&quot;&gt;root certificate&lt;/a&gt;
is owned by Google and has the following distinguished name:&lt;/p&gt;

    &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
   &lt;code&gt;
   CN=GlobalSign, O=GlobalSign, OU=GlobalSign Root CA - R2
   &lt;/code&gt;
   &lt;/div&gt;

    &lt;p&gt;This root certificate has also been removed from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore in
Oracle’s JDK 17.0.2, 11.0.14, 8u321, and 7u331 releases.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8225083&quot;&gt;JDK-8225083&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Removal of IdenTrust Root Certificate&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The “DST Root CA X3” Root CA certificate is now expired and has been removed
from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore. This &lt;a href=&quot;https://crt.sh/?id=8395&quot;&gt;root certificate&lt;/a&gt;
is owned by IdenTrust and has the following distinguished name:&lt;/p&gt;

    &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
   &lt;code&gt;
   CN=DST Root CA X3, O=Digital Signature Trust Co.
   &lt;/code&gt;
   &lt;/div&gt;

    &lt;p&gt;This root certificate has also been removed from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore in
Oracle’s JDK 17.0.1, 11.0.13, 8u311, and 7u321 releases.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8225082&quot;&gt;JDK-8225082&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;kerberos&quot;&gt;Kerberos&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Weak encryption types (DES, 3DES, RC4) have been removed from the
default list of Kerberos encryption types&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The DES, 3DES, and RC4 encryption types have been removed from the
default list of Kerberos encryption types. Note that these weak encryption
types were already disabled by default prior to this release, and
would not be used unless the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;allow_weak_crypto&lt;/code&gt; property was set
to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt; in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;krb5.conf&lt;/code&gt; file, but once that was done, any of the
weak encryption types could then be used. With this change, in order to use
them, you have to also specifically add the weak algorithm(s) that
you want to use to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;permitted_enctypes&lt;/code&gt; property (or alternatively, the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;default_tkt_enctypes&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;default_tgt_enctypes&lt;/code&gt; properties) in the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;krb5.conf&lt;/code&gt; file.&lt;/p&gt;

    &lt;p&gt;Re-enabling these weak encryption types is not recommended and should
be done at your own risk.&lt;/p&gt;

    &lt;p&gt;See &lt;a href=&quot;https://docs.oracle.com/en/java/javase/18/security/kerberos-5-gss-api-mechanism.html&quot;&gt;the Kerberos 5 GSS-API Mechanism Guide&lt;/a&gt;
for more information on the supported &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;krb5.conf&lt;/code&gt; properties.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8273670&quot;&gt;JDK-8273670&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;krb5.conf&lt;/code&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;default_checksum&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;safe_checksum_type&lt;/code&gt; properties are no longer supported&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;default_checksum&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;safe_checksum_type&lt;/code&gt; properties in the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;krb5.conf&lt;/code&gt; configuration file are no longer supported.&lt;/p&gt;

    &lt;p&gt;The checksum type used in TGS-REQ requests is derived from the
encryption type and therefore the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;default_checksum&lt;/code&gt; property is no
longer necessary.&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;safe_checksum_type&lt;/code&gt; property specifies the type of checksum to use for
KRB-SAFE requests and was never used directly by the JDK.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8274656&quot;&gt;JDK-8274656&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;security-manager&quot;&gt;Security Manager&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New APIs for Subject based authorization that do not depend on the Security Manager&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;In JDK 17, as specified in &lt;a href=&quot;https://openjdk.java.net/jeps/411&quot;&gt;JEP 411&lt;/a&gt;,
the Security Manager was deprecated for removal. As part of that change,
several Security Manager APIs were deprecated for removal, such as
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AccessControlContext&lt;/code&gt;. The JAAS &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Subject::doAs()&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Subject::getSubject()&lt;/code&gt; APIs depend on Security Manager related APIs,
even though they do not require a Security Manager to be installed to use
them.&lt;/p&gt;

    &lt;p&gt;These APIs are important for developers that want to write secure
applications that authorize subjects and perform sensitive operations 
based on their credentials. Thus, JEP 411 outlined plans to provide
replacement JAAS APIs that did not have dependencies on Security Manager
APIs.&lt;/p&gt;

    &lt;p&gt;These replacement JAAS APIs have now been added to JDK 18.
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/18/docs/api/java.base/javax/security/auth/Subject.html#callAs(javax.security.auth.Subject,java.util.concurrent.Callable)&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Subject::callAs()&lt;/code&gt;&lt;/a&gt;
is a replacement for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Subject::doAs()&lt;/code&gt;, and
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/18/docs/api/java.base/javax/security/auth/Subject.html#current()&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Subject::current()&lt;/code&gt;&lt;/a&gt; is a
replacement for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Subject::getSubject()&lt;/code&gt;. The usage of these new replacement
APIs is similar and simpler than the previous APIs. For example, here is
an example of code using the old APIs:&lt;/p&gt;

    &lt;hr /&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Subject s1 = new Subject();
Subject.doAs(s1,
    (PrivilegedExceptionAction&amp;lt;Void&amp;gt;)() -&amp;gt; {
        AccessControlContext acc = 
            AccessController.getContext();
    Subject s2 = Subject.getSubject(acc);
    return null;
});
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;
    &lt;p&gt;using the new APIs, this code now looks like:&lt;/p&gt;

    &lt;hr /&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Subject s1 = new Subject();
Subject.callAs(s1, () -&amp;gt; {
    Subject s2 = Subject.current();
    return null;
});
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;With the addition of these new APIs, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Subject::doAs()&lt;/code&gt; methods have
 been deprecated for removal. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Subject::getSubject()&lt;/code&gt; was already
 deprecated for removal in JDK 17.&lt;/p&gt;

    &lt;p&gt;See the &lt;a href=&quot;https://docs.oracle.com/en/java/javase/18/security/java-authentication-and-authorization-service-jaas-reference-guide.html#GUID-2A935F5E-0803-411D-B6BC-F8C64D01A25C&quot;&gt;JAAS Reference Guide&lt;/a&gt;
 for more information about JAAS.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8267108&quot;&gt;JDK-8267108&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New default for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.manager&lt;/code&gt; system property&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;JEP 411 also announced that we would be changing the default value of the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.manager&lt;/code&gt; system property from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;allow&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;disallow&lt;/code&gt; in
JDK 18. This change improves the performance of applications that do not
run with a Security Manager.&lt;/p&gt;

    &lt;p&gt;The implication of this change means that applications that dynamically
install a Security Manager (by calling &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;System::setSecurityManager()&lt;/code&gt;)
must now explicitly set the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.manager&lt;/code&gt; system property to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;allow&lt;/code&gt; on the command-line, for example as follows:&lt;/p&gt;

    &lt;hr /&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;java -Djava.security.manager=allow MyApp
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8270380&quot;&gt;JDK-8270380&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;tools&quot;&gt;Tools&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keytool&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jarsigner&lt;/code&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--version&lt;/code&gt; option&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A new option named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--version&lt;/code&gt; has been to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keytool&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jarsigner&lt;/code&gt;
tools. If specified, it will print the JDK version that the tool is using.
Here is an example:&lt;/p&gt;

    &lt;hr /&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ keytool --version
keytool 18
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;See the &lt;a href=&quot;https://docs.oracle.com/en/java/javase/18/docs/specs/man/keytool.html&quot;&gt;keytool&lt;/a&gt;
and &lt;a href=&quot;https://docs.oracle.com/en/java/javase/18/docs/specs/man/jarsigner.html&quot;&gt;jarsigner&lt;/a&gt;
tool specifications for more details about these tools.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8272163&quot;&gt;JDK-8272163&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;signed-jars&quot;&gt;Signed JARs&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;SHA-1 JARs are disabled by default&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;JARs signed with SHA-1 algorithms are now disabled by default. SHA-1 is
a digest algorithm that has become increasingly weak and should no longer
be used for digital signatures.&lt;/p&gt;

    &lt;p&gt;With this change, maintaining compatibility with previously signed JARs
was an important consideration, so the restrictions do not apply to
SHA-1 JARs that have been timestamped before 2019-01-01. However, this
compatibility constraint is subject to change so it is in your best
interest to re-sign any SHA-1 JARs with stronger algorithms.&lt;/p&gt;

    &lt;p&gt;If a JAR is signed with SHA-1 and does not meet the compatibility
constraints above, then it will be restricted and treated as if it were
unsigned. This applies to the algorithms used to digest and sign the JAR,
as well as the signer’s certificate chain and any revocation data such
as CRLs or signed OCSP responses. If the JAR is timestamped, it also
applies to the timestamp digest and the TSA’s certificate chain and any
revocation data.&lt;/p&gt;

    &lt;p&gt;This change is also planned to be backported to Oracle’s update releases
later in the year – check the
&lt;a href=&quot;https://java.com/cryptoroadmap&quot;&gt;Java Crypto Roadmap&lt;/a&gt; for the latest status
and targeted dates.&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jarsigner&lt;/code&gt; tool has also been enhanced to more accurately detect and
warn you if your JAR is affected by these restrictions. We encourage
you to use this tool to see if your JARs are affected. Here is an example
of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jarsigner&lt;/code&gt; when used to verify a SHA-1 JAR that violates the
restrictions (note that SHA-1 as the Digest algorithm is flagged as
“(disabled)” and a warning is emitted by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jarsigner&lt;/code&gt;):&lt;/p&gt;

    &lt;hr /&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ jarsigner -verify -verbose signed.jar 

          57 Tue Mar 22 14:25:08 EDT 2022 META-INF/MANIFEST.MF
         249 Tue Mar 22 14:25:08 EDT 2022 META-INF/SIGNER.SF
        2005 Tue Mar 22 14:25:08 EDT 2022 META-INF/SIGNER.RSA
 m  ?      1 Tue Mar 22 14:24:16 EDT 2022 A

  s = signature was verified 
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  ? = unsigned entry

- Signed by &quot;CN=signer&quot;
    Digest algorithm: SHA-1 (disabled)
    Signature algorithm: SHA256withRSA, 2048-bit key

WARNING: The jar will be treated as unsigned, because it is signed with a weak algorithm that is now disabled by the security property:

  jdk.jar.disabledAlgorithms=MD2, MD5, RSA keySize &amp;lt; 1024, DSA keySize &amp;lt; 1024, SHA1 denyAfter 2019-01-01
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;
    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8269039&quot;&gt;JDK-8269039&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</content>
		</entry>
	
		<entry>
			<title>JDK 17 Security Enhancements</title>
			<link href="http://seanjmullan.org/blog/2021/09/14/jdk17"/>
			<updated>2021-09-14T00:00:00+00:00</updated>
			<id>http://seanjmullan.org/blog/2021/09/14/jdk17</id>
			<content type="html">&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/projects/jdk/17/&quot;&gt;JDK 17&lt;/a&gt; was released on September 14, 2021! As with
my previous &lt;a href=&quot;https://seanjmullan.org/blog/&quot;&gt;blogs&lt;/a&gt;, I
have compiled a list of what I think are the most interesting and useful
security enhancements in this release.  I have also grouped
them into appropriate categories (crypto, TLS, etc) which should make
it easier to find out what has changed in each specific area.
The &lt;a href=&quot;https://jdk.java.net/17/release-notes&quot;&gt;JDK 17 release notes&lt;/a&gt;
also contain further details on these and other enhancements.&lt;/p&gt;

&lt;p&gt;Probably the most significant security related change in JDK 17 is
&lt;a href=&quot;https://openjdk.java.net/jeps/411&quot;&gt;JEP 411: Deprecate the Security Manager for Removal&lt;/a&gt;.
JDK 17 begins that process by deprecating a number of Security Manager APIs
and adding run time warnings for applications using the Security Manager.
See the &lt;a href=&quot;#security-manager&quot;&gt;Security Manager&lt;/a&gt; section below for further details.&lt;/p&gt;

&lt;p&gt;Also, three other important JDK 17 features that are not part of the security
libraries area but have beneficial security benefits include:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/403&quot;&gt;JEP 403: Strongly Encapsulate JDK Internals&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;With JEP 403, JDK 17 continues to strengthen the strong encapsulation
of JDK internals by disabling the command line switch to
enable relaxed strong encapsulation. Instead you must use the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--add-opens&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--add-exports&lt;/code&gt; command-line options to individually
open/export packages if necessary.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/409&quot;&gt;JEP 409: Sealed Classes&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Sealed classes allow you to restrict what classes are allowed to
extend or implement a specific class. This has obvious security
benefits as it can be used to prevent unauthorized implementations of the
class.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/415&quot;&gt;JEP 415: Context-Specific Deserialization Filters&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/jeps/290&quot;&gt;Deserialization filters&lt;/a&gt; were introduced
in JDK 9 and allow applications and libraries to validate incoming
serialized streams before deserializing them. This can be done statically
via security properties or dynamically via a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ObjectInputFilter&lt;/code&gt; API
that applies to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ObjectInputStream&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;JEP 415 improves on this feature by introducing filter factories which
can be used to apply different filters depending on the object stream.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of Contents&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#crypto&quot;&gt;Crypto&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#pki&quot;&gt;PKI&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#tls&quot;&gt;TLS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#kerberos&quot;&gt;Kerberos&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#xml-signature&quot;&gt;XML Signature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#security-manager&quot;&gt;Security Manager&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;crypto&quot;&gt;Crypto&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Support KWP in addition to KW&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SunJCE&lt;/code&gt; provider now supports the AES Key Wrap With Padding (KWP) mode.
Also, the AES Key Wrap mode (KW) has been enhanced to support encryption
of keys (in addition to wrapping), and custom IVs and padding schemes.&lt;/p&gt;

    &lt;p&gt;These standard modes are designed to protect cryptographic keys and
are defined in &lt;a href=&quot;https://csrc.nist.gov/publications/detail/sp/800-38f/final&quot;&gt;NIST SP 800-38F&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Use these modes in your Java application with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.crypto.Cipher&lt;/code&gt;
API with the algorithm transformations &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;AES/KWP/NoPadding&quot;&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;AES/KW/PKCS5Padding&quot;&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;AES/KW/NoPadding&quot;&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Alternatively, you can specify &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;AESWrap&quot;&lt;/code&gt; as the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cipher&lt;/code&gt; algorithm
which is equivalent to KW mode with NoPadding, or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;AESWrapPad&quot;&lt;/code&gt; which
is equivalent to KWP mode with NoPadding.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8248268&quot;&gt;JDK-8248268&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;JCE doesn’t provide any class to handle RSA private key in PKCS#1&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;RSA&quot;&lt;/code&gt; implementation of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyFactory&lt;/code&gt; can now generate private and
public keys from a PKCS#1 encoding (in addition to PKCS#8).&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8023980&quot;&gt;JDK-8023980&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Add ChaCha20 and Poly1305 support to SunPKCS11 provider&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SunPKCS11&lt;/code&gt; provider now supports the ChaCha20 and Poly1305 stream
ciphers, if the underlying PKCS#11 implementation also supports them.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8255410&quot;&gt;JDK-8255410&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;pki&quot;&gt;PKI&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Add support for RFC 8954: Online Certificate Status Protocol (OCSP) Nonce Extension&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Support for the &lt;a href=&quot;https://datatracker.ietf.org/doc/rfc8954/&quot;&gt;OCSP Nonce Extension&lt;/a&gt;
has been added to the PKIX implementation. The Nonce extension can help
prevent replay attacks where a previous good OCSPResponse for a certificate
has not expired but the status of the certificate has changed (for example,
it is now revoked) and the prior good OCSPResponse can be replayed.&lt;/p&gt;

    &lt;p&gt;For compatibility reasons, the extension is not enabled by default, but
can be enabled by setting the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.security.certpath.ocspNonce&lt;/code&gt; system
property to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt;. If not enabled, the default JDK implementation uses
a time-based approach as specified by
&lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc5019#section-7.1&quot;&gt;RFC 5019&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8256895&quot;&gt;JDK-8256895&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Java should support GET OCSP calls&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The JDK PKIX implementation now uses HTTP GET (instead of POST) to submit
OCSP requests if the request is less than 255 bytes. Using GET allows
requests to be cached which can improve performance.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8179503&quot;&gt;JDK-8179503&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New HARICA root CA certificates added&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Two new root CA certificates owned by &lt;a href=&quot;https://www.harica.gr/&quot;&gt;HARICA&lt;/a&gt;
have been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore:&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;
        &lt;p&gt;HARICA Root CA 2015&lt;/p&gt;

        &lt;p&gt;This &lt;a href=&quot;https://crt.sh/?id=12731951&quot;&gt;root certificate&lt;/a&gt; has the following distinguished name:&lt;/p&gt;

        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
CN=Hellenic Academic and Research Institutions RootCA 2015, O=Hellenic Academic and Research Institutions Cert. Authority, L=Athens, C=GR
&lt;/code&gt;
&lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;HARICA ECC Root CA 2015&lt;/p&gt;

        &lt;p&gt;This &lt;a href=&quot;https://crt.sh/?id=12729857&quot;&gt;root certificate&lt;/a&gt; has the following distinguished name:&lt;/p&gt;

        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
CN=Hellenic Academic and Research Institutions ECC RootCA 2015, O=Hellenic Academic and Research Institutions Cert. Authority, L=Athens, C=GR
&lt;/code&gt;
&lt;/div&gt;
      &lt;/li&gt;
    &lt;/ol&gt;

    &lt;p&gt;These root certificates have also been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore in
Oracle’s JDK 16.0.1, 11.0.11, 8u291, and 7u301 releases.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8256421&quot;&gt;JDK-8256421&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;tls&quot;&gt;TLS&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Configurable extensions with system properties&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;TLS interoperability issues can sometimes occur if an implementation
does not properly handle TLS extensions that it does not support. To
help workaround these issues, two new system properties have been
introduced that allow you to customize the extensions that
are not enabled (i.e. disabled) when establishing a TLS connection.&lt;/p&gt;

    &lt;p&gt;The system properties apply to the client
(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.client.disableExtensions&lt;/code&gt;) or the server
(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.server.disableExtensions&lt;/code&gt;). The value of the property is
a comma separated list of &lt;a href=&quot;https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml&quot;&gt;standard TLS extension names&lt;/a&gt;. For example:&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java -Djdk.tls.client.disabledExtensions=&quot;status_request,signature_algorithms_cert&quot; ...&lt;/code&gt;&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8217633&quot;&gt;JDK-8217633&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;kerberos&quot;&gt;Kerberos&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Deprecate 3DES and RC4 in Kerberos&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;3DES and RC4 Kerberos encryption types have now been disabled
by default. Both 3DES and RC4 are weak encryption algorithms that should
not be used. The Kerberos 3DES and RC4 encryption types are officially
deprecated in &lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc8429&quot;&gt;RFC 8429&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;By default the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;des3-hmac-sha1&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rc4-hmac&lt;/code&gt; encryption types are now
disabled, but can be re-enabled, at your own risk, by setting the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;allow_weak_crypto&lt;/code&gt; property to true in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;krb5.conf&lt;/code&gt; configuration file.
However, note that will also re-enable other weak encryption types that
are already disabled such as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;des-cbc-crc&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;des-cbc-md5&lt;/code&gt;. Alternatively,
set the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;default_tkt_enctypes&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;default_tgs_enctypes&lt;/code&gt;, and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;permitted_enctypes&lt;/code&gt; properties to the encryption types that are allowed.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8139348&quot;&gt;JDK-8139348&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;xml-signature&quot;&gt;XML Signature&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Add SignatureMethodParameterSpec subclass for RSASSA-PSS params&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A new class named &lt;a href=&quot;https://docs.oracle.com/en/java/javase/17/docs/api/java.xml.crypto/javax/xml/crypto/dsig/spec/RSAPSSParameterSpec.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.xml.crypto.dsig.spec.RSAPSSParameterSpec&lt;/code&gt;&lt;/a&gt;
has been added to the XML Signature API and can be used to specify
parameters for the RSASSA-PSS signature algorithm. Also, a new String
constant for the signature algorithm (&lt;a href=&quot;https://docs.oracle.com/en/java/javase/17/docs/api/java.xml.crypto/javax/xml/crypto/dsig/SignatureMethod.html#RSA_PSS&quot;&gt;RSA_PSS&lt;/a&gt;) has been defined.&lt;/p&gt;

    &lt;p&gt;The new API takes a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.spec.PSSParameterSpec&lt;/code&gt; as the
input parameter.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8259575&quot;&gt;JDK-8259575&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Disable SHA-1 XML Signatures&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;XML Signatures that contain SHA-1 based digest or signature
algorithms are now disabled by default. SHA-1 is a weak digest algorithm
that is no longer recommended for digest and signature algorithms.
Validation of XML signatures that violate this constraint will fail.&lt;/p&gt;

    &lt;p&gt;If necessary, and at their own risk, users can re-enable SHA-1 by
modifying or overriding the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.xml.dsig.secureValidationPolicy&lt;/code&gt;
security property defined in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security&lt;/code&gt; configuration file.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8259709&quot;&gt;JDK-8259709&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Enable XML Signature secure validation mode by default&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The XML Signature secure validation mode has been enabled by default.
Previously, applications had to explicitly enable this mode by
setting the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;org.jcp.xml.dsig.secureValidation&lt;/code&gt; property to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt; with
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.xml.crypto.XMLCryptoContext.setProperty()&lt;/code&gt; method, or by
running the code with a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SecurityManager&lt;/code&gt; enabled.&lt;/p&gt;

    &lt;p&gt;The secure validation mode provides additional protection against
XML Signatures that contain potentially hostile content, use weak
algorithms, or contain constructs that may cause denial-of-service.
Currently, this mode enforces the following restrictions:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Forbids the use of XSLT transforms&lt;/li&gt;
      &lt;li&gt;Restricts the number of SignedInfo or Manifest Reference elements to 30 or less&lt;/li&gt;
      &lt;li&gt;Restricts the number of Reference transforms to 5 or less&lt;/li&gt;
      &lt;li&gt;Forbids the use of MD5 signature or MAC algorithms&lt;/li&gt;
      &lt;li&gt;Forbids the use of SHA-1 signature algorithms&lt;/li&gt;
      &lt;li&gt;Ensures that Reference IDs are unique to help prevent signature wrapping attacks&lt;/li&gt;
      &lt;li&gt;Forbids Reference URIs of type http, https, or file&lt;/li&gt;
      &lt;li&gt;Does not allow a RetrievalMethod element to reference another RetrievalMethod element&lt;/li&gt;
      &lt;li&gt;Forbids RSA or DSA keys less than 1024 bits and EC keys less than 224 bits&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;For more information about this mode see the
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/17/security/java-xml-digital-signature-api-overview-and-tutorial.html#GUID-8618C294-3BFE-45C3-9A1E-C4629E337E68&quot;&gt;XML Signature Secure Validation Mode&lt;/a&gt;
in the XML Signature API Overview and Tutorial.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8259801&quot;&gt;JDK-8259801&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;security-manager&quot;&gt;Security Manager&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Deprecate the Security Manager for Removal&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;In JDK 17, the Security Manager has been deprecated for removal. This
includes the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.lang.SecurityManager&lt;/code&gt; API and several APIs related
to the Security Manager – see
&lt;a href=&quot;https://openjdk.java.net/jeps/411#Deprecate-APIs-for-removal&quot;&gt;the &lt;em&gt;Deprecate APIs for removal&lt;/em&gt; section of the JEP&lt;/a&gt;
for a full list of impacted APIs.&lt;/p&gt;

    &lt;p&gt;There are several reasons why the Security Manager is being deprecated,
and these are covered in more detail in
&lt;a href=&quot;https://openjdk.java.net/jeps/411#Motivation&quot;&gt;the &lt;em&gt;Motivation&lt;/em&gt; section of the JEP&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Note that the Security Manager will still be fully supported in JDK 17 –
however warnings will be emitted at run time if a Security Manager is
enabled – this will help alert users and developers of the deprecation and
prepare for the future removal.&lt;/p&gt;

    &lt;p&gt;JEP: &lt;a href=&quot;https://openjdk.java.net/jeps/411&quot;&gt;https://openjdk.java.net/jeps/411&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</content>
		</entry>
	
		<entry>
			<title>JDK 16 Security Enhancements</title>
			<link href="http://seanjmullan.org/blog/2021/03/18/jdk16"/>
			<updated>2021-03-18T00:00:00+00:00</updated>
			<id>http://seanjmullan.org/blog/2021/03/18/jdk16</id>
			<content type="html">&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/projects/jdk/16/&quot;&gt;JDK 16&lt;/a&gt; was released on March 16, 2021! As with
my previous &lt;a href=&quot;https://seanjmullan.org/blog/&quot;&gt;blogs&lt;/a&gt;, I
have compiled a list of what I think are the most interesting and useful
security enhancements in this release.  I have also grouped
them into appropriate categories (crypto, TLS, etc) which should make
it easier to find out what has changed in each specific area.
The &lt;a href=&quot;https://jdk.java.net/16/release-notes&quot;&gt;JDK 16 release notes&lt;/a&gt;
also contain further details on these and other enhancements.&lt;/p&gt;

&lt;p&gt;Also, one other feature in JDK 16 that is not specifically in the security
libraries area but worth mentioning is
&lt;a href=&quot;https://openjdk.java.net/jeps/396&quot;&gt;JEP 396&lt;/a&gt;, Strongly Encapsulate JDK
Internals by Default. With this change, “packages that existed in JDK 8 and
do not contain critical internal APIs will no longer be open by default”
meaning they cannot be accessed by code outside the JDK. This is a great
improvement in out of the box security.&lt;/p&gt;

&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of Contents&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#crypto&quot;&gt;Crypto&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#pki&quot;&gt;PKI&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#tls&quot;&gt;TLS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#signed-jars&quot;&gt;Signed JARs&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;crypto&quot;&gt;Crypto&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;SHA-3 signature algorithm support&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The SHA-3 family of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Signature&lt;/code&gt; algorithms are now supported for RSA, EC,
and DSA keys. The algorithms for each key type are:&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;RSA: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SHA3-224withRSA&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SHA3-256withRSA&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SHA3-384withRSA&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SHA3-512withRSA&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;EC: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SHA3-224withECDSA&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SHA3-256withECDSA&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SHA3-384withECDSA&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SHA3-512withECDSA&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;DSA: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SHA3-224withDSA&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SHA3-256withDSA&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SHA3-384withDSA&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SHA3-512withDSA&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SHA384withDSA&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SHA512withDSA&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;The EC and DSA algorithms also include algorithms using the P1363 format,
by appending &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;inP1363Format&lt;/code&gt; to the name.&lt;/p&gt;

    &lt;p&gt;SHA-3 is a digest algorithm that is considered as strong as SHA-2. Use the
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/security/Signature.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.Signature&lt;/code&gt;&lt;/a&gt;
API to access these algorithms, ex:&lt;/p&gt;

    &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
Signature sig = Signature.getInstance(&quot;SHA3-256withRSA&quot;);
&lt;/code&gt;
&lt;/div&gt;

    &lt;p&gt;This enhancement extends the support for SHA-3 in the JDK. In JDK 9, we
added support for the
&lt;a href=&quot;https://openjdk.java.net/jeps/287&quot;&gt;SHA-3 hash algorithms&lt;/a&gt;. In JDK 15, we
added support for the
&lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8172680&quot;&gt;SHA-3 hmac algorithms&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;The SunPKCS11 provider now supports SHA-3 algorithms&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The SunPKCS11 provider has also been updated to support SHA-3 algorithms,
so if you use a PKCS11 implementation, you can now access these algorithms
from your Java application.&lt;/p&gt;

    &lt;p&gt;The complete list of algorithms is as follows:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MessageDigest&lt;/code&gt;: SHA3-224, SHA3-256, SHA3-384, SHA3-512&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Mac&lt;/code&gt;: HmacSHA3-224, HmacSHA3-256, HmacSHA3-384, HmacSHA3-512&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Signature&lt;/code&gt;: SHA3-224withDSA, SHA3-256withDSA, SHA3-384withDSA, SHA3-512withDSA, SHA3-224withDSAinP1363Format, SHA3-256withDSAinP1363Format, SHA3-384withDSAinP1363Format, SHA3-512withDSAinP1363Format, SHA3-224withECDSA, SHA3-256withECDSA, SHA3-384withECDSA, SHA3-512withECDSA, SHA3-224withECDSAinP1363Format, SHA3-256withECDSAinP1363Format, SHA3-384withECDSAinP1363Format, SHA3-512withECDSAinP1363Format, SHA3-224withRSA, SHA3-256withRSA, SHA3-384withRSA, SHA3-512withRSA, SHA3-224withRSASSA-PSS, SHA3-256withRSASSA-PSS, SHA3-384withRSASSA-PSS, SHA3-512withRSASSA-PSS.&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyGenerator&lt;/code&gt;: HmacMD5, HmacSHA1, HmacSHA224, HmacSHA256, HmacSHA384, HmacSHA512, HmacSHA512/224, HmacSHA512/256, HmacSHA3-224, HmacSHA3-256, HmacSHA3-384, HmacSHA3-512.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;The default PKCS12 algorithms have been strengthened&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The default algorithms used to encrypt certificates and keys and protect
the integrity of a PKCS12 keystore have been upgraded to stronger
algorithms.&lt;/p&gt;

    &lt;p&gt;The following security properties in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security&lt;/code&gt; configuration
file are now set to stronger algorithms based on PBES2 which use SHA256
and AES-256:&lt;/p&gt;

    &lt;hr /&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;keystore.pkcs12.certProtectionAlgorithm = PBEWithHmacSHA256AndAES_256
keystore.pkcs12.keyProtectionAlgorithm = PBEWithHmacSHA256AndAES_256
keystore.pkcs12.macAlgorithm = HmacPBESHA256
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;If you experience interoperability problems with an existing PKCS12
keystore that has been protected using the previous algorithm defaults,
you can set the system property &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keystore.pkcs12.legacy&lt;/code&gt; to load this
keystore and read its contents using the older algorithms.&lt;/p&gt;

    &lt;p&gt;This change is also targeted to be backported to Oracle’s JDK 11, 8 and 7
releases in July 2021 and is listed on the
&lt;a href=&quot;https://java.com/en/jre-jdk-cryptoroadmap.html&quot;&gt;Oracle JRE and JDK Cryptographic Roadmap&lt;/a&gt;
(see the row with the Action named “Upgrade the default PKCS12
encryption/MAC algorithms”).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;The native elliptic curve implementations have been removed&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The elliptic curves that were implemented in native C code in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SunEC&lt;/code&gt;
provider have been removed. These curves are no longer recommended and/or
were not implemented using modern formulas and techniques.&lt;/p&gt;

    &lt;p&gt;The curves that are removed by this change are:&lt;/p&gt;

    &lt;hr /&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;secp112r1, secp112r2, secp128r1, secp128r2, secp160k1, secp160r1,
secp160r2, secp192k1, secp192r1, secp224k1, secp224r1, secp256k1,
sect113r1, sect113r2, sect131r1, sect131r2, sect163k1, sect163r1,
sect163r2, sect193r1, sect193r2, sect233k1, sect233r1, sect239k1,
sect283k1, sect283r1, sect409k1, sect409r1, sect571k1, sect571r1,
X9.62 c2tnb191v1, X9.62 c2tnb191v2, X9.62 c2tnb191v3, X9.62 c2tnb239v1,
X9.62 c2tnb239v2, X9.62 c2tnb239v3, X9.62 c2tnb359v1, X9.62 c2tnb431r1,
X9.62 prime192v2, X9.62 prime192v3, X9.62 prime239v1, X9.62 prime239v2,
X9.62 prime239v3, brainpoolP256r1 brainpoolP320r1, brainpoolP384r1,
brainpoolP512r1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;The following curves are implemented in Java, use modern techniques, and
are not affected by this change: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;secp256r1&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;secp384r1&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;secp521r1&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;x25519&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;x448&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ed25519&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ed448&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;pki&quot;&gt;PKI&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Several &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.cert&lt;/code&gt; APIs that represent X.500 distinguished names
as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;String&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Principal&lt;/code&gt; objects have been deprecated&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Representing distinguished names as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;String&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Principal&lt;/code&gt; objects can
cause issues due to differences in encoding or loss of information. Each
of these APIs have alternative methods that represent distinguished names
as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X500Principal&lt;/code&gt; and/or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;byte[]&lt;/code&gt;. The deprecated APIs are:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/security/cert/X509Certificate.html#getIssuerDN()&quot;&gt;X509Certificate.getIssuerDN()&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/security/cert/X509Certificate.html#getSubjectDN()&quot;&gt;X509Certificate.getSubjectDN()&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/security/cert/X509CRL.html#getIssuerDN()&quot;&gt;X509CRL.getIssuerDN()&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/security/cert/X509CertSelector.html#setIssuer(java.lang.String)&quot;&gt;X509CertSelector.setIssuer(String)&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/security/cert/X509CertSelector.html#setSubject(java.lang.String)&quot;&gt;X509CertSelector.setSubject(String)&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/security/cert/X509CertSelector.html#getIssuerAsString()&quot;&gt;X509CertSelector.getIssuerAsString()&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/security/cert/X509CertSelector.html#getSubjectAsString()&quot;&gt;X509CertSelector.getSubjectAsString()&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/security/cert/X509CRLSelector.html#addIssuerName(java.lang.String)&quot;&gt;X509CRLSelector.addIssuerName(String)&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Root CA certificates with 1024-bit keys have been removed&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Five root certificates with 1024-bit RSA public keys have been
removed from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore. Keys of this size are weak and
are no longer recommended. The five roots are:&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;
        &lt;p&gt;Thawte Premium Server CA&lt;/p&gt;

        &lt;p&gt;This &lt;a href=&quot;https://crt.sh/?id=1615980&quot;&gt;root certificate&lt;/a&gt; is owned by DigiCert
and has the following distinguished name:&lt;/p&gt;

        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
EMAILADDRESS=premium-server@thawte.com, CN=Thawte Premium Server CA, OU=Certification Services Division, O=Thawte Consulting cc, L=Cape Town, ST=Western Cape, C=ZA
&lt;/code&gt;
&lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;VeriSign Class 2 Public Primary Certification Authority - G2&lt;/p&gt;

        &lt;p&gt;This &lt;a href=&quot;https://crt.sh/?id=8948838&quot;&gt;root certificate&lt;/a&gt; is owned by
DigiCert and has the following distinguished name:&lt;/p&gt;

        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
OU=VeriSign Trust Network, OU=&quot;(c) 1998 VeriSign, Inc. - For authorized use only&quot;, OU=Class 2 Public Primary Certification Authority - G2, O=&quot;VeriSign, Inc.&quot;, C=US
&lt;/code&gt;
&lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;VeriSign Class 3 Public Primary Certification Authority&lt;/p&gt;

        &lt;p&gt;This &lt;a href=&quot;https://crt.sh/?id=42&quot;&gt;root certificate&lt;/a&gt; is owned by DigiCert
and has the following distinguished name:&lt;/p&gt;

        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
OU=Class 3 Public Primary Certification Authority, O=&quot;VeriSign, Inc.&quot;, C=US
&lt;/code&gt;
&lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;VeriSign Class 3 Public Primary Certification Authority - G2&lt;/p&gt;

        &lt;p&gt;This &lt;a href=&quot;https://crt.sh/?id=845596&quot;&gt;root certificate&lt;/a&gt; is owned by DigiCert
and has the following distinguished name:&lt;/p&gt;

        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
OU=VeriSign Trust Network, OU=&quot;(c) 1998 VeriSign, Inc. - For authorized use only&quot;, OU=Class 3 Public Primary Certification Authority - G2, O=&quot;VeriSign, Inc.&quot;, C=US
&lt;/code&gt;
&lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Thawte Timestamping CA&lt;/p&gt;

        &lt;p&gt;This &lt;a href=&quot;https://crt.sh/?id=9031018&quot;&gt;root certificate&lt;/a&gt; is owned by DigiCert
and has the following distinguished name:&lt;/p&gt;

        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
CN=Thawte Timestamping CA, OU=Thawte Certification, O=Thawte, L=Durbanville, ST=Western Cape, C=ZA
&lt;/code&gt;

&lt;/div&gt;
      &lt;/li&gt;
    &lt;/ol&gt;
    &lt;p&gt;This change is also targeted to be backported to Oracle’s JDK 11, 8 and 7
releases in July 2021 and is listed on the
&lt;a href=&quot;https://java.com/en/jre-jdk-cryptoroadmap.html&quot;&gt;Oracle JRE and JDK Cryptographic Roadmap&lt;/a&gt;
(see the row with the Action named “Remove root certificates with 1024-bit
keys”).&lt;/p&gt;

    &lt;p&gt;The compatibility risk associated with this change is considered to be low.
However, if users encounter issues, they can download the certificates from
the links above and import them into the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore, at their own
risk.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New Entrust Root CA certificate added&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The “Entrust Root Certification Authority - G4” certificate has been added
to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore.&lt;/p&gt;

    &lt;p&gt;This &lt;a href=&quot;https://crt.sh/?id=713609039&quot;&gt;root certificate&lt;/a&gt; is owned by Entrust
and has the following distinguished name:&lt;/p&gt;

    &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
CN=Entrust Root Certification Authority - G4, OU=&quot;(c) 2015 Entrust, Inc. - for authorized use only&quot;, OU=See www.entrust.net/legal-terms, O=&quot;Entrust, Inc.&quot;, C=US
&lt;/code&gt;
&lt;/div&gt;

    &lt;p&gt;This root certificate has also been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore in
Oracle’s JDK 11.0.9, 8u271, and 7u281 releases.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New SSL Root CA certificates added&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Three new root CA certificates from SSL.com have been added to the ‘cacerts`
keystore:&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;
        &lt;p&gt;SSL.com Root Certification Authority RSA&lt;/p&gt;

        &lt;p&gt;This &lt;a href=&quot;https://crt.sh/?id=36499471&quot;&gt;root certificate&lt;/a&gt; has the following
distinguished name:&lt;/p&gt;

        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
CN=SSL.com Root Certification Authority RSA, O=SSL Corporation, L=Houston, ST=Texas, C=US
&lt;/code&gt;
&lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;SSL.com EV Root Certification Authority RSA R2&lt;/p&gt;

        &lt;p&gt;This &lt;a href=&quot;https://crt.sh/?id=163978581&quot;&gt;root certificate&lt;/a&gt; has the following
distinguished name:&lt;/p&gt;

        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
CN=SSL.com EV Root Certification Authority RSA R2, O=SSL Corporation, L=Houston, ST=Texas, C=US
&lt;/code&gt;
&lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;SSL.com Root Certification Authority ECC&lt;/p&gt;

        &lt;p&gt;This &lt;a href=&quot;https://crt.sh/?id=36499472&quot;&gt;root certificate&lt;/a&gt; has the following
distinguished name:&lt;/p&gt;

        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
CN=SSL.com Root Certification Authority ECC, O=SSL Corporation, L=Houston, ST=Texas, C=US
&lt;/code&gt;
&lt;/div&gt;
      &lt;/li&gt;
    &lt;/ol&gt;

    &lt;p&gt;These root certificates have also been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore in
Oracle’s JDK 11.0.9, 8u271, and 7u281 releases.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;tls&quot;&gt;TLS&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;TLS support for the EdDSA signature algorithm&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Support for the EdDSA signature algorithm has been added to the TLS
implementation in the JDK.&lt;/p&gt;

    &lt;p&gt;EdDSA was designed to be resistant to commonly used side-channel attacks.
The platform-independent Java implementation does not branch on secrets
and the timing is independent of secrets. JCE support for EdDSA was added
in JDK 15 and specified in &lt;a href=&quot;https://openjdk.java.net/jeps/339&quot;&gt;JEP 339&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;The support applies to TLS versions 1.0 - 1.3 and is specified in
&lt;a href=&quot;https://tools.ietf.org/html/rfc8422&quot;&gt;RFC 8422&lt;/a&gt; for TLS 1.0 - 1.2 and
&lt;a href=&quot;https://tools.ietf.org/html/rfc8446&quot;&gt;RFC 8446&lt;/a&gt; for TLS 1.3.&lt;/p&gt;

    &lt;p&gt;In particular, certificates with EdDSA keys or signed with the EdDSA
signature algorithm are now supported and can be used to authenticate
clients or servers.&lt;/p&gt;

    &lt;p&gt;The following signature schemes are also now supported:
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ecdsa_secp256r1_sha256&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ecdsa_secp384r1_sha384&lt;/code&gt;, and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ecdsa_secp521r1_sha512&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;TLS 1.0 and 1.1 are now disabled by default&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The TLS 1.0 and 1.1 protocols have been disabled by default, improving
out of the box security. These protocols have various weaknesses and 
are no longer recommended. See
&lt;a href=&quot;https://tools.ietf.org/html/rfc8996&quot;&gt;RFC 8996&lt;/a&gt; for more information.&lt;/p&gt;

    &lt;p&gt;Applications should be using the more secure TLS 1.2 or 1.3 protocols,
both of which are supported by the JDK. However, if you encounter issues
and need to get your application working, you can (at your own risk),
re-enable TLS 1.0 or 1.1 by removing “TLSv1” and/or “TLSv1.1” from the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.disabledAlgorithms&lt;/code&gt; security property in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security&lt;/code&gt;
configuration file.&lt;/p&gt;

    &lt;p&gt;This change is also targeted to be backported to Oracle’s JDK 11, 8 and 7
releases in April 2021 and is listed on the
&lt;a href=&quot;https://java.com/en/jre-jdk-cryptoroadmap.html&quot;&gt;Oracle JRE and JDK Cryptographic Roadmap&lt;/a&gt;
(see the row with the Action named “Disable TLS 1.0 and TLS 1.1”).&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;signed-jars&quot;&gt;Signed JARs&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Signed JAR support for RSASSA-PSS and EdDSA&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;JARs can now be signed with the RSASSA-PSS and EdDSA signature
algorithms. Support for these algorithms has been added to the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jarsigner&lt;/code&gt; tool and the
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/16/docs/api/jdk.jartool/jdk/security/jarsigner/package-summary.html&quot;&gt;JarSigner API&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-sigalg&lt;/code&gt; option of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jarsigner&lt;/code&gt; now accepts &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;RSASSA-PSS&lt;/code&gt;”, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;EdDSA&quot;&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;Ed25519&quot;&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;Ed448&quot;&lt;/code&gt; as values for the signature algorithm.&lt;/p&gt;

    &lt;p&gt;Here is an example of signing a JAR with the Ed25519 algorithm:&lt;/p&gt;

    &lt;hr /&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;jarsigner -keystore keystore -sigalg Ed25519 -verbose App.jar edkey
Enter Passphrase for keystore: 
   adding: META-INF/MANIFEST.MF
   adding: META-INF/EDKEY.SF
   adding: META-INF/EDKEY.EC
  signing: App.class

&amp;gt;&amp;gt;&amp;gt; Signer
    X.509, CN=edkey
    Signature algorithm: Ed25519, 255-bit key
    [trusted certificate]
    
jar signed.
    
Warning: 
The signer&apos;s certificate is self-signed.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</content>
		</entry>
	
		<entry>
			<title>JDK 15 Security Enhancements</title>
			<link href="http://seanjmullan.org/blog/2020/10/13/jdk15"/>
			<updated>2020-10-13T00:00:00+00:00</updated>
			<id>http://seanjmullan.org/blog/2020/10/13/jdk15</id>
			<content type="html">&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/projects/jdk/15/&quot;&gt;JDK 15&lt;/a&gt; was released on September 15, 2020! As with
my previous blogs for &lt;a href=&quot;https://seanjmullan.org/blog/2020/03/19/jdk14&quot;&gt;JDK 14&lt;/a&gt;,
&lt;a href=&quot;https://seanjmullan.org/blog/2019/08/05/jdk13&quot;&gt;JDK 13&lt;/a&gt;,
and &lt;a href=&quot;https://seanjmullan.org/blog/2019/03/19/jdk12&quot;&gt;JDK 12&lt;/a&gt;, I
have compiled a list of what I think are the most interesting and useful
security enhancements in this release.  I have also grouped
them into appropriate categories (crypto, TLS, etc) which should make
it easier to find out what has changed in each specific area.
The &lt;a href=&quot;https://jdk.java.net/15/release-notes&quot;&gt;JDK 15 Release Notes&lt;/a&gt;
also contain further details on these and other enhancements.&lt;/p&gt;

&lt;p&gt;The most significant security feature of this release is support for the
Edwards-curve Digital Signature Algorithm, which offers improved security and
performance over other signature algorithms. See the &lt;a href=&quot;#crypto&quot;&gt;Crypto&lt;/a&gt;
section for more information.&lt;/p&gt;

&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of Contents&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#crypto&quot;&gt;Crypto&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#pki&quot;&gt;PKI&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#tls&quot;&gt;TLS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#tools&quot;&gt;Tools&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;crypto&quot;&gt;Crypto&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Edwards-curve Digital Signature Algorithm (EdDSA)&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;JDK 15 now supports the EdDSA signature algorithm. This feature is
defined in &lt;a href=&quot;https://openjdk.java.net/jeps/339&quot;&gt;JEP 339&lt;/a&gt;. The Ed25519
and Ed448 algorithms are both supported.&lt;/p&gt;

    &lt;p&gt;EdDSA was designed to be resistant to commonly used side-channel attacks.
The platform-independent Java implementation does not branch on secrets
and the timing is independent of secrets.&lt;/p&gt;

    &lt;p&gt;New standard classes and interfaces representing EdDSA keys have been
added to the Java SE platform. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SunEC&lt;/code&gt; provider has been enhanced
to support EdDSA for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Signature&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyFactory&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyPairGenerator&lt;/code&gt;
APIs.&lt;/p&gt;

    &lt;p&gt;Here is an example from the JEP of generating an EdDSA key pair and
signing some content:&lt;/p&gt;

    &lt;hr /&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;KeyPairGenerator kpg = KeyPairGenerator.getInstance(&quot;Ed25519&quot;);
KeyPair kp = kpg.generateKeyPair();
// algorithm is pure Ed25519
Signature sig = Signature.getInstance(&quot;Ed25519&quot;);
sig.initSign(kp.getPrivate());
sig.update(msg);
byte[] s = sig.sign();
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;More details on this feature can be found in the JEP and the
&lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8190219&quot;&gt;CSR&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;SHA-3 Mac algorithm support&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The SHA-3 family of Hmac algorithms are now supported: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HmacSHA3-224&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HmacSHA3-256&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HmacSHA3-384&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HmacSHA3-512&lt;/code&gt;. SHA-3 is a digest algorithm
that is considered as strong as SHA-2. Use the
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/15/docs/api/java.base/javax/crypto/Mac.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.crypto.Mac&lt;/code&gt;&lt;/a&gt;
API to access these algorithms, ex:&lt;/p&gt;

    &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
Mac mac = Mac.getInstance(&quot;HmacSHA3-256&quot;);
&lt;/code&gt;
&lt;/div&gt;

    &lt;p&gt;This enhancement extends the support for SHA-3 in the JDK. In JDK 9, we
added support for the
&lt;a href=&quot;https://openjdk.java.net/jeps/287&quot;&gt;SHA-3 hash algorithms&lt;/a&gt;. And in JDK 16,
we will be adding support for
&lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8252260&quot;&gt;SHA-3 signature algorithms&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;The native elliptic curves have been disabled by default&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The elliptic curves that are implemented in native C code in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SunEC&lt;/code&gt;
provider have been disabled by default. These curves are no longer
recommended and/or are not implemented using modern formulas and techniques.
APIs that try to use one of these curves will throw an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Exception&lt;/code&gt; with
the message “Legacy SunEC curve disabled” and the name of the curve.&lt;/p&gt;

    &lt;p&gt;To re-enable them (&lt;em&gt;at your own risk&lt;/em&gt;), set the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.sunec.disableNative&lt;/code&gt;
system property to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;false&lt;/code&gt;. For example:&lt;/p&gt;

    &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
$ java -Djdk.sunec.disableNative=false ...
&lt;/code&gt;
&lt;/div&gt;

    &lt;p&gt;Note however, that if you re-enable them, they are still disabled by
default when used in TLS, CertPath, or Signed JARs. See the
&lt;a href=&quot;https://www.oracle.com/java/technologies/javase/14-relnote-issues.html#JDK-8233228&quot;&gt;JDK 14 release note&lt;/a&gt;
for more information.&lt;/p&gt;

    &lt;p&gt;The curves that are disabled by this change are:&lt;/p&gt;

    &lt;hr /&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;secp112r1, secp112r2, secp128r1, secp128r2, secp160k1, secp160r1,
secp160r2, secp192k1, secp192r1, secp224k1, secp224r1, secp256k1,
sect113r1, sect113r2, sect131r1, sect131r2, sect163k1, sect163r1,
sect163r2, sect193r1, sect193r2, sect233k1, sect233r1, sect239k1,
sect283k1, sect283r1, sect409k1, sect409r1, sect571k1, sect571r1,
X9.62 c2tnb191v1, X9.62 c2tnb191v2, X9.62 c2tnb191v3, X9.62 c2tnb239v1,
X9.62 c2tnb239v2, X9.62 c2tnb239v3, X9.62 c2tnb359v1, X9.62 c2tnb431r1,
X9.62 prime192v2, X9.62 prime192v3, X9.62 prime239v1, X9.62 prime239v2,
X9.62 prime239v3, brainpoolP256r1 brainpoolP320r1, brainpoolP384r1,
brainpoolP512r1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;The following curves are implemented in Java, use modern techniques, and
are not affected by this change: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;secp256r1&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;secp384r1&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;secp521r1&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;x25519&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;x448&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ed25519&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ed448&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;pki&quot;&gt;PKI&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Two root CA certificates have been removed&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The following root CAs have expired and are removed from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt;
keystore in the JDK:&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;
        &lt;p&gt;AddTrust Class 1 CA Root&lt;/p&gt;

        &lt;p&gt;This &lt;a href=&quot;https://crt.sh/?caid=1280&quot;&gt;root certificate&lt;/a&gt; is owned by Sectigo
and has the following distinguished name:&lt;/p&gt;

        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
CN=AddTrust Class 1 CA Root, OU=AddTrust TTP Network, O=AddTrust AB, C=SE
&lt;/code&gt;
&lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Keynectis Root CA&lt;/p&gt;

        &lt;p&gt;This &lt;a href=&quot;https://crt.sh/?caid=12294&quot;&gt;root certificate&lt;/a&gt; is owned by
DocuSign and has the following distinguished name:&lt;/p&gt;

        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
    CN=KEYNECTIS ROOT CA, OU=ROOT, O=KEYNECTIS, C=FR
&lt;/code&gt;
&lt;/div&gt;
      &lt;/li&gt;
    &lt;/ol&gt;

    &lt;p&gt;Two other roots owned by Sectigo have also expired, but will remain in
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore for now since code signing certificates have been
issued that chain back to those roots and may still be in use with
timestamped applications:&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;
        &lt;p&gt;AddTrust Qualified CA Root&lt;/p&gt;

        &lt;p&gt;This &lt;a href=&quot;https://crt.sh/?caid=1277&quot;&gt;root certificate&lt;/a&gt; has the following
distinguished name:&lt;/p&gt;

        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
CN=AddTrust Qualified CA Root, OU=AddTrust TTP Network, O=AddTrust AB, C=SE
&lt;/code&gt;
&lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;AddTrust External CA Root&lt;/p&gt;

        &lt;p&gt;This &lt;a href=&quot;https://crt.sh/?caid=1&quot;&gt;root certificate&lt;/a&gt; has the following
distinguished name:&lt;/p&gt;

        &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
CN=AddTrust External CA Root, OU=AddTrust External TTP Network, O=AddTrust AB, C=SE
&lt;/code&gt;
&lt;/div&gt;
      &lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;tls&quot;&gt;TLS&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Support for the Certificate Authorities extension&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The JDK TLS 1.3 implementation now supports the
&lt;a href=&quot;https://tools.ietf.org/html/rfc8446#section-4.2.4&quot;&gt;“certificate_authorities” extension&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;This extension is used by a client or server to indicate what CAs it
supports. This can help the receiver determine which certificate to
use for authentication.&lt;/p&gt;

    &lt;p&gt;This extension is always sent by the server if client authentication is
requested. By default, this extension is not sent by the client. To
enable the extension on the client, set the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.client.enableCAExtension&lt;/code&gt; system property to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt;. However, be
aware that there are some limits associated with the number of CAs that
can be specified in the extension, see the
&lt;a href=&quot;https://jdk.java.net/15/release-notes#JDK-8206925&quot;&gt;release note&lt;/a&gt; for more
information.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SSLSession.getPeerCertificateChain()&lt;/code&gt; method has been modified to
throw &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UnsupportedOperationException&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/15/docs/api/java.base/javax/net/ssl/SSLSession.html#getPeerCertificateChain()&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SSLSession.getPeerCertificateChain()&lt;/code&gt;&lt;/a&gt;
API is now a default method that throws &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UnsupportedOperationException&lt;/code&gt; by
default. This API is deprecated for removal and should no longer be used,
as it depends on the deprecated for removal
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/15/docs/api/java.base/javax/security/cert/X509Certificate.html&quot;&gt;javax.security.cert.X509Certificate&lt;/a&gt; type.
Throwing an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UnsupportedOperationException&lt;/code&gt; will help developers identify
and remove any remaining usages in their applications.&lt;/p&gt;

    &lt;p&gt;Applications should use
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/15/docs/api/java.base/javax/net/ssl/SSLSession.html#getPeerCertificates()&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SSLSession.getPeerCertificates()&lt;/code&gt;&lt;/a&gt;
instead.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New system properties for configuring TLS signature schemes&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Two new system properties have been introduced that allow you to configure
the names of the signature schemes used in the digital signatures of TLS
connections. These properties can be useful if you wish to have more
control over what signature schemes are enabled or if some signature
schemes are not supported by another TLS implementation and are causing
TLS handshake failures.&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;
        &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.client.SignatureSchemes&lt;/code&gt;: supported signature schemes used on
 the client side.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.server.SignatureSchemes&lt;/code&gt;: supported signature schemes used on
 the server side.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ol&gt;

    &lt;p&gt;Each system property should contain a comma-separated list of supported
signature scheme names defined in the
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/15/docs/specs/security/standard-names.html#signature-schemes&quot;&gt;Signature Schemes&lt;/a&gt;
section of the Java Security Standard Algorithm Names Specification. For
example:&lt;/p&gt;

    &lt;div style=&quot;background-color:rgba(0, 0, 0, 0.0470588); text-align:left; text-indent:25px; padding:10px 0;&quot;&gt;
&lt;code&gt;
$ java -Djdk.tls.server.SignatureSchemes=rsa_pkcs1_sha256,rsa_pss_pss_sha256 ...
&lt;/code&gt;
&lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;tools&quot;&gt;Tools&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jarsigner&lt;/code&gt; tool now has an option to check certificate revocation&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A new option named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-revCheck&lt;/code&gt; has been added to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jarsigner&lt;/code&gt;. If
specified, it will check the revocation status of each certificate in
the signer’s certificate chain, and the TSA’s chain if the JAR is
timestamped. Here is an example:&lt;/p&gt;

    &lt;hr /&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ jarsigner -verify -revCheck HelloWorld.jar
Contacting OCSP server at http://s2.symcb.com ...
Contacting OCSP server at http://sv.symcd.com ...
Contacting OCSP server at http://s.symcd.com ...
Contacting OCSP server at http://ts-ocsp.ws.symantec.com ...

jar verified.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jarsigner&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keytool&lt;/code&gt; now emit warnings if you are using weak
cryptographic algorithms &lt;em&gt;before&lt;/em&gt; they are disabled&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;These warnings notify you if your security artifacts are using algorithms
that are weakening, but not yet disabled by default. This alerts you to
potential security risks and also provides you with advance notice so that
you can upgrade to stronger algorithms before those weak algorithms are
disabled.&lt;/p&gt;

    &lt;p&gt;In this version, warnings are emitted when SHA-1 or RSA/DSA keys
greater than or equal to 1024 but less than 2048 bits are used. Here is
an example:&lt;/p&gt;

    &lt;hr /&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ jarsigner -keystore ks -digestalg SHA-1 HelloWorld.jar signer
Enter Passphrase for keystore:

jar signed.

Warning: 
The SHA-1 algorithm specified for the -digestalg option is considered a security risk. This algorithm will be disabled in a future update.
No -tsa or -tsacert is provided and this jar is not timestamped. Without a timestamp, users may not be able to validate this jar after the signer certificate&apos;s expiration date (2021-04-27).

The signer certificate will expire on 2021-04-27.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;

    &lt;p&gt;This change will also be backported to Oracle JDK 11, 8, and 7 in
the October 2020 CPU Release and is listed on the
&lt;a href=&quot;https://java.com/en/jre-jdk-cryptoroadmap.html&quot;&gt;Java Cryptographic Roadmap&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.sun.jarsigner&lt;/code&gt; APIs have been deprecated for removal&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;a href=&quot;https://docs.oracle.com/en/java/javase/15/docs/api/jdk.jartool/com/sun/jarsigner/ContentSigner.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ContentSigner&lt;/code&gt;&lt;/a&gt;
and &lt;a href=&quot;https://docs.oracle.com/en/java/javase/15/docs/api/jdk.jartool/com/sun/jarsigner/ContentSignerParameters.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ContentSignerParameters&lt;/code&gt;&lt;/a&gt;
APIs in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.sun.jarsigner&lt;/code&gt; package were previously deprecated in
JDK 9, but now they are marked for removal and will be removed in a
subsequent version of the JDK.&lt;/p&gt;

    &lt;p&gt;These APIs were seldom used and there is now an alternate
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/15/docs/api/jdk.jartool/jdk/security/jarsigner/JarSigner.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;JarSigner&lt;/code&gt;&lt;/a&gt;
API that is much more powerful and should be used instead.&lt;/p&gt;

    &lt;p&gt;In addition, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jarsigner -altsigner&lt;/code&gt; option which depends on these APIs
will also be removed in a subsequent JDK release and now emits a warning:&lt;/p&gt;

    &lt;hr /&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ jarsigner -altsigner path foo.jar
This option is deprecated and will be removed in a future release: -altsigner
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;hr /&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</content>
		</entry>
	
		<entry>
			<title>JDK 14 Security Enhancements</title>
			<link href="http://seanjmullan.org/blog/2020/03/19/jdk14"/>
			<updated>2020-03-19T00:00:00+00:00</updated>
			<id>http://seanjmullan.org/blog/2020/03/19/jdk14</id>
			<content type="html">&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/projects/jdk/14/&quot;&gt;JDK 14&lt;/a&gt; has been released! As with my
previous blogs for &lt;a href=&quot;https://seanjmullan.org/blog/2019/08/05/jdk13&quot;&gt;JDK 13&lt;/a&gt;
and &lt;a href=&quot;https://seanjmullan.org/blog/2019/03/19/jdk12&quot;&gt;JDK 12&lt;/a&gt;, I
have compiled a list of what I think are the most interesting and useful
security enhancements in this release.  I have also grouped
them into appropriate categories (crypto, TLS, etc) which should make
it easier to find out what has changed in each specific area.
The &lt;a href=&quot;https://www.oracle.com/technetwork/java/javase/14-relnote-issues-5809570.html&quot;&gt;JDK 14 Release Notes&lt;/a&gt;
also contain details on these and other enhancements.&lt;/p&gt;

&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of Contents&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#general&quot;&gt;General&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#crypto&quot;&gt;Crypto&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#tls&quot;&gt;TLS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#xml-signature&quot;&gt;XML Signature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#tools&quot;&gt;Tools&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;The deprecated &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.acl&lt;/code&gt; APIs have been removed&lt;/p&gt;

    &lt;p&gt;These APIs were initially deprecated in Java SE 9 and marked for
removal in Java SE 10. These APIs have been considered legacy for
a long time. Applications should use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.Policy&lt;/code&gt; and
related APIs instead.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;New Amazon Root CAs have been added&lt;/p&gt;

    &lt;p&gt;Four new Amazon Root Certificate Authorities (CAs) have been added to
the JDK &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore. The Distinguished Names of the CAs are:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;CN=Amazon Root CA 1, O=Amazon, C=US&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;CN=Amazon Root CA 2, O=Amazon, C=US&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;CN=Amazon Root CA 3, O=Amazon, C=US&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;CN=Amazon Root CA 4, O=Amazon, C=US&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;New LuxTrust Root CA has been added&lt;/p&gt;

    &lt;p&gt;One new LuxTrust Root Certificate Authority (CA) has been added to the
JDK &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacerts&lt;/code&gt; keystore. The Distinguished Name of the CA is:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;CN=LuxTrust Global Root 2, O=LuxTrust S.A., C=LU&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;crypto&quot;&gt;Crypto&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Legacy elliptic curves have been deprecated and will be removed in a future release&lt;/p&gt;

    &lt;p&gt;The implementations of 47 named elliptic curves in the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SunEC&lt;/code&gt; provider have been deprecated. These curves are not implemented
using modern techniques and many of them are no longer recommended by
standard groups. The implementations of these curves will be removed
or replaced in a future release of the JDK.&lt;/p&gt;

    &lt;p&gt;See the
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/14/security/oracle-providers.html#GUID-091BF58C-82AB-4C9C-850F-1660824D5254__LEGACY-CURVES-RETAINED-FOR-COMPATIBILITY&quot;&gt;Deprecated Legacy Curves&lt;/a&gt;
section of the JDK Providers Doc for the complete list of affected
curves.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Legacy elliptic curves have been disabled by default in TLS, CertPath,
and Signed JARs&lt;/p&gt;

    &lt;p&gt;Related to the previous issue, these curves have also been disabled
by default if used in TLS protocol exchanges, certification paths, or
signed JARs. A new security property named jdk.disabled.namedCurves
has been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security&lt;/code&gt; configuration file that
contains the names of the disabled curves. Certificates or protocol
exchanges using these curves will be blocked or negotiated to use
other acceptable curves.&lt;/p&gt;

    &lt;p&gt;Below is the definition of the property in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security&lt;/code&gt; file:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#
# This property contains a list of disabled EC Named Curves that can be included
# in the jdk.[tls|certpath|jar].disabledAlgorithms properties.  To include this
# list in any of the disabledAlgorithms properties, add the property name as
# an entry.
jdk.disabled.namedCurves = secp112r1, secp112r2, secp128r1, secp128r2, \
    secp160k1, secp160r1, secp160r2, secp192k1, secp192r1, secp224k1, \
    secp224r1, secp256k1, sect113r1, sect113r2, sect131r1, sect131r2, \
    sect163k1, sect163r1, sect163r2, sect193r1, sect193r2, sect233k1, \
    sect233r1, sect239k1, sect283k1, sect283r1, sect409k1, sect409r1, \
    sect571k1, sect571r1, X9.62 c2tnb191v1, X9.62 c2tnb191v2, \
    X9.62 c2tnb191v3, X9.62 c2tnb239v1, X9.62 c2tnb239v2, X9.62 c2tnb239v3, \
    X9.62 c2tnb359v1, X9.62 c2tnb431r1, X9.62 prime192v2, X9.62 prime192v3, \
    X9.62 prime239v1, X9.62 prime239v2, X9.62 prime239v3, brainpoolP256r1, \
    brainpoolP320r1, brainpoolP384r1, brainpoolP512r1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OracleUCrypto&lt;/code&gt; provider has been deprecated for removal&lt;/p&gt;

    &lt;p&gt;The &lt;a href=&quot;https://docs.oracle.com/en/java/javase/14/security/oracle-providers.html#GUID-D08B5350-6653-4FC6-B350-2B009A9E7FD6&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OracleUCrypto&lt;/code&gt; provider&lt;/a&gt;
is supported only on the Solaris platform and provides access to the
algorithms in the native Solaris Ucrypto cryptographic library. It
has been deprecated as part of
&lt;a href=&quot;https://openjdk.java.net/jeps/362&quot;&gt;JEP 362&lt;/a&gt; (Deprecate the Solaris
SPARC Ports). The provider will be removed from a future JDK release
when the Solaris ports are officially removed.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;tls&quot;&gt;TLS&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Standard Names for Signature Schemes and Named Groups defined&lt;/p&gt;

    &lt;p&gt;Standard names have been defined for TLS signature schemes and named
groups in the Standard Algorithm Names Specification. This improves
compatibility by providing standard names for signature schemes and
elliptic curves which can be specified by applications in various
APIs and properties.&lt;/p&gt;

    &lt;p&gt;Below is a snapshot of the names from the
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/14/docs/specs/security/standard-names.html#signature-schemes&quot;&gt;Signature Schemes&lt;/a&gt; and
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/14/docs/specs/security/standard-names.html#named-groups&quot;&gt;Named Groups&lt;/a&gt;
sections of the Java Security Standard Algorithm Names specification.&lt;/p&gt;

    &lt;p&gt;&lt;img src=&quot;/images/NamedSchemesAndGroups.jpg&quot; alt=&quot;Named Schemes and Groups&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SSLv2Hello&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SSLv3&lt;/code&gt; have been removed from the default enabled TLS protocols&lt;/p&gt;

    &lt;p&gt;As a further strengthening measure, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SSLv2Hello&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SSLv3&lt;/code&gt; have been
removed from the default list of enabled TLS protocols. &lt;em&gt;Note&lt;/em&gt; that
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SSLv3&lt;/code&gt; had already been restricted by default as it is included
in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.disabledAlgorithms&lt;/code&gt; security property in the
system-wide &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security&lt;/code&gt; configuration file. With this change,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SSLv3&lt;/code&gt; is not enabled by default even if it is removed from the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.disabledAlgorithms&lt;/code&gt; security property.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;xml-signature&quot;&gt;XML Signature&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;XML Signature implementation updated to Apache Santuario v2.1.4&lt;/p&gt;

    &lt;p&gt;The XML Signature implementation in the JDK has been updated to
version 2.1.4 of &lt;a href=&quot;https://santuario.apache.org/javareleasenotes.html&quot;&gt;Apache Santuario XML Security for Java&lt;/a&gt;,
which it is based on.&lt;/p&gt;

    &lt;p&gt;With this update, one new system property has been added:
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.sun.org.apache.xml.internal.security.parser.pool-size&lt;/code&gt;. This can
be set to the pool size of the internal &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DocumentBuilder&lt;/code&gt; cache used
to process XML Signatures. The default value is 20. Setting this
property may improve performance depending on the application’s use
case.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;tools&quot;&gt;Tools&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;The default algorithms for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keytool -keyalg&lt;/code&gt; have been removed&lt;/p&gt;

    &lt;p&gt;Key algorithm defaults are no longer supported and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keytool&lt;/code&gt; now
exits with an error if a specific algorithm is not specified using
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-keyalg&lt;/code&gt; option when generating keys with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-genkeypair&lt;/code&gt;
or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-genseckey&lt;/code&gt; commands.&lt;/p&gt;

    &lt;p&gt;Here is an example output of running the command:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ keytool -genkeypair 
Enter keystore password:  
keytool error: java.lang.Exception: The -keyalg option must be specified.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</content>
		</entry>
	
		<entry>
			<title>JDK 13 Security Enhancements</title>
			<link href="http://seanjmullan.org/blog/2019/08/05/jdk13"/>
			<updated>2019-08-05T00:00:00+00:00</updated>
			<id>http://seanjmullan.org/blog/2019/08/05/jdk13</id>
			<content type="html">&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/projects/jdk/13/&quot;&gt;JDK 13&lt;/a&gt; has been released! As with my
&lt;a href=&quot;https://seanjmullan.org/blog/2019/03/19/jdk12&quot;&gt;JDK 12 blog&lt;/a&gt;, I
have gathered up a list of the most interesting and useful security
enhancements in this release.  And as before, I have grouped them into
appropriate categories (crypto, TLS, etc) which should make it easier
to find out what has changed in each specific area.
The &lt;a href=&quot;https://www.oracle.com/technetwork/java/javase/13-relnote-issues-5460548.html&quot;&gt;JDK 13 Release Notes&lt;/a&gt;
also contains details on these and other enhancements.&lt;/p&gt;

&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of Contents&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#crypto&quot;&gt;Crypto&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#tls&quot;&gt;TLS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#gss-api-and-kerberos&quot;&gt;GSS-API and Kerberos&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#sasl&quot;&gt;SASL&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#xml-signature&quot;&gt;XML Signature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#tools&quot;&gt;Tools&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;crypto&quot;&gt;Crypto&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Support for Microsoft Cryptography Next Generation (CNG) API&lt;/p&gt;

    &lt;p&gt;On Windows, the
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/12/security/oracle-providers.html#GUID-4F1737D6-1569-4340-B140-678C70E63CD5&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SunMSCAPI&lt;/code&gt; JCE provider&lt;/a&gt;
has been enhanced to support
&lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_CryptoAPI#Cryptography_API:_Next_Generation&quot;&gt;CNG&lt;/a&gt;. 
The provider can now load RSA and EC keys in CNG format from Windows
keystores.  The provider also now supports elliptic curve &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Signature&lt;/code&gt;
algorithms (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SHA1withECDSA&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SHA256withECDSA&lt;/code&gt;, etc.).&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8026953&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8026953&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;PKCS#11 version 2.40&lt;/p&gt;

    &lt;p&gt;The &lt;a href=&quot;https://docs.oracle.com/en/java/javase/12/security/oracle-providers.html#GUID-C4706FFE-D08F-4E29-B0BE-CCE8C93DD940&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SunPKCS11&lt;/code&gt; provider&lt;/a&gt;
has been updated to
&lt;a href=&quot;https://www.oasis-open.org/standards#pkcs11-base-v2.40&quot;&gt;PKCS#11 v2.40&lt;/a&gt;.
This update adds support for additional PKCS#11 mechanisms, attributes,
key types and adds support for several new algorithms:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Java Algorithm                     PKCS#11 Mechanism       

MessageDigest.SHA-512/224          CKM_SHA512_224                     
MessageDigest.SHA-512/256          CKM_SHA512_256
MAC.HmacSHA512/224                 CKM_SHA512_224_HMAC
MAC.HmacSHA512/256                 CKM_SHA512_256_HMAC
Signature.RSASSA-PSS               CKM_RSA_PKCS_PSS
Signature.SHA1withRSASSA-PSS       CKM_SHA1_RSA_PKCS_PSS
Signature.SHA224withRSASSA-PSS     CKM_SHA224_RSA_PKCS_PSS
Signature.SHA256withRSASSA-PSS     CKM_SHA256_RSA_PKCS_PSS
Signature.SHA384withRSASSA-PSS     CKM_SHA384_RSA_PKCS_PSS
Signature.SHA512withRSASSA-PSS     CKM_SHA512_RSA_PKCS_PSS
Signature.SHA224withDSA            CKM_DSA_SHA224
Signature.SHA256withDSA            CKM_DSA_SHA256
Signature.SHA384withDSA            CKM_DSA_SHA384
Signature.SHA512withDSA            CKM_DSA_SHA512
Cipher.AES/GCM/NoPadding           CKM_AES_GCM
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8080462&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8080462&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;tls&quot;&gt;TLS&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.security.cert&lt;/code&gt; APIs marked for removal&lt;/p&gt;

    &lt;p&gt;The deprecated
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/12/docs/api/java.base/javax/security/cert/package-summary.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.security.cert&lt;/code&gt; APIs&lt;/a&gt;
have been marked for removal and are subject to removal in a future
release. These APIs exist only to support applications written against
early versions of the Java Secure Socket Extension (JSSE), prior to its
inclusion in JDK 1.4. Applications should use the
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/security/cert/package-summary.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.cert&lt;/code&gt; package&lt;/a&gt;
instead.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8160247&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8160247&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;X25519 and X448 Diffie-Hellman elliptic curve support&lt;/p&gt;

    &lt;p&gt;The &lt;a href=&quot;https://docs.oracle.com/en/java/javase/12/security/oracle-providers.html#GUID-7093246A-31A3-4304-AC5F-5FB6400405E2&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SunJSSE&lt;/code&gt; provider&lt;/a&gt;
has been enhanced to support the x25519 and x448 elliptic curve named
groups with x25519 being the highest preferred group. These curves are
supported for TLS versions 1.0, 1.1, 1.2, and 1.3. The default list of
named groups is now:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;x25519, secp256r1, secp384r1, secp521r1, x448, 
sect283k1, sect283r1, sect409k1, sect409r1, sect571k1, sect571r1, 
secp256k1, ffdhe2048, ffdhe3072, ffdhe4096, ffdhe6144, ffdhe8192
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;This order can be overridden using the 
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/12/security/java-secure-socket-extension-jsse-reference-guide.html#GUID-A41282C3-19A3-400A-A40F-86F4DA22ABA9&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.namedGroups&lt;/code&gt; system property&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8171279&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8171279&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Stateless Server&lt;/p&gt;

    &lt;p&gt;The &lt;a href=&quot;https://docs.oracle.com/en/java/javase/12/security/oracle-providers.html#GUID-7093246A-31A3-4304-AC5F-5FB6400405E2&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SunJSSE&lt;/code&gt; provider&lt;/a&gt;
now supports stateless sessions, which can significantly improve the
performance and scalability of a TLS server under large workloads.&lt;/p&gt;

    &lt;p&gt;For this release, the feature is not yet enabled by default. On the client
side, it can be enabled by setting the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.client.enableSessionTicketExtension&lt;/code&gt; system property to “true”
and on the server side, by setting the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.server.enableSessionTicketExtension&lt;/code&gt; system property to “true”.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8211018&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8211018&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Enabled cipher suites order changed to improve security&lt;/p&gt;

    &lt;p&gt;The order of the default list of enabled TLS cipher suites has been
modified with several changes to improve security. See the
&lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8219545&quot;&gt;CSR&lt;/a&gt; for full details.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8163326&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8163326&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Server-side cipher suite order now preferred&lt;/p&gt;

    &lt;p&gt;The TLS cipher suite selection algorithm has been modified to use the
server’s cipher suite order, rather than the client’s.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8168261&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8168261&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;gss-api-and-kerberos&quot;&gt;GSS-API and Kerberos&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Kerberos cross-realm referrals&lt;/p&gt;

    &lt;p&gt;Client support for principal name canonicalization and cross-realm
referrals, as specified in
&lt;a href=&quot;https://tools.ietf.org/html/rfc6806.html&quot;&gt;RFC 6806&lt;/a&gt; has been added to the
Kerberos implementation.&lt;/p&gt;

    &lt;p&gt;This feature can greatly simplify usability and configuration in a Kerberos
environment of multiple realms.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8215032&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8215032&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Native GSS-API library on Windows&lt;/p&gt;

    &lt;p&gt;A Windows implementation of the GSS-API library has been added to the
JDK. This provides better interoperability and integration with Windows.
For example, it can directly read Windows login user credentials.&lt;/p&gt;

    &lt;p&gt;This implementation is supported on the client-side only and it is
not enabled by default. To enable it, set the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sun.security.jgss.native&lt;/code&gt;
system property to “true”.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-6722928&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-6722928&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;sasl&quot;&gt;SASL&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;SASL mechanisms can now be restricted&lt;/p&gt;

    &lt;p&gt;A new security property named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.sasl.disabledMechanisms&lt;/code&gt; has been
introduced to allow you to disable SASL mechanisms that you no longer want
to be used. There are no mechanisms disabled by default. Mechanisms can
be added to the property in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security&lt;/code&gt; configuration file. Here
is the definition of the property:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# Disabled mechanisms for the Simple Authentication and Security Layer (SASL)
#
# Disabled mechanisms will not be negotiated by both SASL clients and servers.
# These mechanisms will be ignored if they are specified in the mechanisms argument
# of `Sasl.createClient` or the mechanism argument of `Sasl.createServer`.
#
# The value of this property is a comma-separated list of SASL mechanisms.
# The mechanisms are case-sensitive. Whitespaces around the commas are ignored.
#
# Note: This property is currently used by the JDK Reference implementation.
# It is not guaranteed to be examined and used by other implementations.
#
# Example:
#   jdk.sasl.disabledMechanisms=PLAIN, CRAM-MD5, DIGEST-MD5
jdk.sasl.disabledMechanisms=
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8200400&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8200400&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;xml-signature&quot;&gt;XML Signature&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;String constants for Canonical XML 1.1&lt;/p&gt;

    &lt;p&gt;New public constants named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;INCLUSIVE_11&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;INCLUSIVE_11_WITH_COMMENTS&lt;/code&gt;
have been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.xml.crypto.dsig.CanonicalizationMethod&lt;/code&gt; API.
These represent
&lt;a href=&quot;https://www.w3.org/TR/xmldsig-core1/#sec-Canonical11&quot;&gt;the URIs for the Canonical XML 1.1 and Canonical XML 1.1 with Comments algorithms&lt;/a&gt;
for XML Signature. Now you can use the constants instead of the URIs in
your application, ex:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;TransformService.getInstance(CanonicalizationMethod.INCLUSIVE_11);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8224767&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8224767&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.xml.crypto.dsig.keyinfo.KeyValue.EC_TYPE&lt;/code&gt; constant&lt;/p&gt;

    &lt;p&gt;A new public constant (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;EC_TYPE&lt;/code&gt;) representing
&lt;a href=&quot;https://www.w3.org/TR/xmldsig-core1/#sec-ECKeyValue&quot;&gt;the URI of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ECKeyValue&lt;/code&gt; element&lt;/a&gt;
has been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.xml.crypto.dsig.keyinfo.KeyValue&lt;/code&gt; API.
This allows you to identify this type in your applications using the
constant instead of the URI.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8223053&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8223053&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;tools&quot;&gt;Tools&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;keytool command for displaying TLS configuration information&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keytool&lt;/code&gt; utility has a new command (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-showinfo&lt;/code&gt; is the command and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-tls&lt;/code&gt; is the option) that displays information about the TLS configuration
of the system that the command is run on. This information includes a list
of the enabled protocols and cipher suites, ordered by priority.&lt;/p&gt;

    &lt;p&gt;Here is an example output of running the command:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ keytool -showinfo -tls
Enabled Protocols
-----------------
TLSv1.3
TLSv1.2
TLSv1.1
TLSv1

Enabled Cipher Suites
---------------------
TLS_AES_256_GCM_SHA384
TLS_AES_128_GCM_SHA256
TLS_CHACHA20_POLY1305_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256
TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_DHE_RSA_WITH_AES_256_CBC_SHA
TLS_DHE_DSS_WITH_AES_256_CBC_SHA
TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_DHE_DSS_WITH_AES_128_CBC_SHA
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_EMPTY_RENEGOTIATION_INFO_SCSV
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8219861&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8219861&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;
</content>
		</entry>
	
		<entry>
			<title>JDK 12 Security Enhancements</title>
			<link href="http://seanjmullan.org/blog/2019/03/19/jdk12"/>
			<updated>2019-03-19T00:00:00+00:00</updated>
			<id>http://seanjmullan.org/blog/2019/03/19/jdk12</id>
			<content type="html">&lt;p&gt;&lt;a href=&quot;https://openjdk.java.net/projects/jdk/12/&quot;&gt;JDK 12&lt;/a&gt; has been released! Although there are no
major security features in this release, there are quite a few smaller
enhancements and useful additions. Below, I have enumerated the enhancements
which I think are most interesting. I have also grouped them into appropriate
categories (TLS, crypto, etc) which should make it easier to find out what has
changed in each specific area.&lt;/p&gt;

&lt;h4 id=&quot;crypto&quot;&gt;Crypto&lt;/h4&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;New HmacPBE Mac algorithm support&lt;/p&gt;

    &lt;p&gt;New standard HmacPBE algorithms have been added to the Standard Algorithm
Names specification and are implemented in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SunJCE&lt;/code&gt; provider:
HmacPBESHA1, HmacPBESHA224, HmacPBESHA256, HmacPBESHA384, HmacPBESHA512,
HmacPBESHA512/224, and HmacPBESHA512/256. These are used by the PKCS12
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyStore&lt;/code&gt; JDK implementation, but now can also be used independently in
your applications as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.crypto.Mac&lt;/code&gt; algorithms, ex:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Mac mac = Mac.getInstance(&quot;HmacPBESHA256&quot;);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;More information: &lt;a href=&quot;https://docs.oracle.com/en/java/javase/12/docs/specs/security/standard-names.html#mac-algorithms&quot;&gt;https://docs.oracle.com/en/java/javase/12/docs/specs/security/standard-names.html#mac-algorithms&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8215450&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8215450&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;More informative Cipher.toString()&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;toString&lt;/code&gt; method of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.crypto.Cipher&lt;/code&gt; has been overridden to print
more useful information such as the algorithm, mode, and provider used by
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cipher&lt;/code&gt; object, ex:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Cipher.AES/GCM/NoPadding, mode: encryption, algorithm from: SunJCE
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8210838&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8210838&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;PKCS12 KeyStore configuration properties&lt;/p&gt;

    &lt;p&gt;New system and security properties have been added for customizing the
security algorithms used in the PKCS12 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyStore&lt;/code&gt; implementation. This
includes algorithms and parameters for key protection, certificate
protection, and MacData. For example, there is a property named
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keystore.pkcs12.certProtectionAlgorithm&lt;/code&gt; that specifies the algorithm that
is used to encrypt a certificate. More details, including the default values
for these properties are listed in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security&lt;/code&gt; configuration file.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8076190&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8076190&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h4 id=&quot;tls&quot;&gt;TLS&lt;/h4&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;ChaCha20 and Poly1305 TLS Cipher Suites&lt;/p&gt;

    &lt;p&gt;Support for the ChaCha20 and Poly1305 TLS cipher suites has been added to
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SunJSSE&lt;/code&gt; provider. The TLS_CHACHA20_POLY1305_SHA256 cipher is
for TLS 1.3 and the TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, and 
TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 ciphers are for TLS 1.2.
Each of these ciphers is enabled by default.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8140466&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8140466&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;New methods to access the SSLSession&lt;/p&gt;

    &lt;p&gt;A &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;getSSLSession&lt;/code&gt; method has been added to the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javax.net.ssl.HttpsURLConnection&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.net.SecureCacheResponse&lt;/code&gt;
APIs. This method allows applications to obtain full details of the
underlying TLS session, such as the negotiated TLS version, which can
be very useful. This information was not previously available from these
APIs.&lt;/p&gt;

    &lt;p&gt;More information:&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/12/docs/api/java.base/javax/net/ssl/HttpsURLConnection.html#getSSLSession()&quot;&gt;https://docs.oracle.com/en/java/javase/12/docs/api/java.base/javax/net/ssl/HttpsURLConnection.html#getSSLSession()&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/net/SecureCacheResponse.html#getSSLSession()&quot;&gt;https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/net/SecureCacheResponse.html#getSSLSession()&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8212261&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8212261&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Anon and NULL cipher suites disabled by default&lt;/p&gt;

    &lt;p&gt;The TLS anon (anonymous) and NULL cipher suites have been added to the 
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.disabledAlgorithms&lt;/code&gt; security property and are now disabled by
default. These ciphers have known security risks and should only be used
in special cases. Note that these ciphers were not previously enabled by
default (applications still had to explicitly enable them to use them,
for example by calling &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SSLSocket.setEnabledCipherSuites()&lt;/code&gt;). With this
change, these ciphers are no longer available without additional
configuration by a user or administrator via the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.disabledAlgorithms&lt;/code&gt; security property.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8211883&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8211883&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;DES cipher suites disabled by default&lt;/p&gt;

    &lt;p&gt;All TLS cipher suites that use DES have been added to the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.disabledAlgorithms&lt;/code&gt; security property and are now disabled by
default. DES has known security weaknesses and is no longer recommended.
Note that these ciphers were not previously enabled by default. With this
change, these ciphers are no longer available without additional
configuration by a user or administrator via the 
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jdk.tls.disabledAlgorithms&lt;/code&gt; security property.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8208350&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8208350&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Symantec TLS Server Certificates to be distrusted&lt;/p&gt;

    &lt;p&gt;The JDK will stop trusting TLS Server certificates issued by Symantec. The
list of affected certificates includes certificates branded as GeoTrust,
Thawte, and VeriSign, which were managed by Symantec. TLS Server
certificates issued on or before April 16, 2019 will continue to be
trusted until they expire. Certificates issued after that date will be
rejected. See the
&lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8215012&quot;&gt;release note&lt;/a&gt;
for more information and a list of Certificate Authorities that are
affected.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8207258&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8207258&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Removed TLS v1 and v1.1 from required algorithms&lt;/p&gt;

    &lt;p&gt;TLS 1.0 and 1.1 are no longer required to be implemented by Java SE
implementations.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8214140&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8214140&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;TLS 1.2 support for SunPKCS11 provider&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SunPKCS11&lt;/code&gt; provider now supports TLS 1.2. TLS 1.2 algorithms for
key and MAC derivation have been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SunPKCS11&lt;/code&gt; provider.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8029661&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8029661&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h4 id=&quot;tools&quot;&gt;Tools&lt;/h4&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;New keytool -groupname option&lt;/p&gt;

    &lt;p&gt;A new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-groupname&lt;/code&gt; option has been added to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keytool -genkeypair&lt;/code&gt;
command so that a user can specify a named group when generating a key
pair. For example:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;keytool -genkeypair -keyalg EC -groupname secp384r1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;will generate an EC key pair by using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;secp384r1&lt;/code&gt; curve.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8213400&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8213400&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Deprecated the default algorithms for keytool -keyalg&lt;/p&gt;

    &lt;p&gt;A warning is now emitted if the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-keyalg&lt;/code&gt; option is not specified with the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-genkeypair&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-genseckey&lt;/code&gt; keytool commands. The current default for
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-genkeypair&lt;/code&gt; is DSA and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-genseckey&lt;/code&gt; is DES. In a future release, the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-keyalg&lt;/code&gt; option will be required.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8212003&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8212003&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;keytool -printcert now recognizes the -providername option&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-providername&lt;/code&gt; option can be useful for inspecting the contents of a
certificate that is using an algorithm that is not supported by the
builtin JDK security providers.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8201290&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8201290&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h4 id=&quot;securitymanager&quot;&gt;SecurityManager&lt;/h4&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Pure-Java implementation of AccessController.doPrivileged&lt;/p&gt;

    &lt;p&gt;The implementation of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AccessController.doPrivileged&lt;/code&gt; methods are now
all Java code (they no longer call into the JVM). Micro-benchmarks of
these methods have shown up to a 50x performance improvement.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8212605&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8212605&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;New runtime mode for applications that don’t use a SecurityManager&lt;/p&gt;

    &lt;p&gt;New “disallow” and “allow” token options have been added to the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.manager&lt;/code&gt; system property. The “disallow” option can
improve run-time performance for applications that never set a
SecurityManager. If the Java Virtual Machine starts with the system
property &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.security.manager&lt;/code&gt; set to “disallow”, then the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;System.setSecurityManager&lt;/code&gt; method cannot be used to set a security manager
and will throw an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UnsupportedOperationException&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;For further details on the behavior of these options, see the
&lt;a href=&quot;https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/lang/SecurityManager.html&quot;&gt;class description of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java.lang.SecurityManager&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8191053&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8191053&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h4 id=&quot;miscellaneous&quot;&gt;Miscellaneous&lt;/h4&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;New Java Flight Recorder (JFR) security events&lt;/p&gt;

    &lt;p&gt;New security-related events have been added to the Java Flight Recorder
tool. These events are disabled by default and can be enabled via JFR
configuration files or via standard JFR options. See the
&lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8220239&quot;&gt;release note&lt;/a&gt;
for more information on the new events.&lt;/p&gt;

    &lt;p&gt;Issue: &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-8148188&quot;&gt;https://bugs.openjdk.java.net/browse/JDK-8148188&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

</content>
		</entry>
	

</feed>
