LoginSignup
0
1

More than 3 years have passed since last update.

RHEL/CentOSでの暗号化ポリシーで、Javaのセキュリティ設定が変わるという話

Last updated at Posted at 2021-01-18

What's?

Red Hat Enterprise Linuxでは、システムの暗号化ポリシーを設定できます。

システム全体の暗号化ポリシーの使用

この内容で、Javaのセキュリティ設定も変わりますよ、という話です。

環境

CentOS 8で確認してみます。

$ cat /etc/redhat-release 
CentOS Linux release 8.3.2011

使用するJavaは、OpenJDK 8とします。

$ java -version
openjdk version "1.8.0_275"
OpenJDK Runtime Environment (build 1.8.0_275-b01)
OpenJDK 64-Bit Server VM (build 25.275-b01, mixed mode)

確認

たとえば、jdk.tls.disabledAlgorithmsという暗号化において無効化するアルゴリズムを指定するプロパティがあります。

Java Secure Socket Extension (JSSE)リファレンス・ガイド

Java暗号化アーキテクチャOracleプロバイダのドキュメント(JDK 8用)

こちらを出力するプログラムを書いてみます。

App.java
import java.security.Security;

public class App {
    public static void main(String... args) {
        System.out.printf("jdk.tls.disabledAlgorithms = %s%n", Security.getProperty("jdk.tls.disabledAlgorithms"));
    }
}

ここで、java.securityの設定を見てみます。

$ grep ^jdk.tls.disabledAlgorithms -A 2 /usr/lib/jvm/java-1.8.0-openjdk/jre/lib/security/java.security
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, \
    EC keySize < 224, 3DES_EDE_CBC, anon, NULL

作成したプログラムを実行してみます。

$ javac App.java

…まったく異なる値が得られました。

$ java App
jdk.tls.disabledAlgorithms = DH keySize < 2048, SSLv2, SSLv3, TLSv1, TLSv1.1, DHE_DSS, RSA_EXPORT, DHE_DSS_EXPORT, DHE_RSA_EXPORT, DH_DSS_EXPORT, DH_RSA_EXPORT, DH_anon, ECDH_anon, DH_RSA, DH_DSS, ECDH, 3DES_EDE_CBC, DES_CBC, RC4_40, RC4_128, DES40_CBC, RC2, HmacMD5

ここで、現在の暗号化ポリシーの設定を見てみます。DEFAULTとなっています。

$ update-crypto-policies --show
DEFAULT

暗号化ポリシーには、DEFAULTLEGACYFUTUREFIPSの4つのプロファイルがあります。

システム全体の暗号化ポリシーの使用

ここで、/usr/share/crypto-policiesディレクトリを確認してみます。

各プロファイルごとの設定が配置されているのですが、この中でDEFAULTプロファイルのJava用の設定を見てみます。

$ grep ^jdk.tls.disabledAlgorithms /usr/share/crypto-policies/DEFAULT/java.txt 
jdk.tls.disabledAlgorithms=DH keySize < 2048, SSLv2, SSLv3, TLSv1, TLSv1.1, DHE_DSS, RSA_EXPORT, DHE_DSS_EXPORT, DHE_RSA_EXPORT, DH_DSS_EXPORT, DH_RSA_EXPORT, DH_anon, ECDH_anon, DH_RSA, DH_DSS, ECDH, 3DES_EDE_CBC, DES_CBC, RC4_40, RC4_128, DES40_CBC, RC2, HmacMD5

これ、先ほどのプログラムの出力結果と一致します。

ここで、暗号化ポリシーのプロファイルをLEGACYに変えてみます。

$ sudo update-crypto-policies --set LEGACY
Setting system policy to LEGACY
Note: System-wide crypto policies are applied on application start-up.
It is recommended to restart the system for the change of policies
to fully take place.

変更したらOSを再起動。

$ sudo reboot

暗号化ポリシーのプロファイルが変わったことが確認できました。

$ update-crypto-policies --show
LEGACY

先ほどのプログラムを再度実行してみます。

$ java App 
jdk.tls.disabledAlgorithms = DH keySize < 1023, SSLv2, SSLv3, RSA_EXPORT, DHE_DSS_EXPORT, DHE_RSA_EXPORT, DH_DSS_EXPORT, DH_RSA_EXPORT, DH_anon, ECDH_anon, DH_RSA, DH_DSS, ECDH, DES_CBC, RC4_40, DES40_CBC, RC2, HmacMD5

$JAVA_HOME/jre/lib/security/java.securityファイルは変更していないのに、設定が変わりました。

ここで、LEGACYプロファイルのJavaの設定を見てみます。java.txtというファイルです。

