thắc mắc Tạo Valid SSL cho localhost - Có phải tự build file exe từ source code?

foreveryoung1992

Senior Member
Em đang tìm cách tạp valid SSL certificate cho localhost chạy trên Wamp, Window. Nhưng em đoán là em thiếu điều gì đó mà trong các bài hướng dẫn không đề cập đến, có thể đó là cách để tạo ra file .exe từ source (chỉ là đoán thôi ạ).
Dưới đây là những gì em gặp phải và hiện tại vẫn chưa tạo dc valid SSL vì thiếu file .exe. Cho em hỏi là em phải tự build file .exe đúng không ạ?

- Em thao khảo các tạo valis SSL tại link này: https://bobcares.com/blog/lets-encrypt-wamp/
Trong bài viết bảo em tìm download source trên github, lưu vào ổ đĩa C và làm theo hướng dẫn như hình 1:

Hình 1:
hinh 1.png



- Em search google và vào link github này để tải về, nhưng rõ ràng là bên trong thư mục ngày không có file nào là letsencrypt.exe cả:
https://github.com/sjkp/letsencrypt-win-simple

- Nên khi em tải source về, đặt vào trong ổ đĩa C: \ (Hình 2), và làm theo hướng dẫn là chạy lệnh:
cd C: \letsencrypt-win-simple
letsencrypt.exe -manualhost localhost -webroot E: \wamp\www -test

thì Command Prompt ko tìm thấy letsencrypt.exe (Hình 3)

Hình 2:

hinh 2.png



Hình 3:
hinh 3.png



- Em thấy phương án này không được nen e search tìm bài viết khác thì ra được bài viết này:
https://commaster.net/posts/how-setup-lets-encrypt-apache-windows/

Trong bài viết này thì có trích dẫn luôn nguồn github và cũng hướng dẫn cách làm việc giống như link bài hướng dẫn trước là chạy lệnh thực thi với letsencrypt.exe,

Em đã tải source từ link này: https://github.com/win-acme/win-acme/
nhưng một lần nữa là không thấy file letsencrypt.exe ở đâu ạ
hinh 4.png
 
Last edited:
Ý bạn là cái này

https://www.openssl.org/

Sent from Xiaomi Redmi 7 using vozFApp
Cái này em tải về rồi, nó chỉ tạo dc self-signed SSL certificate (đại loại dịch là chứng chỉ SSL tự xác nhận, tự xác thực) nên trên trình duyệt vẫn thông báo là không an toàn do https đang liên kết tới server chỉ có Invalid SSL:
CHo em hỏi hình như thím dung SSL cho localhost thì cũng có thông báo là "Not Secure" từ trình duyệt phải ko thím
hinh 5.png
 
Cái này em tải về rồi, nó chỉ tạo dc self-signed SSL certificate (đại loại dịch là chứng chỉ SSL tự xác nhận, tự xác thực) nên trên trình duyệt vẫn thông báo là không an toàn do https đang liên kết tới server chỉ có Invalid SSL:
CHo em hỏi hình như thím dung SSL cho localhost thì cũng có thông báo là "Not Secure" từ trình duyệt phải ko thím
View attachment 583755
Bạn tự sign thì chắc chắn là not secure rồi. Phải có 1 tổ chức uy tín sign hoặc xác nhận thì mới secure được
u40wsAh.png
 
Bạn google caddyserver nhé. Chạy lên nó tự sign ssl luôn kể cả localhost lẫn chạy production. Locahost thì tự nó sign. Gắn domain thì tự nó lấy chứng chỉ let encrypt

via theNEXTvoz for iPhone
 
tự thêm trusted cert vào browser thoy có gì đâu
FfsqRRV.png


tạo "root ca":
Code:
openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:2048 -keyout rootCA.key -out rootCA.crt -subj "/C=VN/L=Ho Chi Minh City/O=Voz/OU=Box Lap Trinh/CN=Kan team"

C là country code, L là location, O là organization name, OU là organization unit, CN là common name. Để là VN, TP HCM, Voz, Box Lap Trinh, tên Kân team
GYA3x5J.gif
Sửa tùy ý ba cái thông tin này. -days 3650 là 10 năm luôn install vào browser khỏi cần nhớ nữa
FqPSFPf.gif


