CorDappsへの署名(CorDapps Signing)

概要 

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のパス]

 

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています