2

オフィスで使用される小さな javafx2 アプリケーションがあります。Firefox から実行する人もいれば、デスクトップ アプリとして実行する人もいます。ウェブスタートは素晴らしいです。

現在のアプローチは、これを jnlp ファイルに追加したことです。

<security>
  <all-permissions/>
</security>

次に、keytool を使用してキーストアにキーを作成します。

keytool -genkey -keystore yourKeystore -alias keyname

そして、jarsigner を使用して、ユーザーの PC にあるすべての jar ファイルに署名します。

jarsigner -keystore ./myapp.keystore -storepass xxx -keypass yyy <path to jar file> keyname

そのため、ユーザーはデスクトップのショートカット ファイル (jnlp ファイル) を使用してアプリを起動するか、Firefox でアプリを参照します。これはうまく機能しますが、最近では次のようなダイアログが表示されます。

UNKNOWN 発行元によるアプリケーションの実行は、将来のリリースでブロックされます

その将来のリリースが出たらどうなるか心配です。

私は、このすべてのコード署名について深く理解していません。アプリのリリース者が認証局によって認識されている会社/個人であることを証明するために使用されるファイルにバイナリデータを埋め込むことで機能することを私は知っています(これはjarsignerがAFAIKで行っていることです)。証明書は、Windows や Linux などの OS、Firefox や Safari などの Web ブラウザによって認識され、Java もユーザーとシステムの 2 つのレベルで証明書を認識します。Windows や Linux などの OS でデフォルトで認識される広く受け入れられている認証局 (Verisign など) があります。ウェブブラウザも一部の認証局を認識することは知っていますが、それらが認識するリストは OS が認識するリストとは異なる可能性があると思います。Javaもいくつか認識していると思いますが、何がわかりません。また、~/.java/deployment/deployment.properties、deployment.system.security.trusted.certs でキーストアを指定することにより、システム レベルで構成されたキーストアを Java で使用できることも知っています。証明書にお金を払いたくない場合は、独自の証明書を作成できます (これは私が行っていたことです)。したがって、証明書は UNKNOWN 発行元からのものです。deployment.system.security.trusted.certs を介してキーストアを指定すると、オフィスでこの問題が解決することを期待していましたが、明らかに解決していません。彼はこの証明書を認識しています。そこで、Windows で makecert を使用して証明書を作成し、GPO 経由でクライアント PC にプッシュできるようにすることを考えています。私の理解では、これにより、OS によって認識される証明書が作成されます。しかし、makecert で作成された証明書が、たとえば Windows、Firefox、および Java の verisign 証明書と同じように扱われるかどうかはわかりません。また、UNKNOWN が Java 内のリストを参照しているのか、それとも認証局が OS によって認識されていないという事実を参照しているのかはわかりません。

私の質問:

  1. 上記の説明で私が犯した間違いを誰かが修正できれば幸いです。私は何かを誤解していると思いますが、何がわかりません。
  2. 証明書にお金を払わない限り、Webstart が機能しないとは信じられません。私たちが必要としているのは、システム管理者が、オフィスの PC に特定の証明書を認識させたいと言うことができるメカニズムだと思います。将来これを行う方法を知っている人はいますか?
  3. 証明書を購入する必要がある場合、何に注意すればよいか、またはそれが一般的にどのように機能するかを誰かに教えてもらえますか? jarsigner を同じように使用できますか?
  4. 証明書を購入する必要がある場合、選択できる認証局のリストはありますか? これは管理上のオーバーヘッドになるため、明らかに私は最も安いものを選びたいと思っています。

ご協力ありがとうございました。

4

1 に答える 1

0

JRE7u40 と JRE8 で動作する私のセットアップは次のとおりです。

認証局 (CA) の自己署名証明書があります。この証明書は、システムによって信頼されている必要があります (たとえば、Java コントロール パネル / セキュリティ / 証明書 / 署名者 CA に追加しますが、CA を信頼できるようにする方法は他にもある場合があります)。

次に、CA によって署名されたコード発行者証明書を取得します。この証明書を使用して、すべてのコード (jar) に署名します。

さらに、コードにすべてのアクセス許可が必要な場合は、これらの MANIFEST.MF 属性を QDH の最小値としてお勧めします (覚えていれば、JRE7u40 以降)。

Permissions: all-permissions 
Codebase: * 
Trusted-Library: true 
Trusted-Only: true

このようなアプリケーションを初めて実行すると、コード署名者証明書が CA によって取り消されていないことをランタイムが確認できないため、セキュリティ警告が引き続き表示されます。

ただし、この発行元 (コード署名者証明書) を永続的に受け入れるオプションが追加されました。そうすると、コード署名者証明書が信頼できる発行者 (Java コントロール パネル / セキュリティ / 証明書 / 信頼できる証明書) に追加されます。そのような警告をもう一度見てください。

この手順を回避したい場合は、CA インフラストラクチャを適切にセットアップして、証明書失効の検証をサポートする必要があると思います。CA証明書にいくつかの追加属性が含まれており、特別な証明書失効サービスが利用できると思います. イントラネット展開の場合は、それをスキップできます。

于 2013-11-09T16:03:25.873 に答える