tạo private key cho localhost và tạo csr là giấy xin phép xác thực public key này:
Code:
openssl req -new -nodes -newkey rsa:2048 -keyout localhost.key -out localhost.csr -subj "/C=VN/L=Ho Chi Minh City/O=localhost/CN=localhost"

tạo xong csr rồi thì đưa cho thằng rootCA tạo ở trên ký, nhưng trước tiên phải tạo 1 file đặt tên là domains.ext có nội dung thế này đã:
Code:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
DNS.2 = fake1.local
DNS.3 = fake2.local
1 trong các lý do thêm là thêm key usages, và vì cái subject alt names nó đòi website phải có dấu chấm ở trỏng mà localhost đếch có nên phải thêm mấy cái fake1.local gì ở đây.
rồi sau đó mới ký:
Code:
openssl x509 -req -sha256 -days 365 -in localhost.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -extfile domains.ext -out localhost.crt

nguồn: https://gist.github.com/cecilemuller/9492b848eb8fe46d462abeb26656c4f8

---
xong rồi lấy 2 file localhost.crt (certfile) và localhost.key (keyfile) xài cho SSL ở localhost thoy
uq1dgnk.png


Kute xài FF, chạy erver https với code python này:
Python:
import http.server, ssl

httpd = http.server.HTTPServer(('localhost', 4443), http.server.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket,
                               server_side=True,
                               certfile='./cert/localhost.crt',
                               keyfile='./cert/localhost.key')
httpd.serve_forever()

vào https://localhost:4443/ nó hiện ra ảnh này
1622935962202.png

thấy nó ghi lỗi là unknown issuer tức là thằng Kan team 10 năm kia chưa được FF tin tưởng
X0OgXK6.png


mở new tab, rồi gõ about:preferences#privacy vào, kéo xuống tới mục Certificates, bấm vào View Certificates...
1622936145415.png

nó hiện ra Certificate manager, qua thẻ Authorities và bấm Import...
1622936196658.png

tìm thằng rootCA.crt hồi nãy:
1622936331484.png

rồi chọn Trust this CA to identify websites
1622936306443.png

nhấn Ok là xong, có thể kéo xuống tìm cái cert mới add vào:
1622936395304.png

sau này delete nó ở đây là được.

xong rồi qua tab https://localhost:4443 kia referesh là nó ra ok
zFNuZTA.png

1622937233394.png


sau này có tạo cert mới cho localhost thì cứ xài thằng rootCA cũ, quá 10 năm hết đát thì mới tạo cái mới khỏi mất công add nó vào trusted auth gì nữa
Xv0BtTR.png


phen tự mò cách add trusted authorities với Chrome nha
KgmQHtR.png
 
tự thêm trusted cert vào browser thoy có gì đâu
FfsqRRV.png


tạo "root ca":
Code:
openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:2048 -keyout rootCA.key -out rootCA.crt -subj "/C=VN/L=Ho Chi Minh City/O=Voz/OU=Box Lap Trinh/CN=Kan team"

C là country code, L là location, O là organization name, OU là organization unit, CN là common name. Để là VN, TP HCM, Voz, Box Lap Trinh, tên Kân team
GYA3x5J.gif
Sửa tùy ý ba cái thông tin này. -days 3650 là 10 năm luôn install vào browser khỏi cần nhớ nữa
FqPSFPf.gif


tạo private key cho localhost và tạo csr là giấy xin phép xác thực public key này:
Code:
openssl req -new -nodes -newkey rsa:2048 -keyout localhost.key -out localhost.csr -subj "/C=VN/L=Ho Chi Minh City/O=localhost/CN=localhost"

tạo xong csr rồi thì đưa cho thằng rootCA tạo ở trên ký, nhưng trước tiên phải tạo 1 file đặt tên là domains.ext có nội dung thế này đã:
Code:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
DNS.2 = fake1.local
DNS.3 = fake2.local
1 trong các lý do thêm là thêm key usages, và vì cái subject alt names nó đòi website phải có dấu chấm ở trỏng mà localhost đếch có nên phải thêm mấy cái fake1.local gì ở đây.
rồi sau đó mới ký:
Code:
openssl x509 -req -sha256 -days 365 -in localhost.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -extfile domains.ext -out localhost.crt

nguồn: https://gist.github.com/cecilemuller/9492b848eb8fe46d462abeb26656c4f8

---
xong rồi lấy 2 file localhost.crt (certfile) và localhost.key (keyfile) xài cho SSL ở localhost thoy
uq1dgnk.png


Kute xài FF, chạy erver https với code python này:
Python:
import http.server, ssl

httpd = http.server.HTTPServer(('localhost', 4443), http.server.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket,
                               server_side=True,
                               certfile='./cert/localhost.crt',
                               keyfile='./cert/localhost.key')
httpd.serve_forever()

vào https://localhost:4443/ nó hiện ra ảnh này
View attachment 584977
thấy nó ghi lỗi là unknown issuer tức là thằng Kan team 10 năm kia chưa được FF tin tưởng
X0OgXK6.png


mở new tab, rồi gõ about:preferences#privacy vào, kéo xuống tới mục Certificates, bấm vào View Certificates...
View attachment 584982
nó hiện ra Certificate manager, qua thẻ Authorities và bấm Import...
View attachment 584983
tìm thằng rootCA.crt hồi nãy:
View attachment 584985
rồi chọn Trust this CA to identify websites
View attachment 584984
nhấn Ok là xong, có thể kéo xuống tìm cái cert mới add vào:
View attachment 584986
sau này delete nó ở đây là được.

xong rồi qua tab https://localhost:4443 kia referesh là nó ra ok
zFNuZTA.png

View attachment 584992

sau này có tạo cert mới cho localhost thì cứ xài thằng rootCA cũ, quá 10 năm hết đát thì mới tạo cái mới khỏi mất công add nó vào trusted auth gì nữa
Xv0BtTR.png


phen tự mò cách add trusted authorities với Chrome nha
KgmQHtR.png
Em cam ơn thím ạ

via theNEXTvoz for iPhone
 
tự thêm trusted cert vào browser thoy có gì đâu
FfsqRRV.png


tạo "root ca":
Code:
openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:2048 -keyout rootCA.key -out rootCA.crt -subj "/C=VN/L=Ho Chi Minh City/O=Voz/OU=Box Lap Trinh/CN=Kan team"

C là country code, L là location, O là organization name, OU là organization unit, CN là common name. Để là VN, TP HCM, Voz, Box Lap Trinh, tên Kân team
GYA3x5J.gif
Sửa tùy ý ba cái thông tin này. -days 3650 là 10 năm luôn install vào browser khỏi cần nhớ nữa
FqPSFPf.gif


tạo private key cho localhost và tạo csr là giấy xin phép xác thực public key này:
Code:
openssl req -new -nodes -newkey rsa:2048 -keyout localhost.key -out localhost.csr -subj "/C=VN/L=Ho Chi Minh City/O=localhost/CN=localhost"

tạo xong csr rồi thì đưa cho thằng rootCA tạo ở trên ký, nhưng trước tiên phải tạo 1 file đặt tên là domains.ext có nội dung thế này đã:
Code:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
DNS.2 = fake1.local
DNS.3 = fake2.local
1 trong các lý do thêm là thêm key usages, và vì cái subject alt names nó đòi website phải có dấu chấm ở trỏng mà localhost đếch có nên phải thêm mấy cái fake1.local gì ở đây.
rồi sau đó mới ký:
Code:
openssl x509 -req -sha256 -days 365 -in localhost.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -extfile domains.ext -out localhost.crt

nguồn: https://gist.github.com/cecilemuller/9492b848eb8fe46d462abeb26656c4f8

---
xong rồi lấy 2 file localhost.crt (certfile) và localhost.key (keyfile) xài cho SSL ở localhost thoy
uq1dgnk.png


Kute xài FF, chạy erver https với code python này:
Python:
import http.server, ssl

httpd = http.server.HTTPServer(('localhost', 4443), http.server.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket,
                               server_side=True,
                               certfile='./cert/localhost.crt',
                               keyfile='./cert/localhost.key')
httpd.serve_forever()

vào https://localhost:4443/ nó hiện ra ảnh này
View attachment 584977
thấy nó ghi lỗi là unknown issuer tức là thằng Kan team 10 năm kia chưa được FF tin tưởng
X0OgXK6.png


mở new tab, rồi gõ about:preferences#privacy vào, kéo xuống tới mục Certificates, bấm vào View Certificates...
View attachment 584982
nó hiện ra Certificate manager, qua thẻ Authorities và bấm Import...
View attachment 584983
tìm thằng rootCA.crt hồi nãy:
View attachment 584985
rồi chọn Trust this CA to identify websites
View attachment 584984
nhấn Ok là xong, có thể kéo xuống tìm cái cert mới add vào:
View attachment 584986
sau này delete nó ở đây là được.

xong rồi qua tab https://localhost:4443 kia referesh là nó ra ok
zFNuZTA.png

View attachment 584992

sau này có tạo cert mới cho localhost thì cứ xài thằng rootCA cũ, quá 10 năm hết đát thì mới tạo cái mới khỏi mất công add nó vào trusted auth gì nữa
Xv0BtTR.png


phen tự mò cách add trusted authorities với Chrome nha
KgmQHtR.png
Em cam ơn thím ạ

via theNEXTvoz for iPhone
 
Thím @Kân team ơi, em đã làm được rồi ạ và nhân tiện thím cho cho em hỏi thêm để em hiểu hơn được không ạ.
Em thấy cái hay là thím hiểu bản chất nên bác làm khác so với bài viết bên link github một tí
link github hướng dẫn: https://gist.github.com/cecilemuller/9492b848eb8fe46d462abeb26656c4f8

Trong link github này họ tiến hành tạo rootCA.key, rootCA.pem trước:
openssl req -x509 -nodes -new -sha256 -days 1024 -newkey rsa:2048 -keyout RootCA.key -out RootCA.pem -subj "/C=US/CN=Example-Root-CA"
Câu hỏi 1: đoạn lệnh trên em hiểu là tool OpenSSL tạo ra RootCa.key (đây là private key), sau đó từ private key là RootCA.key thì OpenSSL tạo ra tiếp RootCa.pem (đây là public key). Có đúng không ạ?

Sau đó từ RootCA.pem họ tạo ra RootCA.crt bằng câu lệnh:
openssl x509 -outform pem -in RootCA.pem -out RootCA.crt

Còn với cách làm của thím là không qua trung gian rootCA.pem:
openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:2048 -keyout rootCA.key -out rootCA.crt -subj "/C=VN/L=Ho Chi Minh City/O=Voz/OU=Box Lap Trinh/CN=Kan team"
Câu hỏi 2: tương tự câu hỏi 1, em hiểu lệnh trên là tool OpenSSL tạo ra rootCa.key (đây là private key), sau đó từ private key là rootCA.key thì OpenSSL tạo ra tiếp rootCa.crt (đây là public key). Có đúng không ạ?

Câu hỏi 3: trong cách làm của thím thì thím không dùng file trung gian là rootCA.pem, vậy cho em hỏi rootCA.pem và rootCA.crt có khác nhau gì không thím, them em biết thì hai file này đều chứa public key phải không thím?

Câu hỏi 4: Về localhost.csr được tạo ra ở đoạn lệnh dưới. Có phải localhost.csr chứa publickey được tạo ra từ pricate key là localhost.key. Và localhost.csr giống như một giấy xin phép để sau này nộp lên cho một CA kí xác nhận. CA (Cartificate-Authority) là một cơ quan có đủ thẩm quyền và uy tín kí xác nhận một publickey nào đó là đáng tin cậy)
openssl req -new -nodes -newkey rsa:2048 -keyout localhost.key -out localhost.csr -subj "/C=VN/L=Ho Chi Minh City/O=localhost/CN=localhost"

Câu hỏi 5: Câu lệnh ở dưới chính là bước ta nộp giấy xin phép localhost.csr lên cơ quan CA (rootCA.key và rootCA.crt, còn trong link github thì nó dùng rootCA.pem thay cho rootCA.crt), để CA xác nhận publickey chứa trong localhost.crs là đáng tin cậy và nó cấp cho ta certificate dùng được là localhost.crt (chứa pblickey)
openssl x509 -req -sha256 -days 365 -in localhost.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -extfile domains.ext -out localhost.crt

Câu hỏi 6: Như vậy có thể thấy rootCa.crt là một self-signed certificate, còn localhost.crt không phải là sefl-signed certificate bởi vì localhost.crt được kí vởi CA là rootCA?

Thím thấy em sai chỗ nào thì chỉ bảo giúp em ạ. Em cảm ơn thím nhiều
 
Last edited:
1. Thực tế là Kute gg từ nguồn khác ra 1 dòng đó rồi mới gg tiếp ra cái gist này, thấy xài ok nên cũng kệ mợ nó
rl1Kgfo.gif
Trong cái .crt đã có public key sẵn rồi nên ko cần file public key kia lắm.

2. rootCA.crt là cert là bundle chung public key và các thông tin khác như country code, organization, common name, hạn sử dụng gì đó, và được (self)sign bằng private key. Private key chỉ là 1 con số d bự 2048 bit + 1 con số n=p*q 2048 bit, 1024 bit mỗi con số nguyên tố p, q (còn có thể có vài con số khác d1 d2 gì đấy tạo ra từ p q nhưng ko cần thiết). Dùng private key tự ký cho public key tương ứng nghĩa là self-signed là giống như Kute tự viết tên mình lên mảnh giấy rồi kí tên bảo đây là chứng minh thư của Kute vậy đó. Bố thằng lào tin
1xEuo02.gif


3. Ko biết cái .pem kia chứa cái gì nhưng .crt chứa public key, chứa thông tin khác như tên cert v.v.., và chữ ký của cơ quan thẩm quyền mà ở đây là tự ký đếch có cơ quan nào hết. Public key là ví dụ cái mã vạch trên chứng minh thư thôi, còn cert là cả cái chứng minh thư, gồm public key, tên họ, ngày tháng năm sinh, dấu mộc của cơ quan thẩm quyền, à còn cái quan trọng khác nữa là hạn sử dụng.

4. Chứa public key, các thông tin khác về cert này. Hình như tụi CA nó sẽ lấy Common Name (CN) để đưa vào subject alt name là tên trang web được ký xác nhận là xài public key này. Còn mình tự ký thì đưa qua cái domains.ext muốn viết gì ở đó thì viết. Google CSR wiki xem nó viết cái gì
TG0OxM9.gif


5. Hiểu sơ sơ là vậy, nhưng CA còn phải thêm common name từ csr vào subject alt names gì đó nữa. Có đúng "localhost" trong subject alt names thì browser mới cho phép sử dụng cert này cho trang localhost. Còn phải thêm usage cho key này nữa, ở đây thì key này để làm digital signature rồi cái gì gì nữa trong file domains.ext đó.

6. Đúng ròi đó fen. Cái này gọi là signing chain gì đó thì phải ko nhớ rõ. Các cert bình thường thì nó có 1 root CA, root CA này sign cho 1 hoặc nhiều cert khác, cho các cert này usage là có thể ký cho các cert khác nữa. Sau cùng mới là cert của website, các cert này ko có quyền sign cho các cert khác. Ví dụ ISRG là root CA, sign cho Let's Encrypt (LE), cho LE khả năng ký xác nhận các cert khác. Rồi LE sẽ ký cho cert của example.com, cert này ko có khả năng ký nữa.
Lý do thêm 1 thằng trung gian như LE nữa mà ISRG ko ký trực tiếp thì có lẽ là để tránh bị tấn công tập trung hay sao ấy. Ví dụ ISRG kí cho 100 triệu trang web, chính phủ Mẽo muốn bẻ khóa https 1 trong các trang này chỉ cần tấn công ISRG là xong, 1 hòn đá bắn chết 100tr con chym. Nếu ISRG kí cho 10 thằng trung gian, mỗi thằng trung gian ký cho 10tr trang thì 1 hòn đá chỉ giết 10tr con chym thoy. Nói chung Kute cũng đéo biết thêm trung gian làm gì chém gió vậy thoy
1xEuo02.gif
Có lẽ mô hình giống kí chứng minh thư, nhà nước VN là root CA, ủy quyền cho mấy thằng trung gian là các tỉnh thành đóng mộc cấp phát cmt.
Ở đây do tự ký và chỉ xài cho localhost nên bỏ bước trung gian đi. RootCA tự ký cho cert của website luôn.
 