$ grep ^jdk.tls.disabledAlgorithms /usr/share/crypto-policies/LEGACY/java.txt 
jdk.tls.disabledAlgorithms=DH keySize < 1023, SSLv2, SSLv3, RSA_EXPORT, DHE_DSS_EXPORT, DHE_RSA_EXPORT, DH_DSS_EXPORT, DH_RSA_EXPORT, DH_anon, ECDH_anon, DH_RSA, DH_DSS, ECDH, DES_CBC, RC4_40, DES40_CBC, RC2, HmacMD5

この値と同じになっていますね。

どうやって反映しているのかはわかりませんでしたが、これは知らなかったです…。

プロファイルを選択したり、カスタマイズもできるようですが、LEGACYは選ぶべきではないでしょうね。RHEL 5互換に近づくということらしいですが。

最後に、各プロファイルのJavaの設定を見てみましょう。

DEFAULT

/usr/share/crypto-policies/DEFAULT/java.txt
jdk.tls.ephemeralDHKeySize=2048
jdk.certpath.disabledAlgorithms=MD2, MD5, DSA, RSA keySize < 2048
jdk.tls.disabledAlgorithms=DH keySize < 2048, SSLv2, SSLv3, TLSv1, TLSv1.1, DHE_DSS, RSA_EXPORT, DHE_DSS_EXPORT, DHE_RSA_EXPORT, DH_DSS_EXPORT, DH_RSA_EXPORT, DH_anon, ECDH_anon, DH_RSA, DH_DSS, ECDH, 3DES_EDE_CBC, DES_CBC, RC4_40, RC4_128, DES40_CBC, RC2, HmacMD5
jdk.tls.legacyAlgorithms=

FUTURE

/usr/share/crypto-policies/FUTURE/java.txt
jdk.tls.ephemeralDHKeySize=3072
jdk.certpath.disabledAlgorithms=MD2, SHA224, SHA1, MD5, DSA, RSA keySize < 3072
jdk.tls.disabledAlgorithms=DH keySize < 3072, SSLv2, SSLv3, TLSv1, TLSv1.1, TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_128_GCM_SHA256, DHE_DSS, RSA_EXPORT, DHE_DSS_EXPORT, DHE_RSA_EXPORT, DH_DSS_EXPORT, DH_RSA_EXPORT, DH_anon, ECDH_anon, DH_RSA, DH_DSS, ECDH, AES_128_GCM, AES_128_CCM, AES_256_CBC, AES_128_CBC, 3DES_EDE_CBC, DES_CBC, RC4_40, RC4_128, DES40_CBC, RC2, HmacSHA1, HmacMD5
jdk.tls.legacyAlgorithms=

FIPS

/usr/share/crypto-policies/FIPS/java.txt
jdk.tls.ephemeralDHKeySize=2048
jdk.certpath.disabledAlgorithms=MD2, SHA1, MD5, DSA, RSA keySize < 2048
jdk.tls.disabledAlgorithms=DH keySize < 2048, SSLv2, SSLv3, TLSv1, TLSv1.1, TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_128_GCM_SHA256, DHE_DSS, RSA_EXPORT, DHE_DSS_EXPORT, DHE_RSA_EXPORT, DH_DSS_EXPORT, DH_RSA_EXPORT, DH_anon, ECDH_anon, DH_RSA, DH_DSS, ECDH, 3DES_EDE_CBC, DES_CBC, RC4_40, RC4_128, DES40_CBC, RC2, HmacMD5
jdk.tls.legacyAlgorithms=

LEGACY

/usr/share/crypto-policies/LEGACY/java.txt
jdk.tls.ephemeralDHKeySize=1023
jdk.certpath.disabledAlgorithms=MD2, MD5, RSA keySize < 1023
jdk.tls.disabledAlgorithms=DH keySize < 1023, SSLv2, SSLv3, RSA_EXPORT, DHE_DSS_EXPORT, DHE_RSA_EXPORT, DH_DSS_EXPORT, DH_RSA_EXPORT, DH_anon, ECDH_anon, DH_RSA, DH_DSS, ECDH, DES_CBC, RC4_40, DES40_CBC, RC2, HmacMD5
jdk.tls.legacyAlgorithms=3DES_EDE_CBC, RC4_128

項目数からして、$JAVA_HOME/jre/lib/security/java.securityとの差分な気がするので、このファイルとOS側の暗号化ポリシーの両方を見た方が良さそうですね。

参考

システム全体の暗号強度設定を統合するcrypto-policiesのカスタマイズ

RHEL8のシステム全体の暗号化ポリシー

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1