Tải bản đầy đủ (.pdf) (62 trang)

Phần mềm có sử dụng chứng chỉ số q 8a, dùng chứng chỉ số với các dịch vụ web và mail

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (997.07 KB, 62 trang )

Chơng trình KC-01:
Nghiên cứu khoa học
phát triển công nghệ thông tin
và truyền thông

Đề tài KC-01-01:
Nghiên cứu một số vấn đề bảo mật và
an toàn thông tin cho các mạng dùng
giao thức liên mạng máy tính IP

Báo cáo kết quả nghiên cøu

PhÇn mỊm cã sư dơng chøng chØ sè

Qun 8A: “Dïng chứng chỉ số với các dịch vụ
Web và Mail

Hà NộI-2004


Báo cáo kết quả nghiên cứu

Phần mềm có sử dụng chøng chØ sè

Qun 7A: “Dïng chøng chØ sè víi c¸c dịch vụ
Web và Mail

Chủ trì nhóm thực hiện:
PGS. TS. Lê Mü Tó



Mơc lơc
Ch¬ng I. Giao thøc Secure Socket Layer
1. Giíi thiƯu
2-Giao thøc SSLv3
2.1-TÇng giao thøc SSLv3 Record
2.2-SSLv3 Handshake protocol
2.3-Change cipher spec và Alert protocol

Chơng II. Sử dụng chứng chỉ số với dịch vụ Web
1-Cài đặt chứng chỉ đợc cấp cho trình duyệt
1.1-Cài đặt chứng chỉ cho trình duyệt Internet Explorer
1.1.1-Bớc 1: Cài đặt tiện ích trợ giúp
1.1.2-Bớc 2: Cài đặt chứng chỉ cho Internet Explorer
1.2-Cài đặt chứng chỉ cho trình duyệt Netscape
2-Cập nhật CTL và CRL từ Public Database Server
3-Cài đặt thiết lập cấu hình phần mềm E-shop có sử dụng chứng chỉ
đợc cấp trên Apache server
3.1-Cài đặt phần mềm E-shop
3.2- ThiÕt lËp cÊu h×nh E-shop cã sư dơng chøng chØ trªn Apache server
4-Sư dơng https truy nhËp tíi E-shop
4.1- Sư dụng trình duyệt Internet Explorer truy nhập tới E-Shop
4.1.1-Trờng hợp chứng chỉ của client và server cha bị huỷ bỏ
4.1.2-Trờng hợp một trong hai chứng chỉ bị huỷ bỏ
4.2- Sử dụng trình duyệt Netscape truy nhập tới E-Shop
4.2.1-Trờng hợp chứng chỉ của client và server cha bị huỷ bỏ
4.2.2-Trờng hợp một trong hai chứng chỉ bị huỷ bỏ

Chơng III. Sử chứng chỉ số với dịch vụ Mail
1. Giới thiệu
2. Đa chøng chØ sè vµo Outlook

3. Sư dơng chøng chØ sè để xác thực và mà hoá th điện tử trên
Outlook
4. Cập nhật danh sách các chứng chỉ đà huỷ bỏ

1
1
1
2
5
9
12
12
12
12
13
21
28
29
29
30
30
30
31
33
33
33
36
38
38
38

48
57


Ch¬ng I
Giao thøc Secure Socket Layer
1. Giíi thiƯu
Secure Sockets Layer (SSL) là một giao thức có thể đợc đặt ở giữa giao thức
tầng mạng kết nối định hớng tin tởng (TCP/IP) và tầng giao thức ứng dụng
(FTP, HTTP, telnet ...). SSL cung cấp dịch vụ truyền thông có bảo mật giữa client
và server bằng việc cho phép client và server xác thực lẫn nhau sử dụng chữ ký số
và bảo mật thông tin trao đổi qua lại bằng cách mà hóa các thông tin đó.
Giao thức này đợc thiết kế để có thể trợ giúp một loạt các thuật toán sử dụng
cho việc mà hóa, hàm băm và chữ ký số. Giao thức SSL có ba phiên bản:
-SSLv2: đây là phiên bản đầu tiên của giao thức SSL do Netscape
Corporation thiết kế, cha có trợ giúp chain certificate.
-SSLv3: đây là phiên bản SSL version 3.0 do Netscape Corporation thiết
kế, đà có trợ giúp chain certificate và đợc suport cho tất cả các trình duyệt phổ
thông.
-TLSv1: đây là giao thức Transport Layer Security version 1.0, dựa trên cơ
sở của SSLv3, đợc thiÕt kÕ bëi IETF (Internet Engineering Task Force) nh†ng
hiÖn nã cha đợc support cho tất cả các trình duyệt thông dụng (chẳng hạn
Netscape là không có giao thức này).
Chú ý:
-Một đặc điểm quan trọng của SSLv3 và TLSv1 là có trợ giúp việc nạp chuỗi các
certificate (certificate chain). Với đặc điểm đợc bổ sung này sẽ cho phép server
và client có thể thực hiện việc xác thực lẫn nhau mà có thể đối tợng thực hiện
xác thực không cần phải cài các intermediate issuers.
-TLSv1 dựa trên nền tảng là SSLv3 trong đó có bổ sung phần block padding cho
các thuật toán mà khối, chuẩn hoá thứ tự các message và bổ sung thêm các thông

báo trong phiên liên lạc.
-Các phiên bản trên cũng nh các thuật toán mà hoá, thuật toán trao đổi khoá,
hàm băm hoàn toàn có thể đợc chØ ra cơ thĨ khi thiÕt lËp cÊu h×nh sư dụng SSL
cho Web server (Apache server), và một số trình duyệt (trong các trình duyệt phổ
thông IE không có thuộc tính này).
Với nhu cầu thực tế hiện nay SSLv2 ít đợc sử dụng. Bên cạnh đó do có sự tơng
ứng giữa SSLv3 và TLSv1, hơn nữa hiện tại trong thực tế TLSv1 cha đợc tích
hợp cho một số trình duyệt phổ thông (Netscape chẳng hạn) nên trong phần này
chúng tôi chỉ trình chi tiết về giao thức SSLv3 (đối với TLSv1 hoàn toàn tơng
tự).

2-Giao thức SSLv3
Giao thức SSLv3 gồm hai thành phần Handshake protocol và Record protocol.
SSLv3 Record protocol cung cấp cơ chế bảo mật với các thuật toán mà hoá nh
DES, RC4,... và là giao thức kết nối tin tởng với việc sử dụng hàm kiểm tra
MAC trong quá trình trao đổi dữ liệu. Còn SSLv3 Handshake protocol thực hiện
việc xác thực đối tác, trao đổi các giá trị secure sư dơng cho SSLv3 Record

1


protocol. Toàn bộ giao thức SSLv3 và mối liên hệ của nó với tầng ứng dụng và
tầng TCP có thể mô tả nh sơ đồ dới đây:

Hình 1.
Dới đây chúng tôi sẽ trình bày tuần tự chi tiết các tiến trình đợc thực hiện khi
sử dụng giao thức SSLv3.
2.1-Tầng giao thức SSLv3 Record
Giao thức SSLV3 Record là một tầng giao thức. Đối với mỗi tầng giao thức nói
chung, một gói dữ liệu sẽ bao gồm các trờng độ dài, mô tả và nội dung dữ liệu.

SSLv3 Record nhận dữ liệu cần gửi từ tầng trên phân nhỏ thành từng block, nén
dữ liệu, bổ sung dữ liệu kiểm tra, mà hoá và gửi. Khi nhận dữ liệu về tiến trình
đợc thực hiện ngợc lại: giải mÃ, kiểm tra, gỡ nén và sắp xếp lại rồi gửi lên tầng
trên. Cụ thể có thể diễn giải các giai đoạn trong giao thức này nh sau:
Application Data
Phân mảnh dữ liệu
Frame

Frame

Frame

Nén dữ liệu
MÃ hoá và MAC

Chuyển xuống tầng TCP
TCP Frame

Hình 2.
Trong đó Application data có thể là dữ liệu của SSL handshake protocol, SSL
change Cipher Spec, SSL Alert protocol hoặc dữ liệu của các ứng dụng khác nh
HTTP, Telnet, ... Để phân biệt đợc từng loại dữ liệu đó trong mỗi frame dữ liệu

2


của SSL record đều có phần header để phân biệt. Cụ thể mỗi frame dữ liêu có cấu
truc nh sau:
enum {
change_cipher_spec(20), alert(21),

handshake(22), application_data(23), (255)
}ContentType;
struct{
ContentType type;
ProtocolVersion version;
uint16 length;
opaque fragment[SSLPlaintext.length];
} SSLPlaintext;
Trong ®ã:
type chính là phần header chỉ ra loại dữ liệu gì.
version phiên bản SSL.
length độ dài dữ liệu thật theo byte (lớn nhất là 214-1).
fragment dữ liệu.
ã Nén và gỡ nén dữ liệu:
Sau khi nhận đợc dữ liệu từ tầng trên, giao thức SSL record sẽ thiết lập nên các
frame dữ liệu có cấu trúc là các SSLPlaintext. Các frame này sẽ đợc thực hiện
nén bằng thuật toán nén đợc thiết lập bởi handshake protocol tạo thành các
frame dữ liệu tơng ứng đợc goi là SSLCompressed có cấu trúc nh sau:
struct{
ContentType type;
ProtocolVersion version;
uint16 length;
opaque fragment[SSLCmpressed.length];
} SSLCompressed;
Trong đó
type và version giữ nguyên từ SSLPlaintext.
length độ dài SSLCompressed.fragment theo byte, không quá 214-1 +1024
(tức là thuật toán nén không đợc làm tăng thêm độ dài của dữ liệu thật quá 1024
byte).
fragment dữ liệu nén.

Tơng ứng khi gỡ nén dữ liệu nếu độ dài dữ liệu nhận đợc lơn hơn 214-1 bytes
thì sẽ xuất hiện thông báo lỗi.
ã Thực hiện mà hoá và MAC
Để bảo vệ dữ liệu trên đờng truyền giao thức SSL sử dụng thuật toán mà hoá và
MAC đợc định nghià trong CipherSpec hiện tại. Đối với mỗi phiên liên lạc sau
khi thực hiện xong giai đoạn handshake hai bên sẽ thiết lập đợc thuật toán mÃ
hoá chung, và tính đợc các thuộc tính cho hàm MAC. Thuật toán mà hoá và
hàm MAC sẽ thực hiện biến đổi cấu trúc SSLCompressed thành SSLCiphertext.
Khi nhận đợc SSLCiphertext quá trình giải mà sẽ thực hiện thao tác ngợc lại.
SSLCiphertext có cấu trúc nh sau:
struct{
ContentType type;

3


ProtocolVersion version;
uint16 length;
select (CipherSpec.cipher_type){
case stream: GenericStreamCipher;
case block: GenericBlockCipher;
}fragment;
}SSLCiphertext;
Trong ®ã:
type, version giữ nguyên từ SSLCompressed.
length độ dài theo byte của SSLCiphertext.fragment (không quá
14
2 +2048).
fragment dữ liệu sau khi mà hoá SSLCompressed.fragment, bao gồm cả
MAC.

-Trờng hợp không mà hoá hoặc dùng thuật toán mà dòng:
stream-cipher struct{
opaque content[SSLCompressed.length];
opaque MAC[CipherSpec.hash_size];
}GenericStreamCipher;
stream_cipher: tên thuật toán mà hoá.
Với MAC đợc sinh nh sau:
hash(MAC_write_secret+pad_2+
hash(MAC_write_secret+pad_1+seq_num+
SSLCompressed.type+SSLCompressed.length+
SSLCompressed.fragment))
pad_1 giá trị 0x36 đợc lặp lại 48 lần với MD5, 40 lần với SHA.
pad_2 giá trị 0x5c đợc lặp lại 48 lần với MD5, 40 lần với SHA.
seq_num số thứ tự của frame đang xử lý.
hast tên thủ tục thực hiện hàm hash đợc định nghĩa trong CihperSpec.
Chú ý:
Hàm hash đợc thực hiện trớc khi mà hoá tức là khi thủ tục mà hoá thực hiện dữ
liệu đầu vào có cả kết quả của hàm hash.
-Trờng hợp mà khối:
Với trờng hợp mà khối cấu tróc cđa GenericBlockCipher nh† sau:
block_cipher struct{
opaque content[SSLCompressed.length];
opaque MAC[CipherSpec.hash_size];
uint8 padding[GenericBlockCipher.padding_length];
uint8 padding_length;
} GenericBlockCipher;
padding bổ sung để độ dài của plaintext chia hết cho độ dài của block mÃ
khối đợc dùng.

4



padding_length độ dài của padding.
Chú ý:
-Cũng nh đối với trờng hợp dùng mà dòng, đối với trờng hợp dùng mà khối
dữ liệu đầu vào khi mà một frame bao gồm cả kết quả hàm MAC.
-Giá trị khởi đầu của IV dùng cho frame dữ liệu đầu tiên đợc tạo trong quá trình
thiết lập phiên liên lạc (Handshake), còn khi thực hiện mà hoá các frame tiếp
theo, IV sẽ là block cuối cùng của ciphertext của frame trớc nó.
Đối với các loại dữ liệu của các ứng dụng sử dụng SSL nh HTTP, Telnet, ...
chung ta không quan tâm. Dới đây chúng tôi sẽ trình bày chi tiết định dạng của
các loại dữ liệu trong giai đoạn thiết lập phiên liên lạc (Handshake, change
Cipher Spec, Alert protocols).
2.2-SSLv3 Handshake protocol
Các tham số mật mà liên quan đến một phiên liên lạc đợc thực hiện
thông qua SSLv3 Handshake Protocol, nó nằm ngay bên trên SSL Record Layer.
Khi SSL client và SSL server bắt đầu một phiên liên lạc chúng cần thống nhất về
phiên bản của giao thức sẽ đợc dùng, lựa chọn thuật toán mà hoá cho phiên liên
lạc, có thể có hoặc không việc xác thực lẫn nhau, và sử dụng thuật toán mà hoá
khoá công khai để sinh khoá chung cho phiên liên lạc đó.
Có thể mô phỏng giai đoạn thực hiện thiết lập phiên liên lạc bởi sơ đồ dới đây:
ClientHello

Thiết lập protocol version, ID phiên,
thuật toán mà hoá, phơng pháp
nén, trao đổi giá trị random

ServerHello
Certificate
Certificate Request

ServerHelloDone

Server gửi certificate và yêu cầu
Client gửi lại certificate nếu đợc
thiết lập xác thực client

Certificate
Certificate Verify

Client gửi certificate nếu đợc yêu
cầu

ChangeCipherSpec
Finished
ChangeCipherSpec

Change CipherSuit và kết thúc giai
đoạn Handshake

Finished

Client

Server

Tất cả các messages trao đổi qua lại giữa server và client phải đợc biểu diễn
theo một cấu trúc định trớc. Định dạng của cấu trúc dữ liệu trong giai đoạn
handshake nh sau:

5