Last edited:
1. Thực tế là Kute gg từ nguồn khác ra 1 dòng đó rồi mới gg tiếp ra cái gist này, thấy xài ok nên cũng kệ mợ nó
rl1Kgfo.gif
Trong cái .crt đã có public key sẵn rồi nên ko cần file public key kia lắm.

2. rootCA.crt là cert là bundle chung public key và các thông tin khác như country code, organization, common name gì đó, và được (self)sign bằng private key. Private key chỉ là 1 con số d bự 2048 bit + 2 con số nguyên tố p q ~ 1024 bit mỗi con nữa (còn có thể có vài con số khác tạo ra từ p q nhưng ko cần thiết). Dùng private key tự ký cho public key tương ứng nghĩa là self-signed là giống như Kute tự viết tên mình lên mảnh giấy rồi kí tên bảo đây là chứng minh thư của Kute vậy đó. Bố thằng lào tin
1xEuo02.gif


3. Ko biết cái .pem kia chứa cái gì nhưng .crt chứa public key, chứa thông tin khác như tên cert v.v.., và chữ ký của cơ quan thẩm quyền mà ở đây là tự ký đếch có cơ quan nào hết. Public key là ví dụ cái mã vạch trên chứng minh thư thôi, còn cert là cả cái chứng minh thư, gồm public key, tên họ, ngày tháng năm sinh, dấu mộc của cơ quan thẩm quyền.

4. Chứa public key, các thông tin khác về cert này. Hình như tụi CA nó sẽ lấy Common Name (CN) để đưa vào subject alt name là tên trang web được ký xác nhận là xài public key này. Còn mình tự ký thì đưa qua cái domains.ext muốn viết gì ở đó thì viết. Google CSR wiki xem nó viết cái gì
TG0OxM9.gif


5. Hiểu sơ sơ là vậy, nhưng CA còn phải thêm common name từ csr vào subject alt names gì đó nữa. Có đúng "localhost" trong subject alt names thì browser mới cho phép sử dụng cert này cho trang localhost. Còn phải thêm usage cho key này nữa, ở đây thì key này để làm digital signature rồi cái gì gì nữa trong file domains.ext đó.

6. Đúng ròi đó fen. Cái này gọi là signing chain gì đó thì phải ko nhớ rõ. Các cert bình thường thì nó có 1 root CA, root CA này sign cho 1 hoặc nhiều cert khác, cho các cert này usage là có thể ký cho các cert khác nữa. Sau cùng mới là cert của website, các cert này ko có quyền sign cho các cert khác. Ví dụ ISRG là root CA, sign cho Let's Encrypt (LE), cho LE khả năng ký xác nhận các cert khác. Rồi LE sẽ ký cho cert của example.com, cert này ko có khả năng ký nữa.
Lý do thêm 1 thằng trung gian như LE nữa mà ISRG ko ký trực tiếp thì có lẽ là để tránh bị tấn công tập trung hay sao ấy. Ví dụ ISRG kí cho 100 triệu trang web, chính phủ Mẽo muốn bẻ khóa https 1 trong các trang này chỉ cần tấn công ISRG là xong, 1 hòn đá bắn chết 100tr con chym. Nếu ISRG kí cho 10 thằng trung gian, mỗi thằng trung gian ký cho 10tr trang thì 1 hòn đá chỉ giết 10tr con chym thoy. Nói chung Kute cũng đéo biết thêm trung gian làm gì chém gió vậy thoy
1xEuo02.gif
Móa Kute vừa đá bóng hay vừa code giỏi vậy, đúng nam thần
1wi66Fj.gif
 
1. Thực tế là Kute gg từ nguồn khác ra 1 dòng đó rồi mới gg tiếp ra cái gist này, thấy xài ok nên cũng kệ mợ nó
rl1Kgfo.gif
Trong cái .crt đã có public key sẵn rồi nên ko cần file public key kia lắm.

2. rootCA.crt là cert là bundle chung public key và các thông tin khác như country code, organization, common name, hạn sử dụng gì đó, và được (self)sign bằng private key. Private key chỉ là 1 con số d bự 2048 bit + 1 con số n=p*q 2048 bit, 1024 bit mỗi con số nguyên tố p, q (còn có thể có vài con số khác d1 d2 gì đấy tạo ra từ p q nhưng ko cần thiết). Dùng private key tự ký cho public key tương ứng nghĩa là self-signed là giống như Kute tự viết tên mình lên mảnh giấy rồi kí tên bảo đây là chứng minh thư của Kute vậy đó. Bố thằng lào tin
1xEuo02.gif


3. Ko biết cái .pem kia chứa cái gì nhưng .crt chứa public key, chứa thông tin khác như tên cert v.v.., và chữ ký của cơ quan thẩm quyền mà ở đây là tự ký đếch có cơ quan nào hết. Public key là ví dụ cái mã vạch trên chứng minh thư thôi, còn cert là cả cái chứng minh thư, gồm public key, tên họ, ngày tháng năm sinh, dấu mộc của cơ quan thẩm quyền, à còn cái quan trọng khác nữa là hạn sử dụng.

4. Chứa public key, các thông tin khác về cert này. Hình như tụi CA nó sẽ lấy Common Name (CN) để đưa vào subject alt name là tên trang web được ký xác nhận là xài public key này. Còn mình tự ký thì đưa qua cái domains.ext muốn viết gì ở đó thì viết. Google CSR wiki xem nó viết cái gì
TG0OxM9.gif


5. Hiểu sơ sơ là vậy, nhưng CA còn phải thêm common name từ csr vào subject alt names gì đó nữa. Có đúng "localhost" trong subject alt names thì browser mới cho phép sử dụng cert này cho trang localhost. Còn phải thêm usage cho key này nữa, ở đây thì key này để làm digital signature rồi cái gì gì nữa trong file domains.ext đó.

6. Đúng ròi đó fen. Cái này gọi là signing chain gì đó thì phải ko nhớ rõ. Các cert bình thường thì nó có 1 root CA, root CA này sign cho 1 hoặc nhiều cert khác, cho các cert này usage là có thể ký cho các cert khác nữa. Sau cùng mới là cert của website, các cert này ko có quyền sign cho các cert khác. Ví dụ ISRG là root CA, sign cho Let's Encrypt (LE), cho LE khả năng ký xác nhận các cert khác. Rồi LE sẽ ký cho cert của example.com, cert này ko có khả năng ký nữa.
Lý do thêm 1 thằng trung gian như LE nữa mà ISRG ko ký trực tiếp thì có lẽ là để tránh bị tấn công tập trung hay sao ấy. Ví dụ ISRG kí cho 100 triệu trang web, chính phủ Mẽo muốn bẻ khóa https 1 trong các trang này chỉ cần tấn công ISRG là xong, 1 hòn đá bắn chết 100tr con chym. Nếu ISRG kí cho 10 thằng trung gian, mỗi thằng trung gian ký cho 10tr trang thì 1 hòn đá chỉ giết 10tr con chym thoy. Nói chung Kute cũng đéo biết thêm trung gian làm gì chém gió vậy thoy
1xEuo02.gif
Có lẽ mô hình giống kí chứng minh thư, nhà nước VN là root CA, ủy quyền cho mấy thằng trung gian là các tỉnh thành đóng mộc cấp phát cmt.
Ở đây do tự ký và chỉ xài cho localhost nên bỏ bước trung gian đi. RootCA tự ký cho cert của website luôn.
Em cảm ơn thím nhiều lắm
:sweet_kiss::sweet_kiss::sweet_kiss:


via theNEXTvoz for iPhone
 
dễ nhất thì bây giờ chắc có thằng này mkcert. chỉ cần cài đặt sau đó chạy lệnh install của nó là được.
Ví dụ mình từng làm để setup cho việc dev ứng dụng Angular
Thấy nó cũng nhanh gọn thím nhỉ, bản chất của nó cũng là tạp CA và sau đó dùng CA đó cấp cert cho các link. Dùng OpenSSL thì mình phải tự làm, còn dùng tool mkcert thì nó làm thay cho mình

via theNEXTvoz for iPhone
 
Back
Top