Openmeetingsを取り巻く環境…
を考慮したとき、OpenmeetingsをHTTPSで動かすことが正しい、となって設定を試してみたけれども、フル機能をユーザーに使ってもらおうとした時にはハードルが高すぎる。
これは4部作の3つ目。
・OpenmeetingsインストールからProxy設定(3.0.5~3.2.1近辺)
・OpenmeetingsをSSLで動作させる設定(3.3.0以降)
・OpenmeetingsをそれでもProxyで動作させる(危険)
・Openmeetingsのアップグレード & ChromiumとFlash
Javaが内部で持っているキーストアに、ルート証明書をインストールするとか、もう荒行レベルと感じるだろうと思う。
Apacheの設定では逃げられない(逃げられるのかもしれないけれど、見つけられなかった)ので、Openmeetingsの設定でどうにかできないかと頑張ってみたものの、それも上手く働かせられなかった。
これは、ソースに手を入れるしかない…
えぇ、完全に危険なソース変更です。わざわざCSRF対応しているのに、それを無効化するのですから。
この問題の性質を調べてみると、クローズドな環境(ユーザーを自動で登録させていないので、アカウントは全て関係者のみ)ならば、いたずらされても問題は広がりにくい。
※IPAがわかりやすく情報公開をしてくれている。
3. CSRF (クロスサイト・リクエスト・フォージェリ)
ということで、ウチの中だけで考えれば「割り切り案件」と判断した。
やることは、
である。
ソースは公式からたどって必要なバージョンを落としてくる。
3.3.0以降はCSRF対策されているので、お試しで3.3.2とした。
ファイルを展開したら、そのディレクトリに入る。
以降 $src と表記。
■ソースの改変
$src/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java//Add custom resource loader at the beginning, so it will be checked first in the
//chain of Resource Loaders, if not found it will search in Wicket's internal
//Resource Loader for a the property key
getResourceSettings().getStringResourceLoaders().add(0, new LabelResourceLoader());
getJavaScriptLibrarySettings().setJQueryReference(getV3());
getRequestCycleListeners().add(new CsrfPreventionRequestCycleListener() {
@Override
public void onEndRequest(RequestCycle cycle) {
Response resp = cycle.getResponse();
if (resp instanceof WebResponse && !(resp instanceof WebSocketResponse)) {
WebResponse wresp = (WebResponse)resp;
wresp.setHeader("X-XSS-Protection", "1; mode=block");
wresp.setHeader("Strict-Transport-Security", "max-age=31536000; includeSubDomains; preload");
wresp.setHeader("X-Content-Type-Options", "nosniff");
wresp.setHeader("X-Frame-Options", xFrameOptions);
wresp.setHeader("Content-Security-Policy", contentSecurityPolicy);
}
}
@Override
protected boolean isChecked(IRequestHandler handler) {
if (handler instanceof WebSocketRequestHandler || handler instanceof WebSocketMessageBroadcastHandler) {
return false;
}
return super.isChecked(handler);
}
// CSRF対策の無効化
@Override
protected boolean isEnabled() {
return false;
}
});
■コンパイル
Mavenを使うのでインストール。$ sudo apt install mvn
※コマンドの使い方は、「Maven2使い方メモ」がとてもわかり易かった。
コンパイル。情報は公式「How to Build a Distribution」にある。$ mvn clean install -P allModules,unpacked,mysql -DskipTests=true -Dwicket.mode=DEVELOPMENT
※色々ダウンロードしながらコンパイルするので、長時間が掛かる。
■モジュールの差し替え
コンパイルした結果のモジュールを差し替える。
$red5/webapps/openmeetings/WEB-INF/lib/openmeetings-web-3.3.2.jar
を
$src/openmeetings-web/target/lib/openmeetings-webservice-3.3.2.jar
に置き換える。
後は、red5.shを再起動すればOK。
やることはこれだけなんだけれども、結局結構な紆余曲折をしてしまった。セキュリティ対策は大事なことだけれど、なんとか設定で逃げられるようにはできないものだろうか…。
↧
OpenmeetingsをそれでもProxyで動作させる(危険)
↧