I saw that you got a few responses to your question, but this has 
been asked many times before yet never fully answered to 
satisfaction. So here is the complete explanation, which will 
probably be much more than you want to know about this subject.  
Nonetheless, I thought it would be nice to set the record straight on 
this.

The confusion here is that we are talking about two TOTALLY DIFFERENT 
types of signatures: code signing (i.e., Authenticode) vs. WHQL 
driver signing. The first one, code signing, is used to authenticate 
the author of an executable.  The second is to ensure that a 
particular driver has been certified for use with Windows 2000 or 
Windows XP.

With code signing, credentials are attached to a binary using an 
individual's or organization's digital certificate. These credentials 
can be verified by looking at the file properties and selecting the 
Digital Signatures tab or using the chktrust.exe tool that is 
included with the Platform SDK and the .NET Framework SDK.  With code 
signing, the signature credentials actually become part of the binary 
file. If you open the file in a hex editor you will see the actual 
signature near the end of the file.

WHQL driver signing, on the other hand, is when Microsoft verifies 
that a driver has been tested to be compatible with Windows 2000 or 
XP and that the files have not changed since testing.  Driver 
signatures are included in a catalog file (*.CAT) that is distributed 
with the driver.  When Windows checks a driver signature, it checks 
the catalog file to make sure the drivers have not been altered.  The 
individual files are not signed, but the .CAT file itself is signed 
with Microsoft's certificate (using the code signing method mentioned 
above). Driver signing only verifies that those particular files have 
been tested to be compatible with Windows 2000 or XP.  Driver 
signatures can be verified with the sigverif.exe tool or 
driverquery.exe that comes with Windows XP.

The primary difference between the two is that code signing is done 
on each binary file with the author's certificate whereas with driver 
signing, only the catalog file is signed and that is done with 
Microsoft's certificate. Code signing is to verify the authenticity 
of a file while driver signing is more intended for system 
reliability.

So when you get the message box saying that the driver files have not 
been signed, it does not mean that the hotfix itself has not been 
signed. If you look at the signature properties or use the 
chktrust.exe tool, you will see that indeed, the file has been signed 
and is valid. 

However, when the hotfix installs it uses the SetupCopyOEMInf 
function which triggers the checking of driver signatures.  Windows 
then looks at the hotfix.inf file to determine the name of the 
catalog file. That catalog file name should appear in hotfix.inf 
under the [Version] section like this:
[Version] 
CatalogFile=sp3.cat

Windows then looks for that catalog file (in this case sp3.cat) to 
verify the digital signature (which will be Microsoft's signature).  
If that passes, it verifies the checksums (one MS document calls them 
checksums, another MS document calls them hashes) of each hotfix file 
against the checksums (or hashes) in the catalog file.  Since 
hotfixes do have the catalog file entry in the hotfix.inf and that 
catalog file (sp3.cat) is included in the with the hotfix 
distribution, you'd thing that it would pass driver signature 
checking.  But it doesn't.

There are two reasons why the driver signature checking is failing at 
installation: either the drivers themselves are bad or it cannot find 
the catalog file to verify the signatures.  Once you install the 
hotfix you can run the sigverif tool and see that the driver files 
are indeed verified at that point so it isn't because the drivers are 
bad.  The only explanation is that it cannot find the catalog file 
during installation.

I did quite a bit of research to find out exactly why this was 
happening and found one possible reason that I have not verified 
myself nor have I informed Microsoft before this e-mail.  In the Code 
Signing FAQ located at 
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnw2k
/html/win2ksignfaq.asp, it says that in addition to adding a 
CatalogFile= entry in the .INF, you must also add the .CAT file in 
the [SourceDiskFile] section.  I noticed that hotfix.inf doesn't have 
this entry, so perhaps that is why it is failing.  Again, this has 
not been verified.

Another issue is the KB article Q269651.  This article suggests that 
you should set unsigned driver behaviour to silently succeed.  I 
would NOT recommend this setting, but would suggest to have it warn 
you instead. In my opinion, this KB article should be changed. In 
Windows 2000, the default setting is to warn but still allow 
installation.

And how is this setting changed?  There are a number of ways:
1. From the Control Panel, open the System applet, select the 
Hardware tab and click on the Driver Signing button.
2. From the Administrative Tools, select one of the Security Policy 
snap-ins and change the Unsigned driver installation behaviour under 
Local Policies/Security Options.
3. Create a Group Policy and change the setting under Local Computer 
Policy\Computer Configuration\Windows Settings\Security 
Settings\Local Settings\Security Options.
4. Create or modify the values for BehaviorONFailedVerify and Policy 
under HKLM\Software\Policies\Microsoft\Windows NT\Driver Signing.  
5. Create or modify the values for BehaviorONFailedVerify and Policy 
under HKCU\Software\Policies\Microsoft\Windows NT\Driver Signing.  
6. Create the policy in a security template.

So as you see, the message you get that says that the software you 
are trying to install is not signed is misleading.  First of all, it 
has nothing to do with the validity of the hotfix file you 
downloaded. Second, it turns out that the hotfix files actually are 
signed but the hotfix installation is not recognizing this. I'd say 
this is a bug that should be fixed.

Another important thing to note is that there is no automatic 
checking of the hotfix's signature itself. If you download a 
corrupted or malicious hotfix, there will be no warning when you run 
it. You MUST manually verify every hotfix's signature before 
installing.  One interesting thing I just found while writing this is 
that the Digital Signature tab in the file properties may not always 
be correct. I opened up Q314147_W2K_SP3_X86_EN.exe in a hex editor 
and randomly changed data in the binary file.  I saved this and 
looked at the signature properties.  The Name of Signers field now 
said "Not available" but when I looked at the certificate details it 
said that the digital signature is OK, which was obviously incorrect. 
 When I verified that same file with chktrust using the command 
chktrust.exe -v -q Q314147_W2K_SP3_X86_EN.exe I got the following 
message:
Q314147_W2K_SP3_X86_EN.exe: Failed: The subject is not trusted for 
the specified action

So perhaps the you cannot trust the Digital Signatures tab in the 
file properties. 

Another thing to consider is what this all means when doing 
unattended installs. When including hotfixes during unattended 
installation, you may be forced to set the DriverSigningPolicy 
setting to ignore in the unattend.txt file. Just be sure to properly 
set the policy after installation.

So in summary:
 1. Hotfix signatures are not automatically verified, but can 
manually be verified with chktrust.exe
 2. The Digital Signature tab in the file properties dialog may not 
be trustworthy
 3. The invalid signature message during installation has nothing to 
do with the hotfix download itself
 4. The invalid signature message is wrong, and you can verify the 
signatures after installation with sigverif.exe
 5. Microsoft might be able to fix this error message by checking on 
that SourceDiskFile thing
 6. Q269651 has a poor recommendation to set your system to silently 
install unsigned drivers

And of course, previous recommendations to get the root certificates 
update are also a good idea.


Mark Burnett
www.xato.net





On Thu, 21 Feb 2002 16:32:15 +0800, [EMAIL PROTECTED] wrote:
>
>Hi,
>
>Recently, when I try to download patches from Microsoft I get the
>messages "Unknown Software Package", "The Software you are trying to
>install is not signed." "Microsoft cannot guarantee that this
>software will work with Windows." etc.
>
>Is this just temporary or is this the extension of the Mircrosoft
>"We-don't-test-our-software-and-don't-guarantee-it-is-working-and-if
>-
>you-use-it-you-have-to-blame-only-yourself-Policy"
>
>towards the patches?
>
>What is safer, install no patches or install unsigned patches?
>
>Cheers, Andreas
>
>





Reply via email to