8/23 (日)
万葉倶楽部@横浜みなとみらい
ほうぼうの足湯につかってみたが、今日は万葉倶楽部 横浜みなとみらいへ来てみる。
最初は温泉に入る。 16時頃に入浴を開始したがかなり客が入っている。 芋の子を洗う状態だ。
入浴後は屋上の足湯に。 ぐるっと円環状に湯があり、座る場所によって横浜湾やコスモワールドが見える。 非常に気持ちいい。
8/22 (土)
[Movie] 2分の1の魔法
チネチッタで『2分の1の魔法』(原題: Onward)の吹き替え版を観る。 ディズニー系アニメによくある原題からの改題が凄い。
NO MORE 映画泥棒が新作になっている。 なんか屋外に飛び出して無駄にアクティブな感じだ。
8/17 (月)
Active Directory の LDAP 接続のセキュリティ強化
Microsoft は 2019年8月にセキュリティアドバイザリ ADV190023 を公開し、Active Directory の LDAP 通信は LDAP 署名と LDAP チャネルバインディングの有効化を推奨されている。 また Windows Server に対するセキュリティアップデートで、従来のシンプル認証で LDAP へ接続する手段が封鎖される。 セキュリティアップデートの時期は当初は 2020年3月とされていたが、2月に2020年後半に延期された。 とはいえもうすぐだ。
LDAP 署名(signing)が有効になった場合、まずパスワードをそのまま送る LDAP simple bind 認証は使えなくなる。 LDAP 署名は LDAP SASL bind 認証に関する機能で、かつ完全性(Integrity)をチェックするモードでアクセスする必要がある。 SASL-GSSAPI なら OK のようだ。
LDAP チャネルバインディング(Channel Binding)は LDAP over TLS に関するセキュリティを強化する機能のようだ。 TLS レイヤーは透過的なため LDAP 通信から見るとどの TLS コネクションを使って通信が行われれているか分からない。 TLS コネクションの情報を Channel Binding Token(CBT) として LDAP 側の通信に渡して検証可能にするというものらしい。
問題は Java で Active Directory の LDAP に接続する場合だ。
- LDAP 署名の方は、Java の標準でついてくる JNDI で SASL-GSSAPI に接続することは可能だと思われる。 参考文献 12. によるとバグがあるという話もある。
- LDAP チャネルバインディングの方は、参考文献 7. によるとサーバー側が CBT を有効にしても、クライアント側が CBT を使うと通知しなければ有効にならないようだ。
そのため直ちに影響はないようだ。
(B) LDAP チャネルバインドの対応(LDAPS 利用時のみ)
----------------------------------------------------------
更新プログラムを適用してサーバー既定値が変更されても、CBT (Channel Binding Tokens) に対応したクライアントであれば利用する、CBT に対応していないクライアントであればこれまで通り動作する、という内容であるため、従来接続できていたアプリケーションが接続できなくなるといった影響はございません。 また、クライアント側で CVE-2017-8563 の脆弱性に対応した更新プログラムを適用していただくことで、セキュアな状態で通信をご利用いただくことができます。
参考文献
- Microsoft Security Response Center | [AD管理者向け] 2020 年 LDAP 署名と LDAP チャネルバインディングが有効化。確認を
- 2020年後半に予定されている「LDAP接続のセキュリティ強化」について
- Microsoft | ADV190023 | LDAP チャネル バインディングと LDAP 署名を有効にするためのマイクロソフト ガイダンス
- Microsoft | [MS-ADTS]: Active Directory Technical Specification 5.1 LDAP Security
- Microsoft | Frequently asked questions about changes to Lightweight Directory Access Protocol
- Microsoft | Use the LdapEnforceChannelBinding registry entry to make LDAP authentication over SSL/TLS more secure
- Microsoft Developer Network | セキュリティ アドバイザリ ADV190023 の対応について
- SEの道標 | LDAP署名/LDAPチャネルバインディングとCBT (Channel Binding Token) について
- Oracle | LDAP LDAPネーム・サービス・プロバイダ Java Naming and Directory Interface (JNDI)
- Apache Directory | LDAP Java API
- CLOVER | JavaからLDAP/LDAPS接続 (自己署名証明書の検証スルーコード付き)
- OpneJDK > OpenJDK Security Development | Microsoft LDAP Channel Binding
8/15 (土)
[Movie] 劇場版 Fate/stay night [Heavens' Feel] III.spring song
チネチッタで『劇場版 Fate/stay night [Heavens' Feel] III.spring song』を観る。 1部が2017年10月、2部が2019年12月。 新型コロナウィルスの影響で上映が延期になっていたが、再延期はなかった。 同時期にドラえもんぐらいしか大作がないので、複数の幕で並行上映している。
ストーリーはゲームの内容をなぞった形で、もう映画として成立してなくてもいいよね!?という感じだ。 もう少しシナリオを練れなかったものか…
チネチッタの飲食店はところどころ閉鎖している店が出てきて寂し感じだ。
8/8 (土)
[Java] Jersey(JAX-RS) で JSON を扱う方法
Jersey(JAX-RS)は JSON-to-Java binding を MOXy、JSON-P、Jackson、Jettison、JSON-B などから選択できる(9.1. JSON)。 しかしどれも一長一短があるようだ。
MOXy | Jackson | Jettison | JSON-B | |
---|---|---|---|---|
POJO based JSON binding support | yes | yes | no | yes |
JAXB based JSON binding support | yes | yes | yes | no |
Map | no | yes | ? | yes |
POJO へのマッピング可能か
Jettison は POJO のクラスへのマッピングができない。
JAXB アノテーションが使えるか
JAXB は javax.xml.bind.annotation.XmlElement
や javax.xml.bind.annotation.XmlTransient
のアノテーションを設定することが可能だが、JSON-B プロバイダーでは JAXB アノテーションが使えない。
JSON-B プロバイダーが javax.json.bind.annotation.JsonbTransient
のような JSON-B アノテーションは使える。
Map 型が使えるか
Java のクラス中で Map<String, Object>
を指定すると、任意の JSON とマーシャリング・アンマーシャリングが可能になる。
public class Pojo { public Map<String, Object> options; ← "options":{"key1":"value1", "key2":"value2"} のような形を受け取れる。 }
しかし Moxy プロバイダーでは Map
が使えない。
Jackson の特殊事情
Jackson プロバイダーは理想に近いが癖がある。 ObjectMapper を設定することができないので、デフォルト値を変更することはできない。
- 未知のプロパティをアンマーシャリング時にエラー
- null のフィールドを持つ Java インスタンスをマーシャリング時に "field = null" が入る。
- フィールドを持たない Java クラスのインスタンスをマーシャリング時にエラーが出る。
未知のプロパティをアンマーシャリング時にエラー
Foo
のようなクラスに {"key1":"value1", "key2":"value2", "key3":"value3"} のようにクラス側に対応するフィールドがない JSON をアンマーシャリングしようとするとエラーになる。
public clas Foo { public String key1; public String key2; }
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "key3" (class Foo), not marked as ignorable (2 known properties: "key1", "key2"])
これを防ぎ、対応しないフィールドを無視させるには、Jackson のアノテーションを付けるしかない。
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @JsonIgnoreProperties(ignoreUnknown = true) public clas Foo { public String key1; public String key2; }