第21章 セキュリティー

Apache Karaf は、JAAS (Java Authentication and Authorization Service) が搭載する高度なセキュリティーシステムを OSGi に準拠する方法で提供します。

動的セキュリティーシステムを提供します。

Apache Karaf セキュリティーフレームワークは、以下へのアクセスを制御するために内部で使用されます。

  • OSGi サービス (開発者ガイドで説明)
  • コンソールコマンド
  • JMX レイヤー
  • WebConsole

アプリケーションはセキュリティーフレームワークを使用することもできます (詳細は、開発者ガイドを参照してください)。

21.1. レルム

Apache Karaf は複数のレルムを管理できます。レルムには、このレルムの認証や承認に使用するログインモジュールの定義が含まれます。ログインモジュールは、レルムの認証および承認を定義します。

jaas:realm-list コマンドは、現在定義されたレルムを一覧表示します。

karaf@root()> jaas:realm-list
Index | Realm Name | Login Module Class Name
-----------------------------------------------------------------------------------
1     | karaf      | org.apache.karaf.jaas.modules.properties.PropertiesLoginModule
2     | karaf      | org.apache.karaf.jaas.modules.publickey.PublickeyLoginModule

Apache Karaf は karaf という名前のデフォルトのレルムを提供していることがわかります。

このレルムには 2 つのログインモジュールがあります。

  • PropertiesLoginModule は、etc/users.properties ファイルをユーザー、グループ、ロール、およびパスワードのバックエンドとして使用します。このログインモジュールはユーザーを認証し、ユーザーのロールを返します。
  • PublickeyLoginModule は、特に SSHd で使用されます。etc/keys.properties ファイルを使用します。このファイルには、ユーザーおよび各ユーザーに関連付けられた公開鍵が含まれます。

Apache Karaf は、追加のログインモジュールを提供します (詳細は、開発者ガイドを参照してください)。

  • JDBCLoginModule がデータベースをバックエンドとして使用する
  • LdapLoginModule が LDAP サーバーをバックエンドとして使用する
  • SyncopeLoginModule が Apache Syncope をバックエンドとして使用する
  • OsgiConfigLoginModule は設定をバックエンドとして使用する
  • Krb5LoginModule が Kerberos サーバーをバックエンドとして使用する
  • GSSAPILdapLoginModule は LDAP サーバーをバックエンドとして使用するが、LDAP サーバー認証を他のバックエンド (通常は Krb5LoginModule) に委譲する

jaas:realm-manage コマンドを使用して、既存のレルムとログインモジュールを管理するか、独自のレルムを作成できます。

21.1.1. ユーザー、グループ、ロール、およびパスワード

Apache Karaf はデフォルトで PropertiesLoginModule を使用する

このログインモジュールは、ユーザー、グループ、ロール、およびパスワードのストレージとして etc/users.properties ファイルを使用します。

初期の etc/users.properties ファイルには次のものが含まれています。

################################################################################
#
#    Licensed to the Apache Software Foundation (ASF) under one or more
#    contributor license agreements.  See the NOTICE file distributed with
#    this work for additional information regarding copyright ownership.
#    The ASF licenses this file to You under the Apache License, Version 2.0
#    (the "License"); you may not use this file except in compliance with
#    the License.  You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS,
#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#    See the License for the specific language governing permissions and
#    limitations under the License.
#
################################################################################

#
# This file contains the users, groups, and roles.
# Each line has to be of the format:
#
# USER=PASSWORD,ROLE1,ROLE2,...
# USER=PASSWORD,_g_:GROUP,...
# _g_\:GROUP=ROLE1,ROLE2,...
#
# All users, grousp, and roles entered in this file are available after Karaf startup
# and modifiable via the JAAS command group. These users reside in a JAAS domain
# with the name "karaf".
#
karaf = karaf,_g_:admingroup
_g_\:admingroup = group,admin,manager,viewer

デフォルトではユーザーは karaf の 1 人のみであることが分かります。デフォルトのパスワードは、karaf です。

karaf ユーザーは 1 つのグループ admingroup のメンバーです。

グループの先頭には常に g: が付けられます。この接頭辞のないエントリーはユーザーです。

グループはロールのセットを定義します。デフォルトでは、admingroup は、groupadminmanager、および viewer のロールを定義します。

つまり、karaf ユーザーは admingroup によって定義されたロールを持つことを意味します。

