質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.79%

MavenでビルドしたjarがJavaセキュリティによりブロックされてしまう

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 3
  • VIEW 3,346

score 9018

前提・実現したいこと

JavaのWebServiceを使用して、サーバ・クライアントのアプリケーションを作成しております。
開発中であるため、署名には自己証明書を使用したいと考えております。
NetBeans上ではサーバもクライアントも正常動作します。
ところが、Mavenでビルドし、署名したjarファイルを実際にLAN上のサーバに配置すると、
Javaのセキュリティによるブロックで起動することができません。

発生している問題・エラーメッセージ

LAN環境内の別PC上のTomcatにWebServiceのサーバ側jar、クライアント側.jarをそれぞれ配置し、
jnlpファイルを使って接続を試みたところ、以下のメッセージが出て実行できません。

Ignored exception: ExitException[ 3]com.sun.deploy.security.BlockedException: Javaセキュリティ設定により、このアプリケーションは実行できません。この動作はJavaコントロール・パネルで変更できます。

以前(5月頭くらい?)は同様の方法で自己証明書で署名、
Javaのセキュリティ設定による除外設定にURLを追加することにより、
警告は表示されますが動いておりました。
一字一句覚えているわけではありませんが、
信頼出来ない署名ですがいいですか?といったニュアンスの警告でした。

該当のソースコード