enum {
hello_request(0),client_hello(1),server_hello(2),certificate(11),
server_key_exchange(12),certificate_request(13),
server_hello_done(14),certificate_verify(15),
client_key_exchange(16),finished(20),(255)
}
struct {
HandshakeType mstype;
uint24 length;
select (HandshakeType) {
case hello_request: HelloRequest;
case client_hello: ClientHello;
case server_hello: ServerHello;
case certificate: Certificate;
case server_key_exchange: ServerKeyExchange;
case certificate_request: CertificateRequest;
case server_hello_done: ServerHelloDone;
case certificate_verify: CertificateVerify;
case client_key_exchange: ClientKeyExchange;
case finished: Finished;
}
Cụ thể quá trình thực hiện SSLv3 Handshake qua các bớc trao đổi dữ liệu
giữa client/server nh sau:
ã Hello Messages.
-Khi một client có nhu cÇu kÕt nèi tíi server, server sÏ gưi mét message gọi là
Hellorequest tới client đó. Dới đây là định dạng của gói Hellorequest:
struct { } Hello;
-Nhận đợc helllorequest, Client gửi clienthello gồm: protocol version, một giá

trị random, Session ID, danh s¸ch c¸c thuËt to¸n m· ho¸, danh s¸ch c¸c mode
nÐn dữ liệu. định dạng của gói clienthello:
struct {
uint32 gmt_unix_time;
opaque random_bytes[28];
}
opaque SesionID<1..32>;
uint8 CipherSuite[2];
enum {null(0),(255)} CompressionMethod;
struct {
ProtocolVersion client_version;
Random random;
SessionID session_id;
CipherSuite cipher_suites<0..2^16-1>;
CompressionMethod compression_methods<0..2^8-1>;
} ClientHello;
Trong ®ã:
random_bytes: 28 byte sinh tõ bé sinh random.

6


gmt_unix_time: thời gian hiện hành.
client_version: phiên bản SSL clietn dùng.
session_id: số ID của phiên liên lạc
cipher_suites: danh sách các thuật to¸n m· ho¸ client cã.
compression_methods: danh s¸ch c¸c thuËt to¸n nén client có.
-Sau khi nhận đợc clienthello, server sẽ gửi trả lời bằng gói dữ liệu gọi là
serverhello gồm protocol version, giá trị sinh ngẫu nhiên, Session ID, danh sách
các thuật toán mà hoá trong danh sách clienthello mà nó có và các chế độ nén.

Định dạng của gói ServerHello:
struct {
ProtocolVersion server_version;
Random random;
SesionID sesion_id;
CipherSuite cipher_suite;
CompressionMethod compression_method;
}ServerHello
Trong ®ã mét sè tham số cần chú ý sau:
cipher_suites: một thuật toán mà hoá đợc chọn từ danh sách các thuật
toán của client gửi sang.
compression_methods: một thuật toán nén đợc chọn trong các thuật toán
client gửi sang.
ã Server Certificate
Server gửi tiếp server certificate (có cả danh sách các chain certificate, cũng có
thể là null trong trờng hợp server không có certificate). Định dạng của gói
Certificate:
opaque ASN.1Cert<1..2^24-1>
struct {
ASN1.Cert certificate_list<1..2^24-1>;
}Certificate;
ã Server Key Exchange message
Trong trờng hợp không có certificate, hoặc có certificate nhng chỉ sử dụng ®Ĩ
ký (DSS certificate, signing-only RSA certificate) hc FORTEZZA KEA key
exchange ®†ỵc dïng, server sÏ gưi ServerKeyExchange:
struct{
select(KeyExchangeAlgorithm){
case diffie_hellman:
ServerDHParams params;
Signature signature_params;

case rsa:
ServerRSAParams params;
Signature signature_params;
case fortezza_kea:
ServerFortezzaParams params;
};

7


}ServerKeyExchange;
Chú ý:
-Biến params là một kiểu cấu trúc trong đó l†u c¸c tham sè thùc hiƯn thùc hiƯn
mét tht to¸n trao đổi khoá công khai nào đó. Chẳng hạn với Diffie-Hellman
params gồm p, g, và tham số khoá công khai của server g^x mod p.
-Signature ở đây chỉ là một cấu trúc chỉ ra thuật toán băm và kết quả sử dụng
hàm băm các giá trị random của client, server và params của server. Chẳng hạn
với dsa:
Signature là SHA(ClientHello.random + ServerHello.random +
ServerParams).
ã Certificate Request
Sau đó Server sẽ gửi tiếp CertificateRequest với định dạng nh sau:
struct {
ClientCertificateType certificate_types <1..2^8-1>;
DistinguishedName certificate_authorities <3..2^16-1>;
} CertificateRequest;
Trong đó ClientCertificateType liệt kê các kiểu certificate (rsa_sign, dss_sign, ...)
mà server có thể chấp nhận. DistinguishedName là danh sách các DN của các
certificate đợc server chấp nhận là certificate authority (CA certificate).
ã Server hello done

Đây là message thông báo hết giai đoạn gửi serverhello, định dạng của goi này
nh sau:
struct{ } ServerHelloDone;
ã Client certificate
Client chỉ đợc phép gửi gói dữ liệu này sau khi đà nhận đợc gói
ServerHelloDone và nó cũng chỉ đợc gửi nếu server có yêu cầu certificate. Nếu
không có một certificate nào tơng ứng với một trong các kiểu certificate, và do
một CA nào đó trong CertificateRequest server gửi cho thì client sẽ gửi thông
báo no_certificate, khi đó tuỳ thuộc vào việc có yêu cầu hay không yêu cầu xác
thực client mà server đa ra khuyến cáo hoặc báo lỗi trong quá trình handshake.
Trờng hợp nếu client có certificate nó sẽ đợc gửi trong gói có định dạng
certificate chúng tôi đà nêu ở trên.
ã Client key exchange message
Gói này đợc gửi từ client với định dạng nh† sau:
struct {
select (KeyExchangeAlgorithm) {
case rsa: EncryptedPreMasterSecret;
case difie_hellman: ClientDiffieHellmanPublic;
case fortezza_kea: FortezzaKeys;
}
}ClientKeyExchange;
Trong ®ã:

8


-

-


Nếu rsa đợc chọn EncryptedPreMasterSecret sẽ là kết quả mà hoá khoá công
khai RSA (với các tham số khoá của server) của đầu vào là 48 byte (46 byte
random sinh bëi client, 2 byte chØ version cao nhÊt cña giao thức mà client
đợc support)
Nếu DH đợc chọn, ClientDiffieHellmanPublic là thành phần công khai của
client (g^y mod p).
Nếu fortezza_kea đợc chọn, FortezzaKey là một cấu trúc chỉ ra đầy đủ các
thành cần cho cho việc thiết lập khoá riêng của phiên liên lạc đó.

ã Certificate verify
Đây là gói dữ liệu thông báo quá trình xác thực lẫn nhau giữa client và server.
ã Finished
Kết thúc giai đoạn Handshake (gói dữ liệu này chỉ đợc trao đổi ngay sau khi
quá trình thống nhất thuật toán mà hoá kết thúc).
2.3-Change cipher spec và Alert protocol
ã Change cipher spec protocol
Giao thức này chỉ bao gồm một message trong đó thực hiện chức năng thông báo
việc thiết lập các thuộc tính mật mà cho phiên liên lạc đà hoàn thành. Message
này chỉ có một byte duy nhất với giá trị là 1.
struct{
enum{change_cipher_Spec(1),(255)} type;
}ChangeCipherSpec;
Change cipher spec message đợc gửi từ cả máy client lẫn máy server để thông
báo cho bên nhận biết bắt đầu từ các frame dữ liệu tiếp theo sẽ đợc mà hoá bởi
CipherSpec và khoá vừa thiết lập đợc. Client gửi message ngay sau khi gưi xong
KeyExchange message, cßn server gưi ngay sau khi nhận và xử lý xong
KeyExchange từ client.
ã Alert protocol
Một trong những kiểu dữ liệu đợc suport bởi SSL record layer là kiểu alert
(message thông báo). Các alert message truyền tải các thông báo lỗi trong quá

trình thiết lập cũng nh trao đổi dữ liệu của một phiên liên lạc. Cũng nh các loại
message khác, alert message cũng đợc mà hoá vµ nÐn.
CÊu tróc cđa alert message nh† sau:
enum {warning(1),fatal(2),(255)} AlertLevel;
enum {
close_notify(0),
unexpected_message(10),
bad_record_mac(20),
decompression_failure(30),
handshake_failure(40),
no_certificate (41),
bad_certificate(42),
unsuported_certificate(43),
certificate_revoked(44),

9


certificate_expired(45),
certificate_unknow(46),
illegal_parameter(47),
(255)
} AlertDescription;
struct {
AlertLevel level;
AlertDescription description;
} Alert;
Quá trình tính khoá cho phiên liên lạc:
Nếu mọi bớc trong quá trình handshake đều trôi chảy, server/client sẽ thực hiện
xong bớc xác thực lẫn nhau và hai bên thiết lập đợc thuật toán mà hoá, thuật

toán MAC và giá trị "mầm khoá" chung sử dụng cho phiên liên lạc đó.
Các thuộc tính mật mà sau khi thiết lập giữa hai máy sẽ đợc lu vào CipherSpec
dùng trong suốt phiên liên lạc đó. Cấu trúc cña CipherSpec nh† sau:
enum {stream,block} CipherType;
enum {true, false} IsExportable;
enum {nul, rc4, rc2, des, 3des, des40, fortezza} BulkCipherAlgorithm;
enum {null, md5, sha1} MACAlgorithm;
struct {
BulkCipherAlgorithm bulk_cipher_algorithm;
MACAlgorithm mac_algorithm;
CipherType cipher_type;
IsExportable is_exportable;
uint8 hash_size;
uint8 key_masterial;
uint8 IV_size;
} CipherSpec;
Gi¸ trị mầm khoá đợc đặt vào biến pre_master_secret (trờng hợp thuật toán
trao đổi khoá RSA đợc dùng, giá trị mầm khoá đợc server giải mà từ biến
EncryptPreMasterSecret, nếu thuật toán DH đợc chọn giá trị mầm khoá sẽ là
g^x.y mod p, ...), từ giá trị khoá ban đầu này quá trình tính khoá cho phiên liên
lạc đợc thực hiện trên mỗi máy nh sau:
-Chuyển pre_master_key thành master_secret bằng cách:
master_secret=MD5(pre_master_secret + SHA('A' +pre_master_secret +
ClientHello.random + ServerHello.random)) +
MD5(pre_master_secret + SHA('BB' +pre_master_secret +
ClientHello.random + ServerHello.random)) +
MD5(pre_master_secret + SHA('CCC' +pre_master_secret +
ClientHello.random + ServerHello.random)) ;
-ChuyÓn ®ỉi tõ master_secret thµnh keys vµ MAC secrets: tõ master_secret sẽ
đợc băm thành các giá trị khoá, IV và MAC secret sử dụng cho các thuộc tính

đợc chỉ ra trong CipherSpec hiƯn t¹i.
key_block=
MD5(master_secret + SHA('A' +pre_master_secret +
ClientHello.random + ServerHello.random)) +

10


MD5(master_secret + SHA('BB' +pre_master_secret +
ClientHello.random + ServerHello.random)) +
MD5(master_secret + SHA('CCC' +pre_master_secret +
ClientHello.random + ServerHello.random)) + ....;
cho ®Õn khi key_block ®đ cho những thuộc tính đợc chỉ trong CipherSpec, tức là
đủ để lấp đầy các biến:
client_write_MAC_secret[CipherSpec.hash_size]
server_write_MAC_secret[CipherSpec.hash_size]
client_write_key[CipherSpec.key_masterial]
server_write_key[CipherSpec.key_masterial]
client_write_IV[CipherSpec.IV_size]
server_write_IV[CipherSpec.IV_size]
Nếu đối với các thuật toán mà hoá none-export, thì quá trình tính khoá, IV và
MAC secret đến đây là kết thúc. Còn đối với các thuật toán mà hoá exportable thì
quá trình tính khoá cần thêm một bớc nữa:
filnal_client_write_key=MD5(client_write_key +
ClientHello.random +
ServerHello.random));
filnal_server_write_key=MD5(server_write_key +
ClientHello.random +
ServerHello.random));
và IV thì ®†ỵc tÝnh nh†:

client_write_IV=MD5(ClientHello.random + ServerHello.random);
server_write_IV=MD5(ClientHello.random + ServerHello.random);

11


Chơng II
Sử dụng chứng chỉ số với dịch vụ Web
Sau khi đợc cấp chứng chỉ ngời sử dụng có thể dùng nó cho nhiều mục đích
khác nhau. Trong chơng này chúng tôi trình bày việc sử dụng chứng chỉ đợc cấp
trên ứng dụng Web. Cụ thể là việc sử dụng một chứng chỉ thiết lập một ứng dụng
thơng mại điện tử ở mức đề mô (E-shop) trên Apache server để mäi ng†êi sư
dơng chØ cã thĨ truy cËp ®Õn nã qua https, và cài đặt một chứng chỉ vào trình duyệt
Internet Explorer trên môi trờng Windows, một chứng chỉ cho Netscape trên
Linux, để ngời sử dụng có thể dùng một trong hai trình duyệt trên truy cập đến EShop bằng cách sử dụng https.

1-Cài đặt chứng chỉ đợc cấp cho trình duyệt
1.1-Cài đặt chứng chỉ cho trình duyệt Internet Explorer
1.1.1-Bớc 1: Cài đặt tiện ích trợ giúp
Các chứng chỉ hệ thống MyCA cấp cho ngời dùng hiện tại đều sử dụng thuật toán
chữ ký số RSA với số modulo 1024 bít (đây cũng chính là độ dài khoá công khai
của ngời dùng), tuy nhiên đối với ứng dụng Internet Explorer 5.0 (hoặc phiên bản
thấp hơn) chỉ cho phép cài đặt các chứng chỉ với độ dài khoá công khai không quá
512 bít. Vì vậy để có thể cài đặt đợc chứng chỉ đà đợc cấp cho trình duyệt IE,
ngời sử dụng cần cài đặt phần mềm hỗ trợ trớc. Tiện ích thực hiện việc cài đặt
phần mềm hỗ trợ là tệp ie5dom.exe đợc cung cấp cùng chơng trình sinh khoá
(trong đĩa mềm thứ nhất).
Để cài đặt ngời sử dụng chỉ cần nhắp đúp chuột vào tện tệp ie5dom.exe, khi đó
trên màn hình xuất hiện hộp hội thoại nh hình 1.


