RHEL9 でハッシュ関数 sha1 がデフォルトで利用できない話~DNSSEC と絡めて~

こんにちは。サイオステクノロジーの橋本です。

前々回 RHEL9 OS をインストールしたのでいろいろ試してみよう第三弾です!

前々回:RHEL 9 をインストールしてみよう
https://tech-lab.sios.jp/archives/30971

前回:RHEL9 での SELINUX の無効化方法について
https://tech-lab.sios.jp/archives/31392

RHEL 9 からデフォルトの暗号化ポリシーでハッシュ関数 sha1 が利用できなくなりました。

SHA-1 deprecation in Red Hat Enterprise Linux 9
https://access.redhat.com/articles/6846411

sha1 が利用するシーンはあまりないですが、DNSSEC に関しては rfc8624 において sha1 での検証を要件としています。
※ SSL 証明書で署名アルゴリズムで sha1 が利用されなくなったのは 2015~2016 年あたりの出来事です。

RHEL9 でsha1 の扱いがどうなったかと共に DNSSEC で sha1 を扱うとどうなるか見てみましょう。

ドキュメント上での違い

RHEL 8 と RHEL 9 では「SHA-1 デジタル署名および証明書に」の項目に差が
あることが確認できます。

第4章 システム全体の暗号化ポリシーの使用
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/security_hardening/using-the-system-wide-cryptographic-policies_security-hardening

第3章 システム全体の暗号化ポリシーの使用
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/9/html/security_hardening/using-the-system-wide-cryptographic-policies_security-hardening

ちなみに RHEL9 でも sha1sum コマンドの利用は可能です。
sha1sum コマンドは coreutils という cat , ls といった基本的なコマンド群の一つとして
提供されているためです。

RHEL 8 での DNSSEC 検証

まずは RHEL 8 で DNSSEC がどうだったか見ていきましょう
※本ブログはデフォルトの場合 RHEL9 で sha1 が使えないことの確認です。
 そのため DNSSEC の設定手順の説明は割愛します。

KSK と ZSK の署名鍵を作成

# dnssec-keygen -f KSK -a RSASHA1 -b 4096 -n zone example.com
Generating key pair.......++++ .........................................................................++++
Kexample.com.+005+01406
#
# dnssec-keygen -a RSASHA1 -b 1024 -n zone example.com
Generating key pair...................+++++ ..+++++
Kexample.com.+005+37672
#
# ls -la Kexample.com*
-rw-r--r-- 1 root root 950 8月 9 15:17 Kexample.com.+005+01406.key
-rw------- 1 root root 3314 8月 9 15:17 Kexample.com.+005+01406.private
-rw-r--r-- 1 root root 431 8月 9 15:17 Kexample.com.+005+37672.key
-rw------- 1 root root 1010 8月 9 15:17 Kexample.com.+005+37672.private
#

ゾーンファイルの作成

# cat <<EOF > /var/named/example.com.zone
> example.com. 3600 IN SOA ns.example.com. (
> postmaster.example.com.
> 2022080901 ; Serial
> 3600 ; Refresh
> 900 ; Retry
> 604800 ; Expire
> 3600 ) ; Negative cache TTL
>
> example.com. 60 IN NS ns.example.com.
>
> example.com. 60 IN A 172.31.19.29
> ns.example.com. 60 IN A 172.31.19.29
> www.example.com. 60 IN A 172.31.19.29
> \$INCLUDE "Kexample.com.+005+01406.key"
> \$INCLUDE "Kexample.com.+005+37672.key"
> EOF
#

・署名作成

# dnssec-signzone -o example.com example.com.zone
dnssec-signzone: warning: Kexample.com.+005+01406.key:5: using RFC1035 TTL semantics
Verifying the zone using the following algorithms: RSASHA1.
Zone fully signed:
Algorithm: RSASHA1: KSKs: 1 active, 0 stand-by, 0 revoked
ZSKs: 1 active, 0 stand-by, 0 revoked
example.com.zone.signed
#
# ls -la
合計 56
drwxrwx--T 5 root named 4096 8月 9 15:20 .
drwxr-xr-x. 21 root root 4096 8月 9 15:15 ..
-rw-r--r-- 1 root root 950 8月 9 15:17 Kexample.com.+005+01406.key
-rw------- 1 root root 3314 8月 9 15:17 Kexample.com.+005+01406.private
-rw-r--r-- 1 root root 431 8月 9 15:17 Kexample.com.+005+37672.key
-rw------- 1 root root 1010 8月 9 15:17 Kexample.com.+005+37672.private
drwxrwx--- 2 named named 6 2月 16 07:51 data
-rw-r--r-- 1 root root 165 8月 9 15:20 dsset-example.com.
drwxrwx--- 2 named named 6 2月 16 07:51 dynamic
-rw-r--r-- 1 root root 641 8月 9 15:19 example.com.zone
-rw-r--r-- 1 root root 5194 8月 9 15:20 example.com.zone.signed
-rw-r----- 1 root named 2253 2月 16 07:51 named.ca
-rw-r----- 1 root named 152 2月 16 07:51 named.empty
-rw-r----- 1 root named 152 2月 16 07:51 named.localhost
-rw-r----- 1 root named 168 2月 16 07:51 named.loopback
drwxrwx--- 2 named named 6 2月 16 07:51 slaves
#

・named.conf に以下を追記します。

zone "example.com" {
type master;
file "example.com.zone.signed";
};

しっかり DNS SEC に対応したことの確認

# dig @172.31.19.29 +dnssec example.com

; <<>> DiG 9.11.36-RedHat-9.11.36-3.el8 <<>> @172.31.19.29 +dnssec example.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36420
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 1232
; COOKIE: b72582a737ee2d3c66e27d6862f1fd504dc2b9b31b416f81 (good)
;; QUESTION SECTION:
;example.com. IN A

;; ANSWER SECTION:
example.com. 60 IN A 172.31.19.29
example.com. 60 IN RRSIG A 5 2 60 20220908052201 20220809052201 37672 example.com. oQtCbMCic3xNlqb9AkWXbUGgy8xwBPJOm56mrd9Xat4azeskJ4vBGnBE qAVsO21MDzct3mZ0bkN7jQ8y6TaV2GBrmsHfWdrFWjnyqQr9AJUee7as q9RfJ+495v+aEKQnuBPBaRDz0e3xS/4nR3D+XMfJQFfEpeibrv9oraGP cLw=

;; AUTHORITY SECTION:
example.com. 60 IN NS ns.example.com.
example.com. 60 IN RRSIG NS 5 2 60 20220908052201 20220809052201 37672 example.com. J1cdrCyefgLoQFSkms6FkxrJhAffxgJU5ZQDc8CRhdWVoXzMgWM0m/Mz JKwUFwHBJeOYzZeevaW8dB9Wy/6KdM16EGjKNFYH7CYMavTuvBZNAGhn qrjWhBYe/D/lF1q4bIwQpG9FG7DeKa0vq/VbyfdqZq5L7Jyqjez/Nf1L 27E=

;; ADDITIONAL SECTION:
ns.example.com. 60 IN A 172.31.19.29
ns.example.com. 60 IN RRSIG A 5 3 60 20220908052201 20220809052201 37672 example.com. YkGB/9eBumU+qwm21qhtAqpwKaNuA7O9kf5j+d5Nr4Lf+az+RjAW/zpm 68RXgmvJ+ugo3jy2jJEDx+O3BNf+1dE6sYvyI1QdxcSTyMTFyJtqupg4 Q6YN/AnMEyjJixTffdxk6JH59kmrbhgrCQAsS4X6lV2oerpm5kYI5uWm hp8=

;; Query time: 0 msec
;; SERVER: 172.31.19.29#53(172.31.19.29)
;; WHEN: 火 8月 09 15:23:12 JST 2022
;; MSG SIZE rcvd: 630

#

これが RHEL 9 でどうなるのか確認をしてみましょう

RHEL 9 での DNSSEC 検証

・KSK と ZSK の署名鍵を作成
# cd /var/named/
# dnssec-keygen -f KSK -a RSASHA1 -b 4096 -n zone example.com
Generating key pair..........+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*..+........+...+....+.........+......+.....+....+..............+.+.....+.+...+.....+......+.+......+...+..+...................+........+......+....+...+..+...+...+.+.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.............+...............+....+.........+.........+.....+.+...........+...+.......+...+...+..+......+.+...+...+........+..........+..+...+......+.+..+...+.........+.........+.......+...+..+...................+...+.....+......+......+..........+......+..+......+.+...........+........................+......+.......+............+.........+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ....+.....+.......+......+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.+......+........+......+...+.+.....+.......+...+..+...............+..........+...+..+............+.+......+...+........+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.+....+...........+...+..........+..+.......+.....+.+............+.........+..............+......+..................+.+..............+.+...............+..+..........+........+.........+...+...+....+...............+..+....+..............+...+.........+.........+....+...+.....+....+.....+........................+.+...........+.......+......+.....+.......+.....+.......+.....................+.....+.......+...............+........+......+.............+..+.+.....+.........+.+..................+..+.......+......+.....+....+...+..+.......+.....+.........+.+...+.....+...+....+.....+.+...............+.....+....+.....+......+..........+...+.....+....+..+....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Kexample.com.+005+20168
[root@localhost named]# dnssec-keygen -a RSASHA1 -b 1024 -n zone example.com
Generating key pair..................................................................................++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ........++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Kexample.com.+005+34191
[root@localhost named]# ls -la Kexample.com*
-rw-r--r-- 1 root root 951 8月 9 16:11 Kexample.com.+005+20168.key
-rw------- 1 root root 3314 8月 9 16:11 Kexample.com.+005+20168.private
-rw-r--r-- 1 root root 431 8月 9 16:11 Kexample.com.+005+34191.key
-rw------- 1 root root 1010 8月 9 16:11 Kexample.com.+005+34191.private
#
・ゾーンファイルの作成
# cat <<EOF > /var/named/example.com.zone
example.com. 3600 IN SOA ns.example.com. (
postmaster.example.com.
2022080901 ; Serial
3600 ; Refresh
900 ; Retry
604800 ; Expire
3600 ) ; Negative cache TTL

example.com. 60 IN NS ns.example.com.

example.com. 60 IN A 10.1.1.70
ns.example.com. 60 IN A 10.1.1.70
www.example.com. 60 IN A 10.1.1.70
\$INCLUDE "Kexample.com.+005+20168.key"
\$INCLUDE "Kexample.com.+005+34191.key"
EOF
#
・署名作成
# dnssec-signzone -o example.com example.com.zone
dnssec-signzone: warning: Kexample.com.+005+20168.key:5: using RFC1035 TTL semantics
dnssec-signzone: warning: EVP_SignFinal failed (failure)
dnssec-signzone: fatal: dnskey 'example.com/RSASHA1/34191' failed to sign data: failure
#

署名を作成時にエラーとなることが確認できました。

対策

対処方法としては以下のドキュメントに従った設定が考えられます。

Packages signed with SHA-1 cannot be installed or upgraded
https://access.redhat.com/solutions/6868611

セキュリティレベルを意図的に下げることになりますので、
DNS サービスのみを提供するサーバとして構築したほうがよさそうです。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です