概要
CorDappsへの署名
CorDappsをプロダクションモードで起動する場合はCorDappsに署名が必要です。
(プロダクションモードとは、node.conf中の「devMode」が「false」になっている状態を指します)
デフォルトでは、JAR ファイルはCorda 開発証明書によって署名されています。しかし、これはセキュリティ上リスクになりますので、必ず独自の署名書で署名してください。
本稿では、 Java Runtime Environmentに付属しているkeytoolを使用して、署名鍵を作成し、それを用いてCorDappsに署名をする手順について扱います。
導入
環境要件 & 前提
本稿は、以下の環境で実行しています。
・Java 1.8.0_221
・IntelliJもしくはgradleがインストールされていること。(本稿はIntelliJを使用します)
JKSの作成
keytoolコマンドを実行し、JKS形式のキーストアを生成します。(記事可読性のため、開業していますが実際に実行するときはワンライナーで実行してください)
keytool -keystore jarSignKeystore.jks -keyalg RSA -genkey
-dname "OU=, O=, L=, C="
-storepass [password] -keypass [password] -alias cordapp-signer
-keystore :生成する任意のキーストア名を入力してください。
-keyalg :「RSA」を指定します。
-genkey :鍵のペアの生成
-dname :識別名を記載します。
-storepass :キーストアのパスワードを指定します。
-keypass :秘密鍵のパスワードを指定します。
-alias :エイリアスとして任意の文字列を指定します。
以下実行例です。
keytool -keystore jarSignKeystore.jks -keyalg RSA -genkey
-dname "OU=TEST_UNIT, O=TESTNET, L=London, C=GB"
-storepass password123 -keypass password123 -alias cordapp-signer
JKSを PKCS12 に変換
上記で作成したJKSをPKCS12に変換します。なお、以下のコマンドを実行すると、storepassおよび
keypassを求められますので、JKS作成時に設定した値を入力してください。以下、実行例です。
keytool -importkeystore -srckeystore jarSignKeystore.jks
-destkeystore jarSignKeystore.pkcs12 -deststoretype pkcs12
-importkeystore :ソースキーストアからターゲットキーストアへインポートすることを指します。
-srckeystore :ソースキーストア(上記で作成したJKS名)を設定します。
-destkeystore :作成するキーストア名を設定します。
-deststoretype :作成するキーストアのタイプを指定します。
build.gradleに追加
上記で作成したPKCS12(jarSignKeystore.pkcs12)をコンパイル環境に格納します。
そして「contracts」や「workflows」フォルダの「build.gradle」にsigningのタスクを追加します。
※keystoreやstorepassやkeypassは、build.gradleに直接定義するのではなく、 gradle.properties内に変数として定義することを推奨します。以下build.gradleとgradle.propertiesの実装例です。
contracts/build.gradle
cordapp {
targetPlatformVersion corda_platform_version
minimumPlatformVersion corda_platform_version
contract {
signing {
enabled true
options {
keystore getProperty('jar.sign.keystore')
alias 'cordapp-signer'
storepass getProperty('jar.sign.password')
keypass getProperty('jar.sign.password')
storetype 'PKCS12'
}
}
//省略
gradle.properties
jar.sign.keystore=C:\\Users\\sample\\cordapp-sample-one\\contracts\\keystore\\jarSignKeystorepartya.pkcs12
jar.sign.password=password123
CorDapps作成
プロジェクトのルートディレクトリにて以下のコマンドを実行し、CorDappsを生成します。
./gradlew clean deployNodes
CorDappsの署名確認
生成したCorDappsに署名がされていることを確認するには、以下のコマンドを実行します。
署名がされている場合は、「jar verified.」と出力されます。
jarsigner --verify [署名確認したいCorDappsのパス]