Hình 1
Ngời sử dụng chọn nút lệnh "Yes", quá trình nâng cấp đợc tiến hành và kết thúc
khi trên màn hình xuất hiện thông báo nh hình 2.

Hình 2

12


Ng†êi sư dơng chän nót lƯnh "Yes" ®Ĩ kÕt thóc quá trình cài đặt, máy tính sẽ đợc
khởi động lại để tiện ích đà cài có hiệu lực.
1.1.2-Bớc2: Cài đặt chứng chỉ cho Internet Explorer
Giả sử ngời sử dụng đợc cấp chứng chỉ đới định dạng PKCS12 là tệp
2000001.p12. Để cài đặt chứng chỉ cho Internet Explorer, ngời sử dụng chọn vào
tệp này, rồi nhấn chuột phải.

Hình 3
Chọn chức năng "Install PFX", trên màn hình xuất hiện hộp hội thoại nh† h×nh 4.

13


Hình 4
Ngời sử dụng chọn "Next", trên màn hình xuất hiện hộp hội thoại nh hình 5.

Hình 5

14



Ngời sử dụng chọn "Next", trên màn hình xuất hiện hộp hội thoại nh hình 6.

Hình 6
Ngời sử dụng nhập mật khẩu (là mật khẩu do trung tâp cung cấp khi trung tâm
CA thực hiện việc chuyển đổi định dạng cđa chøng chØ tr†íc khi cÊp cho ng†êi sư
dơng). Chän "Next", trên màn hình xuất hiện hộp hội thoại nh h×nh 7.

15


Hình 7
Ngời sử dụng chọn "Next", trên màn hình xuất hiện hộp hội thoại nh hình 8.

Hình 8

16


Ngời sử dụng chọn "Finish", trên màn hình xuất hiện hộp hội thoại nh hình 9 (có
thể phải đợi trong ít giây, tùy thuộc vào tốc độ máy tính).

Hình 9
Ngời sử dụng chọn "Yes", trên màn hình xuất hiện hộp hội thoại thông báo quá
trình cài đặt chứng chỉ đà kết thúc.

Hình 10
Sau khi cài đặt nếu ngời sử dụng më tr×nh dut IE, chän menu /Tools/Internet
Options, chän tab "contents" råi chän nót lƯnh "Certificate" sÏ thÊy xt hiƯn
chøng chØ vừa đợc cài đặt trong mục


17


Hình 11
Muốn xem lại thông tin về chứng chỉ của mình ngời sử dụng chọn nút lệnh
"View", trên màn hình xuất hiện hộp hội thoại nh hình 12.

18


Hình 12
Cùng với việc cài đặt chứng chỉ của ngời sử dụng, các chứng chỉ của CA (khi sử
dụng mô hình chain CA) cũng đồng thời đợc cài đặt, nếu chän tab "Trust Root
Certificate Authorities" sÏ thÊy xuÊt hiÖn RootCA phát hành ra chứng chỉ của
ngời sử dụng nh hình 13 (ở đây chứng chỉ của ngời sử dụng đợc RootCA ký
nên trong danh sách chỉ có một CA đợc cài đặt đó là Root CA).

19


Hình 13
Nội dung chứng chỉ của Root CA sẽ đợc lu vào Registry (trong mục
/system/certificates/Root/Certificate).
Sau khi cài đặt xong các chứng chỉ, ngời sử dụng cần thiết lập cấu hình cho IE:
Chän menu Tools/Internet Options/Advanced, hép héi tho¹i xt hiƯn nh† h×nh 14.

20


Hình 14

Trong mục "Settings" chọn "Use SSL 3.0" (hoặc "Use TLS 1.0"), rồi nhấn "OK".
1.2-Cài đặt chứng chỉ cho trình duyệt Netscape
Quá trình cài đặt chứng chỉ cho Netscape theo các bớc sau:
-Trên menu của trình duyệt Netscape chọn chức năng "Security", hộp hội thoại
xuất hiện nh hình 15

21


H×nh 15
-Chän "Yours" trong mơc "Yours Certificates", råi chän "Import a Certificate",
trên màn hình xuất hiện hộp hội thoại nh hình 26

Hình 26
-Ngời sử dụng nhập mật khẩu để truy nhập tới cơ sở dữ liệu lu chứng chỉ của
Netscape (mật khẩu này ngời sử dụng thiết lập bằng cách sư dơng mơc Passwords
trong hép héi tho¹i 15), chän "OK", trên màn hình xuất hiện hộp hội thoại nh
hình 17.

22


×