pom.xml(build部分抜粋、プロジェクト固有名は伏せております)
...
    <build>
        <resources>
            <resource>
                <targetPath>META-INF</targetPath>
                <directory>src</directory>
                <includes>
                    <include>jax-ws-catalog.xml</include>
                    <include>wsdl/**</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <id>unpack-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>unpack-dependencies</goal>
                        </goals>
                        <configuration>
                            <excludeScope>system</excludeScope>
                            <excludeGroupIds>junit,org.mockito,org.hamcrest</excludeGroupIds>
                            <outputDirectory>${project.build.directory}/classes</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <executions>
                    <execution>
                        <id>unpack-dependencies</id>

                        <phase>package</phase>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                        <configuration>
                            <executable>${java.home}/../bin/javafxpackager</executable>
                            <arguments>
                                <argument>-createjar</argument>
                                <argument>-nocss2bin</argument>
                                <argument>-appclass</argument>
                                <argument>${mainClass}</argument>
                                <argument>-srcdir</argument>
                                <argument>${project.build.directory}/classes</argument>
                                <argument>-outdir</argument>
                                <argument>${project.build.directory}</argument>
                                <argument>-outfile</argument>
                                <argument>${project.build.finalName}.jar</argument>
                            </arguments>
                        </configuration>
                    </execution>
                    <execution>
                        <id>default-cli</id>
                        <goals>
                            <goal>exec</goal>                            
                        </goals>
                        <configuration>
                            <executable>${java.home}/bin/java</executable>
                            <commandlineArgs>${runfx.args}</commandlineArgs>
                        </configuration>
                    </execution>
                </executions>  
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <compilerArguments>
                        <bootclasspath>${sun.boot.class.path}${path.separator}${java.home}/lib/jfxrt.jar</bootclasspath>
                    </compilerArguments>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.16</version>
                <configuration>
                    <additionalClasspathElements>
                        <additionalClasspathElement>${java.home}/lib/jfxrt.jar</additionalClasspathElement>
                    </additionalClasspathElements>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.jvnet.jax-ws-commons</groupId>
                <artifactId>jaxws-maven-plugin</artifactId>
                <version>2.3</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>wsimport</goal>
                        </goals>
                        <configuration>
                            <vmArgs>
                                <vmArg>-Djavax.xml.accessExternalSchema=all</vmArg>
                            </vmArgs>
                            <wsdlFiles>
                                <wsdlFile>localhost_8080/XXXXXXXXXXXXXXX/XXXXXXXXXXXXXXX.wsdl</wsdlFile>
                            </wsdlFiles>
                            <packageName></packageName>
                            <wsdlLocation>http://localhost:8080/XXXXXXXXXXXXXXX/XXXXXXXXXXXXXXX?wsdl</wsdlLocation>
                            <staleFile>${project.build.directory}/jaxws/stale/XXXXXXXXXXXXXXX.stale</staleFile>
                        </configuration>
                        <id>wsimport-generate-XXXXXXXXXXXXXXX</id>
                        <phase>generate-sources</phase>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>javax.xml</groupId>
                        <artifactId>webservices-api</artifactId>
                        <version>2.0</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <sourceDestDir>${project.build.directory}/generated-sources/jaxws-wsimport</sourceDestDir>
                    <xnocompile>true</xnocompile>
                    <verbose>true</verbose>
                    <extension>true</extension>
                    <catalog>${basedir}/src/jax-ws-catalog.xml</catalog>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jarsigner-plugin</artifactId>
                <version>1.4</version>
                <executions>
                    <execution>
                        <id>signing</id>
                        <goals>
                            <goal>sign</goal>
                            <goal>verify</goal>
                        </goals>
                        <phase>package</phase>
                        <inherited>true</inherited>
                        <configuration>
                            <removeExistingSignatures>true</removeExistingSignatures>
                            <archiveDirectory></archiveDirectory>
                            <includes>
                                <include>${project.build.directory}/${project.artifactId}.jar</include>
                            </includes>
                            <keystore>./XXXXXXXXXXXXXXX.keystore</keystore>
                            <storepass>XXXXXXXXXXXXXXX</storepass>
                            <keypass>XXXXXXXXXXXXXXX</keypass>
                            <alias>XXXXXXXXXXXXXXX</alias>
                            <verbose>true</verbose>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
...

試したこと

  • Javaコントロールパネルのセキュリティ設定で、該当のURLは除外しております。

  • NetBeansのJavaアプリケーションプロジェクトを作成、
    同じ署名を使用して、プロジェクトをビルド、署名、jnlpから実行したところ、
    署名の信頼性の警告は出ますが実行は可能でした。そのため、署名データに問題はないように思います。

  • 同じプロジェクトをJDK1.8.0_45でMavenビルドすると、警告はでますが実行できました。
    JDK1.8.0_91でMavenビルドすると、警告ではなくブロックされて実行できませんでした。

おそらく問題はMavenによるビルドと、NetBeansデフォルトのビルドの違いだと思われますが、
どこが原因なのか調べる方法すらわかっておりません。

補足情報(言語/FW/ツール等のバージョンなど)

Java (サーバ側)1.8.0_77 (クライアント側)1.8.0_91
Tomcat 8.0.27

ご助力よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • A-pZ

    2016/06/01 20:58

    解決に至らないかもしれませんが、警告の内容をわかる範囲で記載していただけますか。

    キャンセル

  • masaya_ohashi

    2016/06/02 09:13

    ほんの少しですが警告について追記いたしました。
    ご指摘ありがとうございました。

    キャンセル

回答 1

check解決した方法

+4

原因はjar内のMETA-INF/MANIFEST.MFに記載されたこの一行でした。

Permissions: sandbox


どうやらJava1.8.0_45より後のバージョンで、
javafxpackagerでビルドした際に上記の1行が追記されるようになったようです。
この表記があると、JNLPに以下のようなセキュリティ表記を加えても、
MANIFEST.MFの表記が優先されてしまうようで、それでブロックされているようです。

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

そこで、javafxpackagerのargumentsタグに以下のタグを追加したところ、
無事に(相変わらずセキュリティ警告はでますが)動作するようになりました。

<argument>-manifestAttrs</argument>
<argument>Permissions=all-permissions</argument>

NetBeansでMaven-JavaFXアプリケーションを作成するとこの罠に陥るのでお気をつけ下さい!

※補足ですが、javafxpackagerはjavapackagerと名前がかわり、
javafxpackagerは非推奨となっております。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.79%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る