EDIT(7/7/2016)-投稿の最後の追加を参照してください
私は、MicrosoftがWindows実行可能ファイルのSHA1コード署名証明書の使用を非推奨にすることに関する問題を鋭く追っていました( http://social.technet.Microsoft.com/wiki/contents/articles/32288.windows- authentication-of-authenticode-code-signing-and-timestamping.aspx )。
現在、2016年に入っており、間もなくコードに署名してリリースする必要があるため、コード署名証明書をSHA256証明書にアップグレードしないと問題が発生することを確認しようとしています。ただし、予想される問題を示すことはできません。
SHA1証明書を使用して一部の実行可能ファイルに(今日、2016年に)署名し、AppLockerを構成して署名付き実行可能ファイルのみを実行しました(これを確認しました-未署名の実行可能ファイルは実行できません)。ただし、新しくSHA1で署名された実行可能ファイルを引き続き自由に実行できます。さらに、IEでWebサーバーからこれらのファイルをダウンロードしても、「警告」は表示されません(以前のように予想)-セキュリティスキャンにより、ファイルに問題がないことが返されます!
Windows 7でテストを実行しています。
実際にどのような問題が発生するはずですと私は経験しますか?
(とにかく、単にSHA256にアップグレードしないだけなのか疑問に思っている場合は、複数の理由があります。1つは官僚的ですが、もう1つは、現在デュアル署名をサポートしていないVBSスクリプトにも署名しているという事実です)。
EDIT(7/7/2016)さて、MicrosoftがようやくIEにアップデートを公開したようです。 SHA-1証明書でのみ署名された実行可能ファイルをダウンロードすると警告するEdge!基本的に、IE11.0.30以降、SHA-1(SHA-256ではない)証明書で署名された実行可能ファイルを2016年1月1日以降にダウンロードすると、次のいずれかの警告が表示されます。
2017年1月1日の締め切りに備えて、Microsoftはついに警告を出し始めていると思います。現時点では、これらの警告を除いて、他の変更はないことに注意することが重要です。ファイルは問題なく実行されます。もちろん、他のブラウザでダウンロードしても問題は発生しません。
2016年1月1日以降にSHA-1証明書を使用して署名された実際のダウンロードの例を見つけました。 Windows 10でEdgeを使用してKeePass 2.31をダウンロードしました。
エッジは私に「このファイルの署名は壊れているか無効です」と言っています。
右クリックして[実行]を選択するか、Windowsエクスプローラーでファイルをダブルクリックすると、SmartScreenがファイルをブロックします。
チェックボックスをオンにして[実行]をクリックすると、ファイルが正常に実行されます。 UACの警告には、適切に署名された実行可能ファイルと同様に、発行元の名前が表示されます。
SmartScreenがファイルをブロックしているときに[実行]をクリックすると、「Webのマーク」がファイルから削除されます。 Windowsエクスプローラでもう一度ファイルをダブルクリックしても、ファイルがブロックされなくなりました。
Windowsエクスプローラの[デジタル署名の詳細]ダイアログにも、署名はOKと表示されます。これは、ファイルに「Webのマーク」がまだある場合(つまり、SmartScreenフィルターの[実行]ボタンを使用する前)でも実行します。
ファイルには実際には2つの署名があります。 1つ目は署名にSHA-1を使用し、2つ目は署名にSHA-256を使用します。しかし、重要なことに、どちらもSHA-1証明書を使用して作成されました。これは、Windows 7以降でダウンロードされたファイルに障害があることを示しています。また、両方の署名にSHA-1のタイムスタンプが付けられます。 Windows 10では、2017年1月1日以降にダウンロードされたファイルの問題が発生します。
[デジタル署名の詳細]ダイアログでは、ファイルに「ウェブのマーク」があるかどうかが考慮されていないようです。このファイルの両方の署名について、「このデジタル署名は問題ありません」と表示されます。 ファイルが適切に署名されているかどうかを実際にテストするには、顧客と同じようにWebサイトからファイルをダウンロードする必要があります。
8月以降に更新されていない元のWindows 10の仮想マシンスナップショットと、11月以降に更新されていない1511リリースの別のスナップショットで同じダウンロードをテストしても、警告は出されません。 1511 VMが最新であると確認されるまでアップデートを確認してインストールすると、上記の警告が表示されます。以前の回答でSHA-1非推奨はWindows Updateを介してプッシュされます。したがって、これはごく最近のアップデート、おそらく1/1/16以降のアップデートのようです。PCにすべての最新のセキュリティアップデートがあることを確認してくださいダウンロードのテスト
これは、より詳細なコメント/事実発見エントリです。それ自体は完全な答えではありません。
私にもわかりません。それはかなり混乱しています。しかし、エリックローレンスも混乱しているので、私はそれを理解しなくてもそれほど悪くはありません。以前はInternet Explorerの開発者でしたが、現在はGoogle Chromeで動作しています。そして、彼は証明書についての自分の道を知っています。 (つまり、彼がそれを取得していない場合、私はそれが本当にIS紛らわしいです)と言う傾向があります。(そして 彼はStackExchangeにもいます )
ここに彼のコメントを見てください:
https://blogs.windows.com/msedgedev/2015/11/04/sha-1-deprecation-update/ (アーカイブ ここ 。)
また注目に値する:この宝石はここにあります:
エリック・ローレンス
リンクしているKBには、MD5ベースのAuthenticode署名(証明書ではなくコードのハッシュ)を廃止する予定はないということです。それは…無責任だ。
怖い。残念ながら、そのコメントに対するマイクロソフトの回答はありません。
そして、TechNet Wikiサイトに別のコメントを残しました: http://social.technet.Microsoft.com/wiki/contents/articles/32288.windows-enforcement-of-authenticode-code-signing-and -timestamping.aspx (アーカイブ ここ 。)
EricLaw [元MSFT] 2015年11月4日午前9時23分
このテキストはかなり混乱します:「コード署名ファイルハッシュ:マイクロソフトでは、CAがSHA-2の使用に移行することを要求していません。また、Windowsはこれらの証明書にポリシーを適用しません。 SHA1に対するプリイメージ攻撃が実行可能になった場合、システムがこれらの証明書を信頼する方法を再評価します。」AuthenticodeファイルのハッシュはCAによって生成されず、署名は「証明書」ではありません。
繰り返しになりますが、マイクロソフトからの回答はありません。そして、彼がコメントを混乱させる唯一のコメントではありません。
システムクロックで遊びますか?失敗を再現したい場合は、次の手順を試してください TechNet Postの「Graham Bloice」リスト :
テストの結果、IEを介してActiveXコンポーネントをインストールするために使用されている既存のSHA1署名cabファイルは、レジストリで日付を調整することにより、非推奨の日付をすぐにインストールできませんでした) cab署名タイムスタンプは(移動された)非推奨日より前の日付です。Win10は失敗しませんが、Win 7、Win 8.1、Server 2K12およびServer 2K12 R2はすべてテストで失敗します。
これは、廃止予定日の前にタイムスタンプが付けられた署名が2020年まで有効であることを示す廃止予定の通知と矛盾しています。
繰り返しますが、マイクロソフトからの回答はありません。
AuthentiCodeに関する詳細なブログ投稿:2014-09-04、Eric Lawrence、MSDNブログ Authenticodeコード署名の注意事項
2015-12-28、@ EricLaw、 https://Twitter.com/ericlaw/status/68148757822312448189
関連質問:2012-09-20、 Windows 8のMD5でのコード署名
Didier Stevens、2015年12月29日、 SHA256コード署名とMicrosoft (アーカイブ ここ 。)
これにより大幅にクリアされます:
まず、sha-1シグネチャを持つすべての実行可能ファイルで信頼が失われることはありません。これは、「Mark of the Web」属性があり、タイムスタンプまたは2016年1月1日以降のタイムスタンプがない実行可能ファイルでのみ発生します。
タイムスタンプ付きのAuthenticode署名には、ユーザーが制御できる3つのダイジェストがあります。
証明書のダイジェスト。最近購入した証明書はSHA-256を使用します。ほとんどのCAは2014年にSHA-256証明書の発行に切り替えました。彼らは特別な要求でのみSHA-1証明書を提供します。証明書を確認する簡単な方法は、エクスプローラーで証明書で署名した.exeを右クリックし、[デジタル署名]タブ、[詳細]ボタン、[証明書の表示]ボタン、[詳細]タブに移動することです。署名のアルゴリズムは「sha256」でなければなりません。 Windows XP SP3はSHA-256証明書をサポートする最も古いWindowsバージョンです。リンクしたドキュメントに記載されているポリシーは「Windows [7以降]はSHA1を信頼しています1/2016)およびMark of the WebファイルのSHA-2(任意のタイムスタンプ)。」
署名自体のダイジェスト。 [デジタル署名]タブで既存の署名を確認できます。 Windows 7以降では、ダイジェストアルゴリズムが直接表示されます。 Windowsのどのバージョンでも、[詳細]ボタンの[詳細設定]タブをクリックして、ダイジェストアルゴリズムを確認できます。 signtool.exeを使用する場合、/fd sha256
引数を使用してSHA-256に設定できます。 Windows 7は、SHA-256署名をサポートする最も古いバージョンのWindowsです。このため、規定されたポリシーは「SHA-1プリイメージが可能になるまで変更しない」です。でも MD5署名は引き続き受け入れられます 。
タイムスタンプのダイジェスト。 signtool.exeを使用する場合は、/tr
引数をRFC 3161タイムスタンプサービスのURLとともに使用し、/td sha256
を使用してSHA-256を要求する必要があります。 Windows 7は、SHA-256タイムスタンプをサポートする最も古いバージョンのWindowsです。このため、規定されたポリシーは「Win 10以降では、Mark of the Webファイルのために2017年1月1日にブロックされます」です。
要約すると、SHA-256証明書を取得した場合、SHA-1タイムスタンプを持つその証明書を使用する単一のSHA-1署名は、現在Windows 10で受け入れられていますXP SP3〜Windows 10。/1/2017では、Windows 10とVistaをサポートする場合、またはXP SP3。
減価償却ポリシーは、Windows Updateを通じてWindows 7以降に適用されます。更新が無効になっている場合、減価償却は行われません。 Windows 7では、SHA-1証明書を含む署名が無効として扱われるため、インターネットからダウンロードしたファイルを実行すると、より深刻な警告が表示されます。
私からの追加情報もいくつかありますが、今日これらすべてに問題が発生したため、半日かかりました。
「このファイルの署名が壊れているか無効です。」を受け取りました。エッジからも。 Windowsから、(SHA256で既に署名されている)ファイルは安全ではなく、正しい証明書情報(「不明な発行元」のみ)を表示できないというメッセージが表示されました。
StartSSLコード署名証明書を使用しており、12月に新しいSHA256証明書に切り替えました。私たちが気づかなかったことは、signtoolが署名プロセス中のすべての中間(!)証明書も含むことです。判明しました:新しい証明書が利用可能であるにもかかわらず、古い証明書(まだSHA1を使用しています)のローカルにキャッシュされた中間証明書を使用します。この証明書を削除して更新した後、すべてが期待どおりに機能しました。
したがって、チェーン内のすべての証明書もSHA256であるかどうかを確認してください。そうしないと、署名プロセス中に中間体が含まれるため、すべてが壊れます。
Windowsアプリで同じ問題が発生しました。だからここにあなたのためのいくつかの情報があります:
A)あなたが指摘したように、_SHA-1
_ハッシュは 不十分な衝突抵抗 のため段階的に廃止されています。または、言い換えれば、今日の暗号規格では十分に強いコード署名を生成しません。
B)実行可能ファイルにコード署名するには、_SHA-2
_などの _SHA-256
_ ハッシュアルゴリズムのいずれかをサポートするコード署名証明書が必要です。 (私の場合 [〜#〜] ca [〜#〜] 、Comodo、既存のコード署名証明書を無料でアップグレードしました。ただし、CAに問い合わせる必要があります。)
C)最新の Windows SDK をダウンロードしてインストールします。次に、次の2つの場所のいずれかで_signtool.exe
_にアクセスできます。
_For 32-bit:
%SystemDrive%\Program Files (x86)\Windows Kits\10\bin\x86
For 64-bit:
%SystemDrive%\Program Files (x86)\Windows Kits\10\bin\x64
_
D)次の表は、_SHA-1
_および_SHA-256
_コードシグネチャをサポートするOSを示しています。
_+---------------------+-------------------------------+------------------------------+
| Windows OS | SHA-1 | SHA-256 |
+---------------------+-------------------------------+------------------------------+
| XP SP3, Server 2003 | Yes | No (need KB968730, KB938397) |
| Vista, Server 2008 | Yes | No (need KB2763674) |
| 7, Server 2008 R2 | No (if signed after 1/1/2016) | Yes (with latest updates) |
| 8.1, Server 2012 R2 | No (if signed after 1/1/2016) | Yes |
| 10, Server 2016 | No (if signed after 1/1/2016) | Yes |
+---------------------+-------------------------------+------------------------------+
_
Vistaユーザーの重要な注意点の1つは、_SHA-256
_署名で署名されたファイルを開くには KB2763674 をインストールする必要があることです。
E)したがって、上の表の不一致に対処する解決策は、実行可能ファイルに二重署名することです。私の知る限り、次のファイルはデュアル署名をサポートしています。
_.cpl, .com, .dll, .exe, .scr
_
したがって、ファイルにコード署名するには、signtool
を2回呼び出します。
最初の_SHA-1
_(古いOSのフォールバックとして):
_SignTool.exe sign /f "path_to_exported_cert.pfx" /p "pfx_file_password" /d "Your file description if you need it" /t "http://timestamp.verisign.com/scripts/timstamp.dll" /v "path_to_file_to_sign.exe"
_
次に、同じファイルに_SHA-256
_を追加して追加します(_/as
_パラメータ):
_SignTool.exe sign /f "path_to_exported_cert.pfx" /fd sha256 /p "pfx_file_password" /d "Your file description if you need it" /tr "http://timestamp.geotrust.com/tsa" /td sha256 /as /v "path_to_file_to_sign.exe"
_
_SHA-256
_で署名するパラメーターは、特にタイムスタンプサーバーでは異なることに注意してください。 _SHA-1
_のタイムスタンプサーバーを使用すると、Windows 10で奇妙な結果が生成されます。
F)_.msi
_、_.msp
_、_.js
_、_.vbs
_、_.jse
_、_.vbe
_、_.ps1
_を含むその他のファイルの場合、_.ps1xm
_、_.psm1
_、_.ps1xml
_、_.wsf
_二重署名をサポートしていないため、どちらか一方を選択する必要があります。そのため、残念ながら、展開する予定のOSに対して特別に署名する必要があります。
osslsigncode (Linuxツール)を使用して、SHA1およびSHA256を使用してexeインストーラーに二重署名しました。 Windowsユーザーの場合、osslsigncodeの Windows fork について読みました。現在のコモド署名証明書2016にはデュアルダイジェストSHA1とSHA256が付属しているので、両方の署名に単一の証明書のみが必要です。
最初にXP互換性のある署名を実行する必要があります:
osslsigncode sign -pkcs12 comodo-signing-2016.p12 -askpass \
-n "My-program installer" \
-i http://www.my-site.com/my-program \
-t http://timestamp.comodoca.com \
-h sha1 \
my-installer.exe my-installer-signed.exe
次に、Win7/8/10互換のもの:
osslsigncode sign -pkcs12 comodo-signing-2016.p12 -askpass \
-n "My-program installer" \
-i http://www.my-site.com/my-program \
-ts http://timestamp.comodoca.com \
-nest -h sha256 \
my-installer-signed.exe my-installer-dual-signed.exe
最初の署名にはAuthenticodeタイムスタンプ(-t)を使用し、2番目の署名にはRFC 3161タイムスタンプ(-ts)を使用していることに注意してください。これがどれほど便利かはわかりませんが、Authenticodeは古く、おそらく下位互換性があります。 authenticodeタイムスタンプダイジェストはデフォルトでsha1であり、RFC 3161は前述のように自動的にsha256に設定されます here 。
また、2番目のコマンドには、最初の署名の代わりに置換の代わりに、新しい署名を追加するために-nestフラグが含まれています。
マイクロソフトは、2016年10月19日午前11時15分に、コード署名用のSHA-1を廃止する方針を大幅に変更したようです。それ以前は、SHA-1はコード署名( 11:14 )で非推奨になると述べていました。それ以降、SHA-1コード署名は今のところ影響を受けず、将来の締め切り日は指定されていない( 11:16 )とのことです。
2017年2月25日現在の詳細は次のとおりです( 現在のバージョンへのリンク ):
TLS Server-Authentication Certificates
Today: No lock icon Microsoft Edge and Internet Explorer 11
Mid-2017: Invalid Certificate
Code Signing Certificates
Today: Unaffected
Mid-2017: Unaffected
Timestamping Certificates
Today: Unaffected
Mid-2017: Unaffected
もちろん、長期的には、SHA-1はリスクです。ただし、この質問はWindowsでのコード署名証明書の廃止に関するものであり、2016年10月のMicrosoftの変更は、以前にリリースされた計画と比較して重要です。彼らは現在、「長期的には、Microsoftはすべての状況においてWindows全体でSHA-1を信用しないつもりです」と述べており、その計画は「2017年以降」の「フェーズ3」にあります。
証明書が古いプラットフォームやブラウザで警告サインを返さない場合でも、アップグレードされたシステムでは警告サインが表示されます。あなたに与える最良の例はWindows 10です。Windows10では、IS NOT EV-SHA-256証明書であるすべてのコード署名証明書に対して警告が表示されます。
プラットフォームがCA/Bフォーラムガイドラインの新しい推奨事項に更新されている場合、証明書は警告サインを排除しません。
詳細について誰かと話したい場合はお知らせください。新しい証明書を発行するか、互換性について詳しく説明するGlobalSignの担当者に連絡します。そうでなければ、この記事は確かに役立つかもしれません: https://support.globalsign.com/customer/en/portal/articles/1499561-sha-256-compatibility
完全な回答ではなく、デュアル署名用のサインツールのサンプル行を含むいくつかの追加概要情報(XP/Vista互換)
この非常に優れた ksoftware.netからのブログ投稿 の証明書サプライヤに従って、ビルドチェーンでうまく二重署名に切り替えることができました。
2つの証明書を使用してファイルに二重署名する小さなバッチファイルを作成し、これを展開スクリプトから呼び出しました。
set SIGNTOOL_CMD=F:\FuH\dev\Docklight1\Installer\signtool\signtool.exe
set DL_WWW=http://docklight.de
set DL_PROJ_NAME=Docklight
set TIMESERVER_SHA1=http://timestamp.comodoca.com
set TIMESERVER_SHA256=http://timestamp.comodoca.com/?td=sha256
"%SIGNTOOL_CMD%" sign /v /sha1 D35C... /t %TIMESERVER_SHA1% /du %DL_WWW% /d "%DL_PROJ_NAME%" "%1"
"%SIGNTOOL_CMD%" sign /v /sha1 7FD7... /as /fd sha256 /tr %TIMESERVER_SHA256% /td sha256 /du %DL_WWW% /d "%DL_PROJ_NAME%" "%1"
更新されたsigntoolの完全なWindows SDKをダウンロードする代わりに、私は KSoftwareブログからのsigntoolダウンロードリンク を取得しました
私はこれをWindows 10 x64/Edgeでテストしましたが、すべて問題ありません。