none
Visual studioにて発行したC#アプリが、インストール時に"@@@.exe.config"にて失敗する RRS feed

  • 質問

  • IIS、およびVisual Studioについて質問いたします。


    [環境]
    <C#アプリ発行元サーバ>
    windows server 2016 バージョン1607(OSビルド 14393.2273)
    visual studio srofessional 2017 15.9.11
    IIS 10.0.14393.0
    <C#アプリインストール端末>
    windows 10 professional バージョン1803(OSビルド 17134.677)

    [現象]
    サーバにて、C#アプリを発行し、端末にインストールを実行すると、エラーで中断される

    エラーで中断されるファイルは、"[アプリ名].exe.config"と判明

    その時のIISログは以下
    --------------------
    2019-05-21 05:00:50 xxx.xxx.xxx.xxx GET /パス中略/[アプリ名].exe.config - 80 - xxx.xxx.xxx.xxx - - 404 7 0 21
    --------------------

    試しに、問題の[アプリ名].exe.configを、直接IEで開けるかを確認すると、以下の状況となる
    --------------------
    HTTP エラー 404.7 - Not Found
    要求フィルター モジュールが、ファイル拡張子を拒否するように構成されています。
    可能性のある原因:
    •要求フィルターが Web サーバーに対して構成され、この要求のファイル拡張子は明示的に拒否されています。
    対処方法:
    •applicationhost.config および web.config ファイルにある configuration/system.webServer/security/requestFiltering/fileExtensions 設定を確認します。
    --------------------

    エクスプローラーから、メモ帳にて開くことは可能



    [試したこと]
    1.applicationhost.config の、以下の行を削除 
    --------------------
    <add fileExtension=".config" allowed="false" />
    --------------------
    →インストール成功

    2.visual studioでの発行時、発行 - オプション にて、以下の設定にチェックを入れる
    --------------------
    ".deploy"ファイル拡張子を使用する
    --------------------
    →インストール成功

    1.セキュリティ的にまずいと思われる
    2.旧環境(windows server 2012)では、このチェックは入っていない
      また、発行後のファイルの拡張子がdeployとなってしまい、できれば避けたい


    [質問]
    上記の回避策(?)以外に、なにか他の方法がありますでしょうか?



    よろしくお願いいたします。
    2019年5月21日 6:55

すべての返信

  • 結論を申しますと、<証明書を自分で作成した>となります。

    https://mseeeen.msen.jp/code-signing-certificate/
    https://qiita.com/do-gugan/items/65ab430fa6f47450218d

    上記を参考に、以下2コマンドを実行
    makecert -n "CN=hogehoge,O=hogehoge,C=JP" -e 03/31/2028 -a sha256 -cy end -eku 1.3.6.1.5.5.7.3.3 -r -sv hogehoge.pvk hogehoge.cer
    pvk2pfx -pvk hogehoge.pvk -spc hogehoge.cer -pfx hogehoge.pfx -f -pi (上記で指定したパスワード)

    できあがった hogehoge.pfx を、期限の切れている証明書と置き換え、visual stuidoの、署名 > ファイルから選択 にて選択
    パスワードを聞かれるので、makecert実行時に入力したものを入力
    発行 > 発行オプション > 配置 の".deploy"ファイル拡張子を使用する は、チェック無し

    "証明書の有効期限さえ延ばせれば、発行できる"

    "deploy拡張子を付けるような方法は避けたい"

    ため、この方法を取りました。

    お目汚し失礼いたしました。

    2019年5月22日 7:44