21.1.1.1. コマンド

jaas:* コマンドは、コンソールでレルム、ユーザー、グループ、および ロールを管理します。

21.1.1.1.1. jaas:realm-list

このセクションでは、これまでに jaas:realm-list を使用しました。

jaas:realm-list コマンドは、レルムと各レルムのログインモジュールを一覧表示します。

karaf@root()> jaas:realm-list
Index | Realm Name | Login Module Class Name
-----------------------------------------------------------------------------------
1     | karaf      | org.apache.karaf.jaas.modules.properties.PropertiesLoginModule
2     | karaf      | org.apache.karaf.jaas.modules.publickey.PublickeyLoginModule

ここに、2 つのログインモジュール (PropertiesLoginModulePublickeyLoginModule) を含む 1 つのレルム (karaf) があります。

index コマンドは、管理するレルム/ログインモジュールを簡単に識別するために jaas:realm-manage コマンドによって使用されます。

21.1.1.1.2. jaas:realm-manage

jaas:realm-manage コマンドは、レルム/ログインモジュールの編集モードを切り替え、ログインモジュールでユーザー、グループ、およびロールを管理できます。

管理するレルムおよびログインモジュールを識別するには、--index オプションを使用します。インデックスは jaas:realm-list コマンドによって表示されます。

karaf@root()> jaas:realm-manage --index 1

もう 1 つの方法は、--realm および --module オプションを使用することです。--realm オプションはレルム名を想定し、--module オプションはログインモジュールクラス名を想定します。

karaf@root()> jaas:realm-manage --realm karaf --module org.apache.karaf.jaas.modules.properties.PropertiesLoginModule
21.1.1.1.3. jaas:user-list

編集モードの場合は、jaas:user-list を使用してログインモジュールのユーザーを一覧表示できます。

karaf@root()> jaas:user-list
User Name | Group      | Role
--------------------------------
karaf     | admingroup | admin
karaf     | admingroup | manager
karaf     | admingroup | viewer

ユーザー名およびグループはロールごとに確認できます。

21.1.1.1.4. jaas:user-add

jaas:user-add コマンドは、現在編集中のログインモジュールに新しいユーザー (およびパスワード) を追加します。

karaf@root()> jaas:user-add foo bar

変更 (ユーザーの追加) をコミットするには、jaas:update コマンドを実行します。

karaf@root()> jaas:update
karaf@root()> jaas:realm-manage --index 1
karaf@root()> jaas:user-list
User Name | Group      | Role
--------------------------------
karaf     | admingroup | admin
karaf     | admingroup | manager
karaf     | admingroup | viewer
foo       |            |

一方、ユーザーの追加をロールバックする場合は、jaas:cancel コマンドを使用できます。

21.1.1.1.5. jaas:user-delete

jaas:user-delete コマンドは、現在編集中のログインモジュールからユーザーを削除します。

karaf@root()> jaas:user-delete foo

jaas:user-add コマンドの場合と同様に、jaas:update を使用して変更をコミットする必要があります (または jaas:cancel を使用してロールバックする必要があります)。

karaf@root()> jaas:update
karaf@root()> jaas:realm-manage --index 1
karaf@root()> jaas:user-list
User Name | Group      | Role
--------------------------------
karaf     | admingroup | admin
karaf     | admingroup | manager
karaf     | admingroup | viewer
21.1.1.1.6. jaas:group-add

jaas:group-add コマンドは、現在編集中のログインモジュールでグループをユーザーに割り当てます (最終的にグループを作成)。

karaf@root()> jaas:group-add karaf mygroup
21.1.1.1.7. jaas:group-delete

jaas:group-delete コマンドは、現在編集中のログインモジュールでグループからユーザーを削除します。

karaf@root()> jaas:group-delete karaf mygroup
21.1.1.1.8. jaas:group-role-add

jaas:group-role-add コマンドは、現在編集中のログインモジュールでグループのロールを追加します。

karaf@root()> jaas:group-role-add mygroup myrole
21.1.1.1.9. jaas:group-role-delete

jaas:group-role-delete コマンドは、現在編集中のログインモジュールでグループからロールを削除します。

karaf@root()> jaas:group-role-delete mygroup myrole
21.1.1.1.10. jaas:update

jaas:update コマンドは、ログインモジュールのバックエンドで変更をコミットします。たとえば、PropertiesLoginModule の場合、etc/users.propertiesjaas:update コマンドの実行後にのみ更新されます。

21.1.1.1.11. jaas:cancel

jaas:cancel コマンドは変更をロールバックし、ログインモジュールのバックエンドを更新しません。

21.1.2. パスワードの暗号化

デフォルトでは、パスワードは etc/users.properties ファイルにクリアテキストで保存されます。

etc/org.apache.karaf.jaas.cfg 設定ファイルで暗号化を有効にすることができます。

################################################################################
#
#    Licensed to the Apache Software Foundation (ASF) under one or more
#    contributor license agreements.  See the NOTICE file distributed with
#    this work for additional information regarding copyright ownership.
#    The ASF licenses this file to You under the Apache License, Version 2.0
#    (the "License"); you may not use this file except in compliance with
#    the License.  You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS,
#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#    See the License for the specific language governing permissions and
#    limitations under the License.
#
################################################################################

#
# Boolean enabling / disabling encrypted passwords
#
encryption.enabled = false

#
# Encryption Service name
#   the default one is 'basic'
#   a more powerful one named 'jasypt' is available
#       when installing the encryption feature
#
encryption.name =

#
# Encryption prefix
#
encryption.prefix = {CRYPT}

#
# Encryption suffix
#
encryption.suffix = {CRYPT}

#
# Set the encryption algorithm to use in Karaf JAAS login module
# Supported encryption algorithms follow:
#   MD2
#   MD5
#   SHA-1
#   SHA-256
#   SHA-384
#   SHA-512
#
encryption.algorithm = MD5

#
# Encoding of the encrypted password.
# Can be:
#   hexadecimal
#   base64
#
encryption.encoding = hexadecimal

encryption.enabled が true に設定されている場合、パスワードの暗号化が有効になります。

暗号化を有効にすると、パスワードは、ユーザーの初回ログイン時に暗号化されます。暗号化したパスワードの先頭と末尾に、\{CRYPT\} が付きます。パスワードを再暗号化するには、先頭と末尾の \{CRYPT\} がない状態でパスワードをリセットできます (etc/users.properties ファイルで)。Apache Karaf は、このパスワードが明確であることを検出し (先頭と末尾に \{CRYPT\} がないため)、再度暗号化します。

etc/org.apache.karaf.jaas.cfg 設定ファイルを使用すると、高度な暗号化動作を定義できます。

  • encryption.prefix プロパティーは、パスワードが暗号化されていることをフラグする接頭辞を定義します。デフォルトは \{CRYPT\} です。
  • encryption.suffix プロパティーは、パスワードが暗号化されていることをフラグする接尾辞を定義します。デフォルトは \{CRYPT\} です。
  • encryption.algorithm プロパティーは、暗号化 (digest) に使用するアルゴリズムを定義します。可能な値は、MD2MD5SHA-1SHA-256SHA-384SHA-512 です。デフォルトは MD5 です。
  • encryption.encoding プロパティーは、暗号化されたパスワードのエンコーディングを定義します。可能な値は hexadecimal または base64 です。デフォルト値は hexadecimal です。

21.1.3. キーによる認証の管理

SSH レイヤーでは Karaf はキーによる認証をサポートし、パスワードなしでログインできるようにします。

SSH クライアント (Karaf 自体によって提供される bin/client、OpenSSH などの ssh クライアント) は、Karaf SSHD(サーバー側) 上で自身を識別する公開鍵と秘密鍵のペアを使用します。

接続が許可された鍵は、次の形式に従って etc/keys.properties ファイルに格納されます。

user=key,role

デフォルトでは、Karaf は karaf ユーザーのキーを許可します。

# karaf=AAAAB3NzaC1kc3MAAACBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAAAAFQCXYFCPFSMLzLKSuYKi64QL8Fgc9QAAAIEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoAAACBAKKSU2PFl/qOLxIwmBZPPIcJshVe7bVUpFvyl3BbJDow8rXfskl8wO63OzP/qLmcJM0+JbcRU/53JjTuyk31drV2qxhIOsLDC9dGCWj47Y7TyhPdXh/0dthTRBy6bqGtRPxGa7gJov1xm/UuYYXPIUR/3x9MAZvZ5xvE0kYXO+rx,admin
注記

セキュリティー上の理由から、このキーは無効になっています。クライアントごとにキーペアを作成し、etc/keys.properties ファイルを更新することが推奨されます。

キーペアを作成する最も簡単な方法は、OpenSSH を使用することです。

以下を使用してキーペアを作成できます。

ssh-keygen -t dsa -f karaf.id_dsa -N karaf

これで公開鍵と秘密鍵ができました。

-rw-------  1 jbonofre jbonofre    771 Jul 25 22:05 karaf.id_dsa
-rw-r--r--  1 jbonofre jbonofre    607 Jul 25 22:05 karaf.id_dsa.pub

etc/keys.propertieskaraf.id_dsa.pub ファイルの内容をコピーできます。

karaf=AAAAB3NzaC1kc3MAAACBAJLj9vnEhu3/Q9Cvym2jRDaNWkATgQiHZxmErCmiLRuD5Klfv+HT/+8WoYdnvj0YaXFP80phYhzZ7fbIO2LRFhYhPmGLa9nSeOsQlFuX5A9kY1120yB2kxSIZI0fU2hy1UCgmTxdTQPSYtdWBJyvO/vczoX/8I3FziEfss07Hj1NAAAAFQD1dKEzkt4e7rBPDokPOMZigBh4kwAAAIEAiLnpbGNbKm8SNLUEc/fJFswg4G4VjjngjbPZAjhkYe4+H2uYmynry6V+GOTS2kaFQGZRf9XhSpSwfdxKtx7vCCaoH9bZ6S5Pe0voWmeBhJXi/Sww8f2stpitW2Oq7V7lDdDG81+N/D7/rKDD5PjUyMsVqc1n9wCTmfqmi6XPEw8AAACAHAGwPn/Mv7P9Q9+JZRWtGq+i4pL1zs1OluiStCN9e/Ok96t3gRVKPheQ6IwLacNjC9KkSKrLtsVyepGA+V5j/N+Cmsl6csZilnLvMUTvL/cmHDEEhTIQnPNrDDv+tED2BFqkajQqYLgMWeGVqXsBU6IT66itZlYtrq4v6uDQG/o=,admin

また、クライアントに karaf.id_dsa 秘密鍵を使用するように指定します。

bin/client -k ~/karaf.id_dsa

または ssh を使用します。

ssh -p 8101 -i ~/karaf.id_dsa karaf@localhost

21.1.4. RBAC

Apache Karaf はロールを使用してリソースへのアクセスを制御します。これは RBAC(Role Based Access Control) システムです。

ロールは、以下を制御するために使用されます。

  • OSGi サービスへのアクセス
  • コンソールへのアクセス (コマンドの実行の制御)
  • JMX へのアクセス (MBean や操作)
  • WebConsole へのアクセス

21.1.4.1. OSGi サービス

OSGi サービス RBAC サポートの詳細は、開発者ガイドを参照してください。

21.1.4.2. コンソール

コンソール RBAC のサポートは、OSGi サービス RBAC を特化したものです。実際には、Apache Karaf では、すべてのコンソールコマンドは OSGi サービスとして定義されます。

コンソールのコマンド名は scope:name 形式に従います。

ACL(アクセスリスト) は、etc/org.apache.karaf.command.acl.<scope>.cfg 設定ファイルで定義されています。<scope> はコマンドスコープです。

たとえば、etc/org.apache.karaf.command.acl.feature.cfg 設定ファイルを作成することにより、feature:* コマンドに対する ACL を定義できます。この etc/org.apache.karaf.command.acl.feature.cfg 設定ファイルでは、次のように設定できます。

list = viewer
info = viewer
install = admin
uninstall = admin

ここでは、feature:list コマンドと feature:info コマンドは、viewer ロールを持つユーザーが実行できるのに対し、feature:install コマンドと feature:uninstall コマンドは admin ロールを持つユーザーのみが実行できることを定義します。admin グループのユーザーも viewer ロールを持っているため、すべて実行できることに注意してください。

Apache Karaf コマンド ACL は、(指定のコマンドスコープ内で) を使用してアクセスを制御できます。

  • コマンド名の正規表現 (例: name = role)
  • コマンド名とオプションまたは引数の値の正規表現 (例: 100 を超える引数の値でのみ名前を実行する name[/.[0-9][0-9][0-9]+./] = role)

コマンド名とオプション/引数はいずれも、完全一致または正規表現の一致をサポートします。

デフォルトでは、Apache Karaf は以下の ACL を定義します。

  • etc/org.apache.karaf.command.acl.bundle.cfg 設定ファイルは、bundle:* コマンドの ACL を定義します。この ACL は、システムバンドルの bundle:* コマンドの実行を admin ロールが割り当てられたユーザーのみに制限しますが、システム以外のバンドルの bundle:* コマンドは、manager ロールを持つユーザーが実行できます。
  • etc/org.apache.karaf.command.acl.config.cfg 設定ファイルは、config:* コマンドの ACL を定義します。この ACL は、jmx.acl.*org.apache.karaf.command.acl.*、および org.apache.karaf.service.acl.* 設定 PID を使用した config:* コマンドの実行を admin ロールを持つユーザーに制限します。他の設定 PID の場合、manager ロールを持つユーザーは config:* コマンドを実行できます。
  • etc/org.apache.karaf.command.acl.feature.cfg 設定ファイルは、feature:* コマンドの ACL を定義します。admin ロールを持つユーザーのみが feature:install および feature:uninstall コマンドを実行できます。その他の feature:* コマンドは、任意のユーザーが実行できます。
  • etc/org.apache.karaf.command.acl.jaas.cfg 設定ファイルは、jaas:* コマンドの ACL を定義します。admin ロールを持つユーザーのみが jaas:update コマンドを実行できます。その他の jaas:* コマンドは、任意のユーザーが実行できます。
  • etc/org.apache.karaf.command.acl.kar.cfg 設定ファイルは、kar:* コマンドの ACL を定義します。admin ロールを持つユーザーのみが kar:install および kar:uninstall コマンドを実行できます。その他の kar:* コマンドは、任意のユーザーが実行できます。
  • etc/org.apache.karaf.command.acl.shell.cfg 設定ファイルは、shell:* コマンドと"direct"コマンドの ACL を定義します。admin ロールを持つユーザーのみが、shell:editshell:execshell:new、および shell:java コマンドを実行できます。その他の shell:* コマンドは、任意のユーザーが実行できます。

これらのデフォルト ACL を変更し、追加のコマンド範囲に自身の ACL を追加できます (Apache Karaf Cellar の場合は etc/org.apache.karaf.command.acl.cluster.cfg、Apache Camel の場合は etc/org.apache.karaf.command.acl.camel.cfg​ など)。

etc/system.propertieskaraf.secured.services プロパティーを編集することにより、コマンド RBAC サポートを微調整できます。

#
# By default, only Karaf shell commands are secured, but additional services can be
# secured by expanding this filter
#
karaf.secured.services = (&(osgi.command.scope=*)(osgi.command.function=*))

21.1.4.3. JMX

コンソールコマンドと同様に、ACL(AccessList) を JMX レイヤーに定義できます。

JMX ACL は、etc/jmx.acl<ObjectName>.cfg 設定ファイルで定義されます。<ObjectName> は MBean オブジェクト名です (たとえば、org.apache.karaf.bundleorg.apache.karaf;type=Bundle MBean を表します)。

etc/jmx.acl.cfg は最も汎用的な設定ファイルであり、特定の設定ファイルが見つからない場合に使用されます。グローバル ACL 定義が含まれます。

JMX ACL は、(JMX MBean 内) を使用してアクセスを制御できます。

  • 操作名の正規表現 (例: operation* = role)
  • 操作引数値正規表現 (例: operation(java.lang.String, int)[/([1-4])?[0-9]/,/.*/] = role)

