(91) 350-9520 support@omarine.org M-F: 7 AM - 7 PM; Weekends: 9 AM - 5 PM

Omarine Native Directory (OND): Tạo các chứng chỉ CA, chứng chỉ server và chứng chỉ khách

Bộ ba các chứng chỉ CA, chứng chỉ server và chứng chỉ khách dùng để xác minh liên lạc hai chiều giữa server và khách dựa trên chứng chỉ. Cách thức này dùng cho xử lý xác minh tự động không có tương tác của người dùng, hoặc xác minh “người dùng” là chương trình. Chứng chỉ CA là chứng chỉ tin tưởng do quản trị ấn định, dùng để kí các chứng chỉ kia. Chứng chỉ server và chứng chỉ khách chứa đựng thông tin chủ thể, nhà cung cấp, loại chứng chỉ, đặc điểm kỹ thuật của khóa mật mã, khóa công khai, chữ ký kỹ thuật số của CA, và các thông tin nhận dạng bổ sung. Trong cuộc đàm phán giữa chủ và khách, nếu khách không có chứng chỉ hoặc chứng chỉ không hợp lệ, cái bắt tay (handshake) sẽ thất bại.

Trong OND, chứng chỉ được dùng vào hai việc:

  • Xác thực trước (preauthentication) cho krb5

    Áp dụng kỹ thuật PKINIT của krb5. Người sử dụng được xác thực trước không cần vào mật khẩu khi cấp vé TGT. Chúng ta bàn một chút về mật khẩu: cách thức xử lý mật khẩu của hệ thống an ninh mật mã an toàn hơn hệ thống an ninh cổ điển. Mật khẩu kiểu cũ đi trên dây qua mạng và không an toàn. Mật khẩu trong krb5 là vật liệu làm nên khóa bí mật của người dùng, để giải mã thông tin và không đi qua mạng.

  • Kdc sử dụng chứng chỉ để liên lạc với ldap

    Mặc dù là trung tâm của kỹ thuật GSSAPI, kdc không thể sử dụng kỹ thuật này khi khởi động vì lúc đó cơ sở dữ liệu chưa được khởi tạo. Nó sử dụng TLS thông qua các chứng chỉ để truy cập cơ sở dữ liệu ldap.

Tạo chứng chỉ CA

Chứng chỉ CA được áp dụng chung trong hệ thống, bạn tạo tệp ca.cnf có nội dung sau:

# Begin ca.cnf

[ req ]
default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
x509_extensions = v3_ca 
string_mask = utf8only

