web-dev-qa-db-ja.com

JWSデプロイメント用の信頼できる証明書でJARファイルに署名する

オープンソースプログラムWPCleanerを開発しました。これはJava Web Startを通じて配布されています。現在のバージョンは http://site4145.mutu.sivit.org/WikiCleanerで入手できます。 /WikiCleaner.jnlp

最近のJavaの更新により、JavaアプリケーションからJava Web Startを使用してアプリケーションにいくつかの権限を付与する必要がある場合)のデプロイがますます困難になっています(設定の書き込み、他のWebサイトへのアクセス、...)

私のアプリケーションは自己署名されていましたが、以前は問題ありませんでしたが、新しいアップデートでは、ユーザーがアプリケーションを実行するたびに、必要に応じて一度だけでなくすべてを受け入れる必要があります。そのため、アプリケーションの署名には信頼できる証明書を使用することにしました。

私はCertumから1つ取得しました(どうやら、オープンソース開発者は無料です)。次のディスカッションに従ってください。 オープンソースプロジェクトのコード署名証明書?

この証明書で署名された新しいjarファイルを生成しました(jarファイルは http://site4145.mutu.sivit.org/WikiCleaner/WikipediaCleanerTest.jar で入手できます)が、まだ問題があります。 JWSを介してアプリケーションを起動すると、Javaは引き続きアプリケーションを信頼できない警告ウィンドウを表示します。エディタは依然としてUNKNOWNとして表示されますが、メッセージ、Centrumからの新しい証明書が使用されています。

誰かが私が間違っていることについてアイデアを持っていますか?信頼できるCA(CentrumはJava cacerts)にあるようです)からの証明書があれば、ユーザーは一度にすべての証明書を受け入れることができると思いました。

ありがとう

PS:jarsigner -verifyを実行すると、「このjarには、証明書チェーンが検証されていないエントリが含まれています」という警告が表示されます。

17
NicoV

私は最終的にこの手順に従ってそれをやることができたと思います:

  • Certumから提供された証明書をWebサイトのインターフェースからChromeにインストールしました
  • Chrome(設定、証明書の管理、エクスポート、秘密鍵のエクスポート、PKCS#12、...)から.pfxとして秘密鍵をエクスポートしました
  • KeyTool GUI(keytoolsのJavaフロントGUI)を使用して完全なp12を作成しました。Certumルート証明書を信頼できる証明書としてインポートし、中間証明書を信頼できる証明書としてインポートし、.pfxをキーペアとしてインポートしました
  • このp12で瓶に署名しました

私にとってはうまくいくようですが、他のユーザーからのフィードバックが彼らにとってもうまくいくことを確認するのを待っています。

編集:もう一度Chromeから証明書をエクスポートしようとしましたが、エクスポートに証明書チェーンを含めるオプションがあることがわかりました。これを行う場合、後でKeyTool GUIを使用する必要すらありません。この新しいp12で署名されたテストバージョンを再デプロイしました。

  • Certumから提供された証明書をWebサイトのインターフェースからChromeにインストールしました
  • プライベートキーを.pfxとしてChrome(設定、証明書の管理、エクスポート、プライベートキーのエクスポート、PKCS#12 +証明書チェーンを含める、...)からエクスポートしました
  • このp12で瓶に署名しました
6
NicoV

[Update 2017]Certumからのオープンソースコード署名は、暗号化フラッシュカードを秘密鍵として使用するため、証明書のアクティブ化とインストールのためにプラグインする必要があります。コード署名と同様に。キーの価格は125ドル(+送料)で、1年間の証明書だけで40ドルです。あなたは割引を求めることができます。


次に、jarファイルに最初から署名するための次の手順を示します。

指示

英語での指示は見つけにくく、最新ではありません。次の手順は、これら2つのドキュメントに基づいています。

証明書を作成、アクティブ化、インストールします:

  1. "OpenSource Code Signing"セクション の "Certum Certification" Webサイトにアクセスして、証明書を注文します。
  2. 暗号化フラッシュカードを受け取ったら(15日かかりました)、プラグを差し込み、カードからドライバーとproCertum CardManagerソフトウェアをインストールします。
  3. Certumアカウントに移動し、新しく注文した証明書のアクティベーションプロセスに従います。

ヒント:CryptoAgent Java Web Startアプリケーションは、JDK(JREではなく)<9(したがって、JDK 7または8)。

  1. 公式書類(IDカード、家賃請求書など)と確認手続きのメールが届きます。
  2. アクティベーションに必要なドキュメントと情報を送信します。証明書のインストールを求める別のメールが届きます(検証は1時間以内に行われました)。
  3. 手順による暗号化カードへの証明書のインストール(= /// =)カードへの証明書の保存(英語の説明、パート4を参照)

ファイル「bundle.pem」を取得します

このファイルは、アプリケーションに署名するときに有効な証明書チェーンを取得するために必須です(ポーランド語の手順のパート7.1.2を参照)。

基本的に、プレーンテキスト形式のファイルに1)証明書を連結し、2)Certumコード署名CA SHA2公開鍵を連結して構成されます。

  1. proCertum CardManager>>Read Card>>タブを開くCommon>>選択証明書を入力し、[詳細を表示]をクリックします
  2. 証明書をエクスポートします:x509-base-64
  3. Certumコード署名CA SHA2 をPEM形式でダウンロードします(- ルート証明書のリスト Certumから)。
  4. これらの2つの証明書を連結して、テキストファイル「bundle.pem」を作成します(最初に証明書、次にCertum証明書)。

jarsignerでjarファイルに署名します

  1. 英語での手順のポイント7.2で説明されているように、「provider.cfg」ファイルを作成します。
  2. 証明書のaliasが必要です(所有者名は必要ありません))あなたの瓶に署名します。これを取得するには、次のコマンドを実行します。
keytool -list -v -keystore NONE -storetype PKCS11 -providerClass Sun.security.pkcs11.SunPKCS11 -providerArg "provider.cfg" -storepass "[your_pin]"
  1. aliasprovider.cfgおよびbundle.pemを取得したらファイルの準備ができたら、次のコマンドでjarに署名するだけです。
jarsigner -keystore NONE -certchain "bundle.pem" -tsa "http://time.certum.pl" -storetype PKCS11 -providerClass Sun.security.pkcs11.SunPKCS11 -providerArg "provider.cfg" -storepass "[your_pin]" "[your_code].jar" "[your_alias]"

個人的には、Antスクリプトを使用してアプリケーションのjarファイルに署名しています。 ANTプロジェクトの signjar task を参照してください。

10
Eric David

他のユーザーからのフィードバックが他のユーザーにも機能することを確認するのを待っています。

ファイルのJaNeLAに基づく-有効なJNLP。最も重要なWikiCleanerTest ..の既知の発行元.

enter image description here

したがって、「発行者を識別するためにここで機能するようだ」という結果が1つあります。すばらしい仕事で、プロセスの説明に感謝します。

以前に見たものよりもはるかにうまく機能します。 :P


Jarsigner -verify

s     292828 Sun Oct 20 17:57:58 EST 2013 META-INF/MANIFEST.MF
      292645 Sun Oct 20 17:57:58 EST 2013 META-INF/WPCLEANE.SF
        2017 Sun Oct 20 17:57:58 EST 2013 META-INF/WPCLEANE.RSA
           0 Sun Oct 20 17:57:52 EST 2013 META-INF/
           0 Wed Feb 11 15:04:50 EST 2009 META-INF/maven/
           ..
           0 Sun Oct 20 17:57:32 EST 2013 org/xnap/commons/i18n/
sm      2837 Thu Sep 09 16:00:54 EST 2004 META-INF/info.xml
..
sm       214 Wed Feb 11 00:57:02 EST 2009 org/xnap/commons/i18n/LocaleChangeListener.class

  s = signature was verified 
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  i = at least one certificate was found in identity scope

jar verified.

Warning: 
This jar contains entries whose certificate chain is not validated.

Re-run with the -verbose and -certs options for more details.

私は警告を理解します:

このjarには、証明書チェーンが検証されていないエントリが含まれています。

..無視できます。

JaNeLAレポート

JaNeLA は1つのエラーを示します。

JaNeLA Report - version 11.05.17

Report for http://site4145.mutu.sivit.org/WikiCleaner/WikiCleaner.jnlp

cvc-complex-type.2.4.a: Invalid content was found starting with element 'homepage'. One of '{description, icon, offline-allowed, shortcut, association, related-content}' is expected.
cvc-complex-type.2.4.a: Invalid content was found starting with element 'homepage'. One of '{description, icon, offline-allowed, shortcut, association, related-content}' is expected.

XML encoding not known, but declared as utf-8
Codebase + href 'http://site4145.mutu.sivit.org/WikiCleaner.jnlp' is not equal to actual location of 'http://site4145.mutu.sivit.org/WikiCleaner/WikiCleaner.jnlp'.
Desktop icons were subject to bug nnnn in earlier J2SE versions
Optimize this application for off-line use by adding the <offline-allowed /> flag.
'short' description is longer than 'default' description.
Downloads can be optimized by specifying a resource size for 'WikipediaCleaner.jar'.
The resource download at WikipediaCleaner.jar can be optimized by removing the (default) value of download='eager'.
Lazy downloads might not work as expected for WikipediaCleaner.jar unless the download 'part' is specified. 
Resource type png of resource commons-nuvola-web-broom.png is not one of the allowable types of gif, jpg, jpeg.
Downloads can be optimized by specifying a resource size for 'commons-nuvola-web-broom.png'.
Icon loading & use can be optimized by specifying the width and height for commons-nuvola-web-broom.png

検証済みのJNLP、および以下のTweakを使用した修正バージョンを参照してください。

発売

しかし、ここに本当の悪いニュースがあります:

UNKNOWN publisherUNKNOWN publisher - More Info.

証明書の詳細は次のとおりです。

  • Nicolas Vervelle(ニコラスヴェルベル)

    • 件名:CN = Nicolas Vervelle、OU = WikipediaCleaner、O = WikipediaCleaner、L = Paris、ST = France、C = FR

古いJava

ここに私にはわからない奇妙な警告があります。

Out Of Date Java

アプリ。は1.5.0+を要求しているため、バージョン1.7+は問題なく受け入れる必要があります。
1.6を要求していると主張しています(おそらく、1.5ランタイムがインストールされていないためです)。私が考えられる唯一のことは、警告をトリガーすることは、不要なマイクロバージョンを含めることです。

JNLP

以下は、上記で検証されたJNLPです。

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.5+" codebase="http://site4145.mutu.sivit.org/WikiCleaner" href="WikiCleaner.jnlp">
  <information>
    <title>WPCleaner</title>
    <vendor>User:NicoV</vendor>
    <description>WPCleaner</description>
    <description kind="short">A tool for Wikipedia maintenance</description>
    <homepage href="http://en.wikipedia.org/wiki/WP:WPCleaner"/>
    <icon href="commons-nuvola-web-broom.png"/>
    <shortcut>
      <desktop/>
    </shortcut>
  </information>
  <security>
    <all-permissions/>
  </security>
  <resources>
    <j2se version="1.5.0+" Java-vm-args="-Xmx512M"/>
    <jar href="WikipediaCleaner.jar" download="eager" main="true"/>
  </resources>
  <application-desc main-class="org.wikipediacleaner.WikipediaCleaner"/>
</jnlp>

推奨される代替品を以下に示します。 JaNeLA(無視できるバー警告)によると有効です。また、最小バージョン属性への別のTweakも含まれています。

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.5+" codebase="http://site4145.mutu.sivit.org/WikiCleaner" href="WikiCleaner.jnlp">
  <information>
    <title>WPCleaner</title>
    <vendor>User:NicoV</vendor>
    <!-- Should be here.. -->
    <homepage href="http://en.wikipedia.org/wiki/WP:WPCleaner"/>
    <description>WPCleaner</description>
    <description kind="short">A tool for Wikipedia maintenance</description>
    <icon href="commons-nuvola-web-broom.png"/>
    <shortcut>
      <desktop/>
    </shortcut>
  </information>
  <security>
    <all-permissions/>
  </security>
  <resources>
    <!-- the micro-version request might be triggering the 
    Out-Of-Date Java version warning -->
    <j2se version="1.5+" Java-vm-args="-Xmx512M"/>
    <jar href="WikipediaCleaner.jar" download="eager" main="true"/>
  </resources>
  <application-desc main-class="org.wikipediacleaner.WikipediaCleaner"/>
</jnlp>
3
Andrew Thompson

Linuxでは、次の手順でうまくいきました。これは、Eric Davidの回答に基づいています。

証明書を取得

「Certum Certification」のWebサイトの「OpenSource Code Signing」セクションにアクセスしてください。証明書を購入し、作成手順に従います。

コード署名用の公開鍵を取得

Certumコード署名CAの公開キー 、おそらくCA SHA2キー cscasha2.cer を取得します。

証明書をpkcs12形式に変換します

  • 独自の証明書(Certumから取得したもの)をFirefoxにインポートします。
    メニュー項目設定-詳細-証明書-証明書を表示します。
  • CA SHA2公開鍵(Certumが証明書に署名するために使用)をインポートします。
    タブ証明書。当局-輸入。
  • 確認。確認されたことを伝える必要があります。
    タブ自身の証明書-表示。
  • 証明書をエクスポートします。
    タブ独自の証明書-保存-pkcs12として(たとえば、mycert.p12に)

pkcs12形式からjks形式に変換します

Pkcs12ファイルで使用されているエイリアスを見つけます。これは、「unizeto Technologies s.a. id von open source developer、YOUR NAME」に似ています。

keytool -list -v -storetype pkcs12 -keystore mycert.p12 > out.txt
grep Aliasname out.txt

次に、pkcs12ファイルをJavaのjks形式に変換します。このステップは省略できますが、一度完了すると便利です。

keytool -importkeystore -srckeystore mycert.p12 -srcstoretype pkcs12 -srcalias "ALIASNAME" -destkeystore mycert.jks -deststoretype jks -deststorepass PASSWORD -destalias SHORTALIAS

jarファイルに署名します

Webstartユーザーへの警告を回避するには、jarマニフェストファイルに次の属性を含める必要があります。

  • アプリケーション名:APPNAME
  • 権限:すべての権限
  • コードベース:URL
  • Application-Library-Allowable-Codebase:URL

次のコマンドを使用して、jarファイルに署名します。

jarsigner -keystore mycert.jks -tsa http://time.certum.pl FILENAME.jar SHORTALIAS
2
qwert2003

私はこれで私の今日の同じ問題を解決しました:

Manifest-Version: 1.0
Trusted-Library: true
Application-Library-Allowable-Codebase: *
Trusted-Only: false
Application-Name: My app
Permissions: all-permissions
Created-By: 1.6.0_16 (Sun Microsystems Inc.)
Caller-Allowable-Codebase: *
Codebase: *
0
Pignic

前述のように、 ここ 、不明な発行者の警告を削除するには、jarの署名に使用した証明書をJavaコントロールパネルの署名者jarに追加します:設定Java->セキュリティ->証明書の管理->署名者JARオプション->インポート。

0
FHeNuS