デフォルトでは、Apache Karaf は以下の JMX ACL を定義します。

  • etc/jmx.acl.org.apache.karaf.bundle.cfg 設定ファイルは、org.apache.karaf:type=bundle MBean の ACL を定義します。この ACL は、admin ロールを持つユーザーに対してのみ、システムバンドル setStartLevel()start()stop()、および update() 操作を制限します。その他の操作は、manager のロールを持つユーザーが実行できます。
  • etc/jmx.acl.org.apache.karaf.config.cfg 設定ファイルは、org.apache.karaf:type=config MBean の ACL を定義します。この ACL は、jmx.acl*org.apache.karaf.command.acl*、および org.apache.karaf.service.acl* 設定 PID の変更を、admin ロールを持つユーザーに制限します。その他の操作は、manager のロールを持つユーザーが実行できます。
  • etc/jmx.acl.org.apache.karaf.security.jmx.cfg 設定ファイルは、org.apache.karaf:type=security,area=jmx MBean の ACL を定義します。この ACL は、viewer ロールを持つユーザーに canInvoke() 操作の呼び出しを制限します。
  • etc/jmx.acl.osgi.compendium.cm.cfg 設定ファイルは、osgi.compendium:type=cm MBean の ACL を定義します。この ACL は、jmx.acl*org.apache.karaf.command.acl*、および org.apache.karaf.service.acl* 設定 PID の変更を、admin ロールを持つユーザーに制限します。その他の操作は、manager のロールを持つユーザーが実行できます。
  • etc/jmx.acl.java.lang.Memory.cfg 設定ファイルは、コア JVM Memory MBean の ACL を定義します。この ACL は、gc 操作の呼び出しを manager ロールを持つユーザーのみに制限します。
  • etc/jmx.acl.cfg 設定ファイルは最も汎用的なファイルです。ここで定義された ACL は、他の特定の ACL が一致しない場合に使用されます (特定の ACL によって)。これは別の MBean 固有の etc/jmx.acl.*.cfg 設定ファイルで定義される ACL です。list*()get*()is*() 操作は、viewer ロールを持つユーザーが実行できます。set*() および他のすべての *() 操作は、admin ロールを持つユーザーが実行できます。

21.1.4.4. WebConsole

Apache Karaf WebConsole はデフォルトで利用できません。これを有効にするには、webconsole 機能をインストールする必要があります。

karaf@root()> feature:install webconsole

WebConsole では、コンソールや JMX などの粒度の細かい RBAC はサポートされません。

admin ロールを持つすべてのユーザーが WebConsole にログインし、任意の操作を実行できます。

21.1.5. SecurityMBean

Apache Karaf は、現在のユーザーが指定の MBean や操作を呼び出すことができるかどうかをチェックする JMX MBean を提供します。

canInvoke() 操作は現在のユーザーのロールを取得し、最終的に指定された引数値を使用して、ロールが MBean や操作を呼び出しできるかどうかを確認します。

21.1.5.1. 操作

  • canInvoke(objectName) は、現在のユーザーが objectName を使用して MBean を呼び出すことができる場合は true を返し、できない場合は false を返します。
  • canInvoke(objectName) は、現在のユーザーが objectName を使用して操作 methodName を MBean で呼び出すことができる場合は true を返し、できない場合は false を返します。
  • canInvoke(objectName, methodName, argumentTypes) は、現在のユーザーが objectName を使用して、MBean で引数タイプ argumentTypes の配列を使用して操作 methodName を呼び出すことができる場合は true を返し、それ以外の場合は false を返します。
  • canInvoke(bulkQuery) は、canInvoketrue または false の場合、bulkQuery 表形式データの各操作を含む表形式データを返します。

21.1.6. セキュリティープロバイダー

アプリケーションによっては、[BouncyCastle|http://www.bouncycastle.org] などの特定のセキュリティープロバイダーが利用可能である必要があります。

JVM には、署名済みでブートクラスパスで利用可能できる必要があるなど、jar の使用に関するいくつかの制限があります。

これらのプロバイダーをデプロイする方法の 1 つは、$JAVA_HOME/jre/lib/ext の JRE フォルダーに配置し、そのプロバイダーを登録するためにセキュリティーポリシー設定 ($JAVA_HOME/jre/lib/security/java.security) を変更することです。

このアプローチは問題なく機能しますが、グローバルな効果があり、それに応じてすべてのサーバーを設定する必要があります。

Apache Karaf は、追加のセキュリティープロバイダーを設定する簡単な方法を提供します。* プロバイダー jar を lib/ext に配置 * etc/config.properties 設定ファイルを変更して以下のプロパティーを追加

org.apache.karaf.security.providers = xxx,yyy

このプロパティーの値は、登録するプロバイダークラス名のコンマ区切りリストです。

たとえば、bouncycastle セキュリティープロバイダーを追加するには、以下を定義します。

org.apache.karaf.security.providers = org.bouncycastle.jce.provider.BouncyCastleProvider

さらに、すべてのバンドルがそれらにアクセスできるように、システムバンドルのこれらのプロバイダーからクラスにアクセスできるようにしてください。

これには、同じ設定ファイルの org.osgi.framework.bootdelegation プロパティーを変更します。

org.osgi.framework.bootdelegation = ...,org.bouncycastle*