using System;
using System.Reflection;
[assembly:AssemblyKeyFile("MyPublicKey.snk")]
[assembly:AssemblyCulture("")]
[assembly:AssemblyVersion("1.0.0.0")]
[assembly:AssemblyDelaySign(true)]
public class HelloWorld {
public static void Main() {
Console.WriteLine("Hello, world");
}
}
Khi c np mt assembly b hoãn ký, b thc thi s nhn ra assembly này có tên mnh và
c xác minh assembly (như được tho lun trong mc 1.10). Nhưng vì không có ch
s nên bn phi vô hiu chc năng xác minh này bng lnh sn -Vr HelloWorld.exe.
Khi quá trình phát trin hoàn tt, bn cn ký li assembly để hoàn thành tên mnh cho
assembly. Công c Strong Name cho phép thc hin điu này mà không cn thay đổi mã
ngun hoc biên dch li assembly, tuy nhiên, bn phi có quyn truy xut khóa riêng ca
cp khóa tên mnh. Để ký li assembly có tên là HelloWorld.exe vi cp khóa nm trong
file MyKeys.snk, s dng lnh sn -R HelloWorld.exe MyKeys.snk. Nếu cp khóa được
lưu tr trong mt kho cha khóa CSP có tên là MyKeys, s dng lnh sn -Rc
HelloWorld.exe MyKeys.
Sau khi đã ký li assembly, bn phi m chc năng xác minh tên mnh cho assembly
bng đối s -Vu ca công c Strong Name, ví d sn -Vu HelloWorld.exe. Để kích hot
li vic xác minh tên mnh cho tt c các assembly đã b bn vô hiu trước đó, s dng
lnh sn –Vx. S dng lnh sn -Vl để xem danh sách các assembly đã b vô hiu chc
năng này.
# Khi s dng assembly ký sau, bn nên so sánh các ln xây dng khác nhau ca
assembly để bo đảm chúng ch khác nhau ch ký. Điu này ch có th thc
hin được nếu assembly đã được ký li bng đối s -R ca công c Strong
Name. S dng lnh sn -D assembly1 assembly2 để so sánh hai assembly.
Hình 1.3 Tm hoãn vic ký assembly
Hình 1.4 Ký li assembly
1.1assembly vi ch s Authenticode
V
V
Bn cn ký mt assembly bng Authenticode để người dùng biết bn chính là
người phát hành (publisher) và assembly không b sa đổi sau khi ký.
#
#
S dng công c File Signing (signcode.exe) để ký assembly vi Software
Publisher Certificate (SPC) ca bn.
Tên mnh cung cp mt định danh duy nht cũng như chng minh tính toàn vn ca mt
assembly, nhưng nó không xác minh ai là người phát hành assembly này. Do đó, .NET
Framework cung cp k thut Authenticode để ký assembly. Điu này cho phép người
dùng biết bn là người phát hành và xác nhn tính toàn vn ca assembly. Ch
Authenticode còn được s dng làm chng c (evidence) cho assembly khi cu hình
chính sách bo mt truy xut mã lnh (Code Access Security Policy—xem mc 13.9 và
13.10).
The image part with relationsh ip ID rI d5 was not fo und in the file.
The image part with relationsh ip ID rI d6 was not fo und in the file.
Để ký mt assembly vi chAuthenticode, bn cn mt SPC do mt Certificate
Authority (CA) cp. CA được trao quyn để cp SPC (cùng vi nhiu kiu chng ch
khác) cho các cá nhân hoc công ty s dng. Trước khi cp mt chng ch, CA có trách
nhim xác nhn nhng người yêu cu và bo đảm h ký kết không s dng sai các chng
ch do CA cp.
Đểđược mt SPC, bn nên xem Microsoft Root Certificate Program Members ti
[http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/dnsecure/html/rootcertprog.asp]. đây, bn có th tìm thy danh sách các CA, nhiu
CA trong s đó có th cp cho bn mt SPC. Vi mc đích th nghim, bn có th to
mt SPC th nghim theo quá trình s được mô t trong mc 1.13. Tuy nhiên, bn không
th phân phi phn mm được ký vi chng ch th nghim này. Vì mt SPC th nghim
không do mt CA đáng tin cy cp, nên hu hết người dùng s không tin tưởng assembly
được ký bng SPC th nghim này.
Khi đã có mt SPC, s dng công c File Signing để ký assembly ca bn. Công c File
Signing s dng khóa riêng ca SPC để to mt ch ký s và nhúng ch ký này cùng
phn công khai ca SPC vào assembly (bao gm khóa công khai). Khi xác minh mt
assembly, người dùng s dng khóa công khai để gii mt hóa mã băm đã-được-mt-hóa,
tính toán li mã băm ca assembly, và so sánh hai mã băm này để bo đảm chúng là như
nhau. Khi hai mã băm này trùng nhau, người dùng có th chc chn rng bn đã ký
assembly, và nó không b thay đổi t khi bn ký.
Ví d, để ký mt assembly có tên là MyAssembly.exe vi mt SPC nm trong file
MyCert.spc và khóa riêng nm trong file MyPrivateKey.pvk, s dng lnh:
signcode -spc MyCert.spc -v MyPrivateKey.pvk MyAssembly.exe
Trong ví d này, công c File Signing s hin th mt hp thoi như hình 1.5, yêu cu bn
nhp mt khu (đưc s dng để bo v khóa riêng trong file MyPrivateKey.pvk).
Hình 1.5 Công c File Signing yêu cu nhp mt khu khi truy xut file cha khóa riêng
The image part with relationsh ip ID rId 7 was not fo und in the file.
Bn cũng có th truy xut khóa và chng ch trong các kho cha. Bng 1.2 lit kê các đối
s thường dùng nht ca công c File Signing. Bn hãy tham kho tài liu .NET
Framework SDK để xem tt c các đối s.
Bng 1.2 Các đối s thường dùng ca công c File Signing
Đối s Mô t
-k Ch định tên ca kho cha khóa riêng SPC
-s Ch định tên ca kho cha SPC
-spc Ch định tên file cha SPC
-v Ch định tên file cha khóa riêng SPC
Để ký mt assembly gm nhiu file, bn cn ch định tên file cha assembly manifest.
Nếu mun s dng c tên mnh và Authenticode cho assembly, bn phi to tên mnh
cho assembly trước (xem cách to tên mnh cho assembly trong mc 1.9).
Để kim tra tính hp l ca mt file được ký vi chAuthenticode, s dng công c
Certificate Verification (chktrust.exe). Ví d, s dng lnh chktrust MyAssembly.exe để
kim tra file MyAssembly.exe. Nếu chưa cu hình cho h thng để nó tin tưởng SPC dùng
để ký assembly, bn s thy hp thoi tương t nhưnh 1.6, hin th thông tin v người
phát hành và cho bn chn là có tin tưởng người phát hành đó hay không (chng ch
trong hình 1.6 là mt chng ch th nghim được to theo quá trình được mô t trong
mc 1.13).
Nếu bn nhp Yes, hoc trước đó đã chn là luôn tin tưởng SPC, công c Certificate
Verification xác nhn tính hp l ca ch ký và assembly.
The image part with relationsh ip ID rId 8 was not fo und in the file.
Hình 1.6 Công c Certificate Verification
1.2 To và thiết lp tin tưởng mt SPC th nghim
V
V
Bn cn to mt SPC để th nghim.
#
#
S dng công c Certificate Creation (makecert.exe) để to mt chng ch X.509
và s dng công c Software Publisher Certificate (cert2spc.exe) để to mt SPC
t chng ch X.509 này. Thiết lp tin tưởng chng ch th nghim bng công c
Set Registry (setreg.exe).
Để to mt SPC th nghim cho mt nhà phát hành phn mm có tên là Square Nguyen,
trước hết s dng công c Certificate Creation để to mt chng ch X.509. Lnh:
makecert -n "CN=Square Nguyen" -sk MyKeys TestCertificate.cer
s to mt file có tên là TestCertificate.cer cha mt chng ch X.509, và lưu tr khóa
riêng tương ng trong mt kho cha khóa CSP có tên là MyKeys (được to t động nếu
chưa tn ti). Bn cũng có th ghi khóa riêng vào file bng cách thay -sk bng -sv. Ví d,
để ghi khóa riêng vào mt file có tên là PrivateKeys.pvk, s dng lnh:
makecert -n "CN=Square Nguyen" -sv PrivateKey.pvk TestCertificate.cer
Hình 1.7 Công c Certificate Creation nhc nhp mt khu để bo v file cha khóa
riêng
Nếu bn ghi khóa riêng vào file, công c Certificate Creation s nhc bn nhp mt khu
để bo v file này (xem hình 1.7).
Công c Certificate Creation h tr nhiu đối s, bng 1.3 lit kê mt vài đối s thường
dùng. Xem thêm tài liu .NET Framework SDK v công c Certificate Creation.
Bng 1.3 Các đối s thường dùng ca công c Certificate Creation
Đối s Mô t
The image part with relationsh ip ID rId 9 was not fo und in the file.