JAR 署名バリデーター

デフォルトでは、アプリケーションバリデーターサービスは JAR 署名バリデーターを実装し、認証されていないアーティファクトのデプロイを禁止します。 アーティファクト JAR ファイルのそれぞれの署名済みエントリが、キーストアのいずれかの別名と一致する必要があります。 ランタイムにデプロイされたすべてのアーティファクトを検証するために使用するキーストアの別名を指定できます。期限切れの証明書で署名されたアーティファクトも使用できます。

JAR Signatureバリデーターを設定する

$MULE_HOME/conf/mule-agent.yml​ ファイルを変更して次を含めます。

 services:
  mule.agent.artifact.validator.service:
    enabled: true
    validators:
    - type: jarSignatureValidator
      name: defaultJarSignatureValidator
      enabled: true
      args:
        truststore: signers-truststore.jks
        truststoreType: JKS
        truststoreAlias: code-signer-alias-1
        truststorePassword: '![PBEWITHSHA1ANDDESEDE,U/nA0wV714oNi9LHoAkDtiwg22ngG6b7yFTtg7fk2d4=]'

次のプロパティを使用して、JAR 署名バリデーターを設定します。

キー 説明

type

必須。 jarSignatureValidator​ は、Mule Runtime のデプロイメントに使用されるすべての JAR ファイルの署名を検証するために、Runtime Manager エージェントプラグインで実装されるバリデーター種別です。

name

必須。1 つのバリデーター種別は複数の実装を持つことができます。Runtime Manager エージェントで実装される ​jarSignatureValidator​ 種別の名前は ​defaultJarSignatureValidator​ です。

enabled

省略可能。バリデーターの実装を有効にするには ​true​、無効にするには ​false​ に設定します。デフォルト値は ​true​ です。

次の引数を使用して、JAR 署名バリデーターを設定します。

キー 説明

トラストストア

省略可能。デプロイメントに使用するすべての JAR ファイルの署名を検証するために使用する 1 つ以上の証明書を含むトラストストアのファイル名。デフォルトの場所は ​$MULE_HOME/conf​ です。相対パスを使用してトラストストアファイルを参照できます。パスを指定しないと、バリデーターは JVM で使用する cacerts トラストストアファイルを読み込みます。

truststoreType

省略可能。 JKS​ (デフォルト) または ​PKCS12​。

truststoreAlias

省略可能。トラストストアファイルに保存されている各証明書は、別名文字列で識別されます。このプロパティは、すべての JAR ファイルの検証に使用する単一の別名を指定します。別名を指定しなかった場合、バリデーターはトラストストアのすべての証明書を使用して JAR ファイルの署名を検証します。

truststorePassword

JKS では省略可能ですが、PKCS12 では必須です。トラストストアファイルのパスワード。

Mule Runtime Engine を起動する

Mule Runtime Engine を起動し、バリデーターが正常に設定されたことを確認します。コンソールに次のログが表示されます。

AgentApplicationValidatorService: Initializing Artifact Validator service
AgentApplicationValidatorService: Total validators loaded: 1
AgentApplicationValidatorService: Validators listed by type:
AgentApplicationValidatorService: Type: jarSignatureValidator Names: [defaultJarSignatureValidator]

ユースケース 1: 信頼できるコード署名者によって署名された JAR ファイルのデプロイ - 成功

必要なファイル:

  • app-signed-by-trust-signer-01.jar

  • signers-truststore.jks

ファイル: mule-agent.yaml

 services:
  mule.agent.artifact.validator.service:
    enabled: true
    validators:
    - type: jarSignatureValidator
      name: defaultJarSignatureValidator
      enabled: true
      args:
        truststore: signers-truststore.jks
        truststoreType: JKS
        truststorePassword: mulesoft

curl コマンド:

curl -X PUT 'http://localhost:9999/mule/applications/app-signed-by-trust-signer-01' \
     -H 'Content-Type: application/json' \
     -d '{"url": "file:/tmp/yahoo/app-signed-by-trust-signer-01.jar", \
          "configuration": {}
         }'

応答:

{
  "application": {
     "name": "app-signed-by-trust-signer-01"
   },
  "status": "Deployment attempt started"
}

コンソールログ:

AgentApplicationService: Deploying the app-signed-by-trust-signer-01 application from URL file:/tmp/yahoo/app-signed-by-trust-signer-01.jar
KeystoreUtils: Loading Jar Signers Truststore from '/private/tmp/trash/server-yahoo/conf/signers-truststore.jks'
JarSigner: Jar Signature verified: File /var/folders/sq/71l1hxdn171dpc46fn675yk80000gq/T/mule-received-artifact-5158252349422012120/app-signed-by-trust-signer-01.jar
AgentApplicationValidatorService: Application validation success for application: 'app-signed-by-trust-signer-01'

ユースケース 2: 信頼できるコード署名者によって署名された JAR ファイルをデプロイし、トラストストアの別名署名者で検証 - 成功

必要なファイル:

  • app-signed-by-trust-signer-01.jar

  • signers-truststore.jks

ファイル: mule-agent.yaml

 services:
  mule.agent.artifact.validator.service:
    enabled: true
    validators:
    - type: jarSignatureValidator
      name: defaultJarSignatureValidator
      enabled: true
      args:
        truststore: signers-truststore.jks
        truststoreType: JKS
        truststoreAlias: code-signer-alias-01
        truststorePassword: mulesoft

curl コマンド:

curl -X PUT http://localhost:9999/mule/applications/app-signed-by-trust-signer-01
     -H "Content-Type: application/json"
     -d '{"url": "file:/tmp/yahoo/app-signed-by-trust-signer-01.jar",\
          "configuration": {}
         }'

応答:

{
  "application": {
     "name": "app-signed-by-trust-signer-01"
    },
  "status": "Deployment attempt started"
}

コンソールログ:

AgentApplicationService: Deploying the app-signed-by-trust-signer-01 application from URL file:/tmp/yahoo/app-signed-by-trust-signer-01.jar
KeystoreUtils: Loading Jar Signers Truststore from '/private/tmp/trash/server-yahoo/conf/signers-truststore.jks'
JarSigner: Jar Signature verified using certificate alias 'code-signer-alias-01': File '/var/folders/sq/71l1hxdn171dpc46fn675yk80000gq/T/mule-received-artifact-3796117303843373481/app-signed-by-trust-signer-01.jar'
AgentApplicationValidatorService: Application validation success for application: 'app-signed-by-trust-signer-01'

ユースケース 3: 期限切れのコード署名者によって署名された JAR ファイルのデプロイ - 失敗

必要なファイル:

  • app-signed-by-expired-trusted-signer.jar

  • signers-truststore.jks

ファイル: mule-agent.yaml

services:
  mule.agent.artifact.validator.service:
    enabled: true
    validators:
    - type: jarSignatureValidator
      name: defaultJarSignatureValidator
      enabled: true
      args:
        truststore: signers-truststore.jks
        truststoreType: JKS
        truststoreAlias: expired-code-signer
        truststorePassword: mulesoft

curl コマンド:

curl -X PUT http://localhost:9999/mule/applications/app-signed-by-expired-trusted-signer \
     -H "Content-Type: application/json"
     -d '{"url": "file:/tmp/yahoo/app-signed-by-expired-trusted-signer.jar", \
          "configuration": {}
         }'

応答:

{
  "type": "class com.mulesoft.agent.exception.ApplicationValidationException",
  "message": "CertificateExpiredException - NotAfter: Wed Dec 22 14:45:54 AST 2021"
}

コンソールログ:

AgentApplicationService: Deploying the app-signed-by-expired-trusted-signer application from URL file:/tmp/yahoo/app-signed-by-expired-trusted-signer.jar
KeystoreUtils: Loading Jar Signers Truststore from '/private/tmp/trash/server-yahoo/conf/signers-truststore.jks'
MuleAgentSignatureValidator: There was an error validating the certificate with the alias 'expired-code-signer' - CertificateExpiredException Reason: 'NotAfter: Wed Dec 22 14:45:54 AST 2021'
ApplicationsRequestHandler: Error performing the deployment of app-signed-by-expired-trusted-signer. Cause: ApplicationValidationException: CertificateExpiredException - NotAfter: Wed Dec 22 14:45:54 AST 2021