JDKアップデートしたらsecureValidationでテストがコケたので暫定対処をしました
JDK17へ移行しようとテストコードを流していたらRSA-SHA1を使用している部分で以下のエラー。
It is forbidden to use algorithm http://www.w3.org/2000/09/xmldsig#rsa-sha1 when secure validation is enabled
どうもsecureValidationが有効な状態だと、特定のアルゴリズムの仕様が許可されないセキュリティエンハンスのせいらしい。
以下は、Sean Mullan氏の記事。
--
本来であれば、正しいアルゴリズムを採用するようにコード側を変更すべきですが、いかんせん影響範囲が大きい部分だったりするといったんはこのアルゴリズムを許可してテストを通るようにして、アルゴリズム変更はまた別で行うべきかなと考え、暫定で許可することとしました。
以下は許可の方法です。
secureValidationで禁止するアルゴリズムを変更する
securyValidationの際に禁止されるアルゴリズムは、java.security
に列挙されています。
Eclipse-Terumin JDK17
のコンテナイメージでは、以下の場所にありました。
/opt/java/openjdk/conf/security/java.security
これを覗くと確かに jdk.xml.dsig.secureValidationPolicy
というポリシーがあり、それを見るとSHA-1とかもあります。
直接編集してしまってもいいんですが、さすがにシステム全体のポリシーを変えてしまうのもアレなので、テストを流したり実行したりする場合にのみこの変更を適用するようにします。
まずは適当な場所に java.security
ファイルを作成します。(今回、自分の場合はプロジェクト直下においてしまいました)
そして、テスト実行する際に以下のオプションを指定するようにします。VSCodeでテストする際のvmArgsに書いたり、pom.xmlのsurefireのargsに書いたりしてみました。
-Djava.security.properties=./java.security
java.securityを作成した位置に応じて適宜読み替えてください。そして、java.source
の内容をもともとのjava.sourceからコピペし、必要なアルゴリズムをリストから削除して以下のようにしました。
jdk.xml.dsig.secureValidationPolicy=\ disallowAlg http://www.w3.org/TR/1999/REC-xslt-19991116,\ disallowAlg http://www.w3.org/2001/04/xmldsig-more#rsa-md5,\ disallowAlg http://www.w3.org/2001/04/xmldsig-more#hmac-md5,\ disallowAlg http://www.w3.org/2001/04/xmldsig-more#md5,\ disallowAlg http://www.w3.org/2007/05/xmldsig-more#sha1-rsa-MGF1,\ disallowAlg http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha1,\ maxTransforms 5,\ maxReferences 30,\ disallowReferenceUriSchemes file http https,\ minKeySize RSA 1024,\ minKeySize DSA 1024,\ minKeySize EC 224,\ noDuplicateIds,\ noRetrievalMethodLoops
削除したのは以下の3行です。
disallowAlg http://www.w3.org/2000/09/xmldsig#sha1,\ disallowAlg http://www.w3.org/2000/09/xmldsig#dsa-sha1,\ disallowAlg http://www.w3.org/2000/09/xmldsig#rsa-sha1,\
(ここは必要なアルゴリズムに応じて読み換えてください。)
動作確認
ここまでできたら、テストを流してみます。流れればOK。
おわりに
unmarshalXMLSignature
実行する系テストの以上系でエラーが出て、JDKのバージョンアップで javax.xml.crypto.dsig.XMLSignatureException
の内容が変わってしまったのか~~~?!なんて思ってたらもっと根深いところに原因があったみたいです。
どなたかのご参考になれば幸いです。