[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = VN
countryName_min = 2
countryName_max = 2
0.organizationName = Organization Name (eg, company)
0.organizationName_default = Omarine Corporation
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_max = 64
commonName_default = OMARINE SIGN
emailAddress = Email Address
emailAddress_max = 64

[ req_attributes ]
challengePassword = A challenge password
challengePassword_min = 4
challengePassword_max = 20

[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, cRLSign, keyCertSign

# End ca.cnf

Chứng chỉ CA được tạo như sau:

openssl req -x509 -newkey rsa:2048 -keyout ca-key.pem \
-out ca-cert.pem -nodes -config ca.cnf -days 3650

Kết quả là tệp chứng chỉ ca-cert.pem và tệp khóa bí mật ca-key.pem.

Tạo các chứng chỉ xác thực trước cho krb5

Tệp cấu hình server.cnf có nội dung sau:

# Begin server.cnf

[ req ]
default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
x509_extensions = usr_cert
string_mask = utf8only

[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = VN
countryName_min = 2
countryName_max = 2
0.organizationName = Organization Name (eg, company)
0.organizationName_default = Omarine Corporation
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_max = 64
commonName_default = omarine.omarine.org
emailAddress = Email Address
emailAddress_max = 64

[ req_attributes ]
challengePassword = A challenge password
challengePassword_min = 4
challengePassword_max = 20

[ usr_cert ]
basicConstraints=CA:FALSE
keyUsage = nonRepudiation,digitalSignature,keyEncipherment,keyAgreement
extendedKeyUsage=1.3.6.1.5.2.3.5
nsComment = "OpenSSL Generated Certificate"
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
issuerAltName=issuer:copy
subjectAltName=otherName:1.3.6.1.5.2.2;SEQUENCE:kdc_princ_name

[kdc_princ_name]
realm=EXP:0,GeneralString:${ENV::REALM}
principal_name=EXP:1,SEQUENCE:kdc_principal_seq

[kdc_principal_seq]
name_type=EXP:0,INTEGER:1
name_string=EXP:1,SEQUENCE:kdc_principals

[kdc_principals]
princ1=GeneralString:krbtgt
princ2=GeneralString:${ENV::REALM}

# End server.cnf

Chứng chỉ server được tạo như sau:

openssl genrsa -out key.pem 2048
openssl req -new -out req.pem -key key.pem
env REALM=OMARINE.ORG openssl x509 -req -in req.pem \
-CAkey ca-key.pem -CA ca-cert.pem -out cert.pem -days 365 \
-extfile server.cnf -extensions usr_cert -Cacreateserial
rm req.pem

Kết quả là tệp chứng chỉ cert.pem và tệp khóa bí mật key.pem.

Mỗi principal áp dụng xác thực trước cần một chứng chỉ khách. Tệp cấu hình client.cnf cho principal với một bộ phận của tên có nội dung sau:

# Begin client.cnf

[ req ]
default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
x509_extensions = usr_cert
string_mask = utf8only

[ req_distinguished_name ]
1.domainComponent = DC
1.domainComponent_default = org
2.domainComponent = DC
2.domainComponent_default = omarine
3.commonName = Common Name (e.g. server FQDN or YOUR name)
3.commonName_max = 64
3.commonName_default = adm-service

[ usr_cert ]
basicConstraints=CA:FALSE
keyUsage = digitalSignature,keyEncipherment,keyAgreement
extendedKeyUsage=1.3.6.1.5.2.3.4
nsComment = "OpenSSL Generated Certificate"
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
issuerAltName=issuer:copy
subjectAltName=otherName:1.3.6.1.5.2.2;SEQUENCE:princ_name

[princ_name]
realm=EXP:0,GeneralString:${ENV::REALM}
principal_name=EXP:1,SEQUENCE:principal_seq
[principal_seq]
name_type=EXP:0,INTEGER:1
name_string=EXP:1,SEQUENCE:principals

[principals]
princ1=GeneralString:${ENV::CLIENT}

# End client.cnf

Chứng chỉ khách cho emin được tạo như sau:

openssl genrsa -out client-key.pem 2048
openssl req -new -out client-req.pem -key client-key.pem
env REALM=OMARINE.ORG CLIENT=emin openssl x509 -req -in client-req.pem \
-CAkey ca-key.pem -CA ca-cert.pem -out client-cert.pem -days 365 \
-extfile client.cnf -extensions usr_cert -Cacreateserial
rm client-req.pem

Kết quả là tệp chứng chỉ client-cert.pem và tệp khóa bí mật client-key.pem.

Với principal có hai bộ phận của tên chẳng hạn principal dịch vụ host, bộ phận [principals] của tệp cấu hình sẽ có hai mục như sau:

[principals]

princ1=GeneralString:${ENV::CLIENT1}

princ2=GeneralString:${ENV::CLIENT2}

Trong trường hợp này các biến CLIENT1 và CLIENT2 cần đặt tương ứng tới bộ_phận_1 và bộ_phận_2 của tên khi chạy openssl x509.

Tạo các chứng chỉ truy cập ldap

Các tệp của các loại chứng chỉ khác nhau có cùng tên, bạn nên để chúng vào các thư mục khác nhau hoặc đổi tên.

Tệp cấu hình server.cnf có nội dung sau:

# Begin server.cnf

[ req ]
default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
x509_extensions = usr_cert
string_mask = utf8only

[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = VN
countryName_min = 2
countryName_max = 2
0.organizationName = Organization Name (eg, company)
0.organizationName_default = Omarine Corporation
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_max = 64
commonName_default = omarine.omarine.org
emailAddress = Email Address
emailAddress_max = 64

[ req_attributes ]
challengePassword = A challenge password
challengePassword_min = 4
challengePassword_max = 20

[ usr_cert ]
basicConstraints=CA:FALSE
nsCertType = server
keyUsage = nonRepudiation,digitalSignature,keyEncipherment,keyAgreement
nsComment = "OpenSSL Generated Certificate"
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
issuerAltName=issuer:copy

# End server.cnf

Chứng chỉ server được tạo như sau:

openssl req -newkey rsa:2048 -keyout key.pem -out req.pem -config server.cnf -nodes
openssl x509 -req -in req.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial \
-extfile server.cnf -extensions usr_cert -out cert.pem -days 1095
rm req.pem

Kết quả là tệp chứng chỉ cert.pem và tệp khóa bí mật key.pem.

Tệp cấu hình client.cnf có nội dung sau:

# Begin client.cnf

[ req ]
default_bits		= 2048
default_keyfile 	= privkey.pem
distinguished_name	= req_distinguished_name
x509_extensions	        = usr_cert

string_mask = utf8only

[ req_distinguished_name ]
1.domainComponent                 = DC
1.domainComponent_default         = org
2.domainComponent                 = DC
2.domainComponent_default         = omarine

3.commonName			  = Common Name (e.g. server FQDN or YOUR name)
3.commonName_max		  = 64
3.commonName_default              = adm-service

[ usr_cert ]
basicConstraints=CA:FALSE

nsCertType = client, email

keyUsage = digitalSignature,keyEncipherment,keyAgreement

nsComment			= "OpenSSL Generated Certificate"

subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer

issuerAltName=issuer:copy

# End client.cnf

Chứng chỉ khách được tạo như sau:

openssl req -newkey rsa:2048 -keyout client-key.pem \
-out client-req.pem -config client.cnf -nodes
openssl x509 -req -in client-req.pem -CA ca-cert.pem \
-CAkey ca-key.pem -CAcreateserial -extfile client.cnf \
-extensions usr_cert -out client-cert.pem -days 1095
rm client-req.pem

Kết quả là tệp chứng chỉ client-cert.pem và tệp khóa bí mật client-key.pem.

Dưới đây là hình ảnh một chứng chỉ server

Advertisements

Gửi phản hồi

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: