[MUSIC]
Trong bài giảng trước, chúng tôi đã học được về HTTPS và làm thế nào họ có thể thực hiện
giao tiếp an toàn giữa máy khách và máy chủ.
Chúng tôi cũng học được một chút về mật mã,
đủ để hiểu cách HTTPS hoạt động.
Để chúng tôi cấu hình máy chủ HTTP của chúng
tôi, chúng tôi cần phải có được một khóa công khai và chứng chỉ.
Bây giờ chúng ta sẽ cấu hình máy chủ Confant của chúng tôi để sử dụng HTTPS trong bài tập này.
Vì vậy, chúng ta hãy tiến hành về phía trước, trước tiên để tạo khóa và
chứng chỉ mà chúng ta có thể sử dụng cho máy chủ của chúng tôi và
sau đó sửa đổi ứng dụng thể hiện của chúng tôi để hỗ trợ HTTPS.
Để bắt đầu bài tập này, hãy vào thư mục máy chủ Confant.
Và sau đó trong cửa sổ thiết bị đầu cuối hoặc lệnh của bạn và
sau đó đi vào thư mục bin bên trong thư mục máy chủ Confect.
Và trong thư mục bin, bạn sẽ thấy một tệp có tên www.
Đây là thư mục mà chúng tôi sẽ tạo ra khóa riêng của chúng tôi và
sau đó cũng tạo ra chứng chỉ cho
máy chủ HTTPS của chúng tôi bằng cách sử dụng một công cụ dòng lệnh được gọi là OpenSSL.
Bây giờ OpenSSL thường được cài đặt trên máy Mac OS theo mặc định.
Đối với máy Windows, bạn có thể cần phải tải xuống và cài đặt OpenSSL một cách rõ ràng.
Bây giờ tôi đã cung cấp một vài liên kết trong hướng dẫn để bạn đi và
lấy OpenSSL.
Tôi cũng đã cung cấp cho bạn một trang web nơi bạn có thể tạo
khóa riêng tự ký và chứng chỉ.
Vì vậy, chúng ta hãy đi và xem xét nhanh điều đó.
Nếu bạn đang chạy một máy Windows và
nếu bạn chưa cài đặt OpenSSL.
Sau đó, liên kết này cung cấp các chương trình nhị phân cho
OpenSSL mà bạn có thể tải về và cài đặt trên máy Windows của bạn.
Vì vậy, liên kết này được cung cấp trong hướng dẫn cho bài tập này.
Vì vậy, đi vào đó,
bạn sẽ tìm thấy một số tải về các
bản phân phối liên quan đến OpenSSL của bên thứ ba mà bạn có thể tải xuống và cài đặt trên máy tính của bạn.
Vì vậy, cài đặt một trong những để tiếp tục
với bài tập này nếu bạn không có OpenSSL đã có trên máy tính của bạn.
Bây giờ, cũng nếu bạn muốn một cách khác để
tạo khóa riêng và chứng chỉ của bạn.
Dưới đây là một bài viết blog, một liên kết mà tôi đã cung cấp trong các hướng dẫn,
cũng giải thích cách thiết lập máy Windows của bạn với
OpenSSL và cũng tạo khóa riêng và chứng chỉ.
Vì vậy, hãy đi qua các bước này để cấu hình máy Windows của bạn để
tạo khóa riêng và chứng chỉ.
Bây giờ, nếu bạn không muốn cài đặt OpenSSL, sau đó đây là một liên kết
đến một trang web cho phép bạn tạo ra
có chứng chỉ SSL tự ký và khóa như bạn thấy ở đây.
Vì vậy, một liên kết đến trang web này cũng được cung cấp trong hướng dẫn.
Vì vậy, bạn có thể sử dụng máy chủ để tạo ra chứng chỉ SSL và
khóa cho máy Windows của bạn.
Vì vậy, bất kỳ ai của phương pháp này có thể được sử dụng để
tạo khóa riêng và chứng chỉ cho máy Windows của bạn.
Kể từ khi tôi đang chạy trên một máy OSX,
tôi sẽ tạo ra khóa riêng tư và chứng chỉ sử dụng OpenSSL.
Vì vậy, đi đến thiết bị đầu cuối, hãy để tôi gõ openssl genrsa
1024, có nghĩa là tôi sẽ tạo ra một khóa riêng của kích thước 1024.
Vì vậy, tôi sẽ đưa điều này vào một tập tin có tên là khóa riêng, và một
khi điều này được tạo ra, sau đó chúng tôi sẽ tạo ra các tập tin cert.csr tương ứng
vì vậy nó sẽ nói openssl req yêu cầu.
Vì vậy, chúng tôi đang yêu cầu một chứng chỉ mới,
với khóa private.key, và nó sẽ tạo ra điều đó.
CERT.CSR đây.
Bây giờ, khi bạn tạo ra cert.csr, nó sẽ đưa ra một vài câu hỏi
để bạn điền vào.
Bạn có thể chấp nhận các giá trị mặc định hoặc
bạn có thể điền vào các giá trị của riêng bạn nếu bạn chọn.
Nó không thực sự quan trọng bởi vì chứng chỉ này chúng tôi chỉ sử dụng trong
máy tính của chúng tôi để kiểm tra máy chủ HTTPS của chúng tôi.
Vì vậy, để tôi điền vào một số chi tiết.
Tôi sẽ để lại một vài thứ trống rỗng ở đó.
Và điều đó sẽ làm việc tốt,
nó không thực sự quan trọng cho dù bạn điền thông tin này hay không.
Vì vậy, một khi bạn làm điều đó cert.csr của bạn được tạo ra và
từ đó họ sẽ tạo ra chứng chỉ phân phối để
cho rằng chúng tôi sẽ gõ tại dấu nhắc lệnh
openssl x509 -req -in cert.csr -signkey
private.key -out certificate ate.pem.
Vì vậy, điều này sẽ tạo ra chứng chỉ cho
chúng tôi, và vì vậy một
khi bạn hoàn thành các bước này, khi
bạn nhìn vào thư mục của bạn, bạn sẽ thấy rằng bạn có private.key
, cert.csr và certificate ate.pem trong đó.
Điều này sẽ được yêu cầu để cấu hình máy chủ HTTPS của chúng tôi.
Vì vậy, bây giờ để cấu hình máy chủ HTTPS, chúng ta hãy đi đến trình soạn thảo của chúng tôi.
Trong trình soạn thảo, chúng tôi sẽ đi đến thư mục bin này ở đây.
Và trong thư mục bin, bạn sẽ thấy tệp này được gọi là www.
Chúng tôi đã xem xét một thời gian ngắn tập tin này trong một trong những bài tập trước đó.
Bây giờ đi vào tập tin này, chúng tôi sẽ
cũng nhập khẩu mô-đun lõi HTTPS, vì vậy
chúng tôi sẽ nói HTTPS yêu cầu HTTPS Và
chúng tôi cũng sẽ yêu cầu mô-đun hệ thống tập tin.
Bạn đã gặp phải mô-đun hệ thống tệp trước đó
trong một trong các bài tập.
Vì vậy, chúng tôi sẽ nhập cả hai trong số này.
Và sau đó, đi xuống đây, chúng tôi sẽ cấu hình số cổng mà
máy chủ HTTPS của chúng tôi sẽ chạy, vì vậy chúng tôi sẽ nói app.set và
chúng tôi sẽ nói SecPort.
Vì vậy, chúng tôi sẽ thiết lập một biến ở đây gọi là cổng an toàn và
sau đó tôi sẽ khởi tạo này để cổng 443.
Bây giờ, tại sao tôi sử dụng cổng này+443?
Trong một máy chủ tiêu chuẩn, nếu máy chủ của bạn hoạt động như một máy chủ web,
giao thức HTTP của bạn sẽ chạy ở cổng số 80 trên máy chủ của bạn.
Và HTTP an toàn sẽ chạy trên cổng số 443.
Bây giờ bạn sẽ thường không muốn sử dụng các cổng dành riêng
trong một ứng dụng phát triển nhưng chúng tôi đang làm trong khóa học này.
Thay vào đó, như bạn đã thấy trước đó,
chúng tôi đã cấu hình số cổng của chúng tôi để 3000 nơi máy chủ HTTP của chúng tôi đang chạy.
Vì vậy, tôi sẽ chạy máy chủ HTTPS, tại cổng số 3443.
Vậy là 3000 cộng với 443.
Vì vậy, đó là lý do tại sao tôi tuyên bố cổng an toàn này.
Là cổ+443, vì vậy máy chủ HTTPS của chúng tôi sẽ chạy ở cổng số 443.
Tôi vẫn sẽ chạy máy chủ HTTP tại cổng 3000,
chúng tôi đã tạo ra máy chủ HTTP ở đây trong WWW, hay đúng hơn,
điều này được tự động tạo ra bởi máy phát nhanh.
Bây giờ, kể từ khi máy chủ HTTP đã được cấu hình,
bây giờ chúng ta sẽ cấu hình máy chủ HTTPS.
Vì vậy, để cấu hình máy chủ HTTPS, ngay sau khi chúng tôi cấu hình máy chủ HTTP.
Bây giờ lý do tại sao tôi sẽ vẫn chạy máy chủ HTTP là,
nếu tôi nhận được một yêu cầu trên cổng của máy chủ HTTP sau đó,
yêu cầu đó sẽ được chuyển hướng đến máy chủ HTTPS.
Vì vậy, máy chủ của tôi sẽ chỉ yêu cầu dịch vụ đến trên các cổng HTTPS.
Nhưng nếu tình cờ bất cứ ai truy cập máy chủ tại cổng HTTP,
tôi sẽ chuyển hướng yêu cầu đó đến cổng HTTPS.
Chúng ta sẽ làm điều đó một chút sau.
Trước tiên, hãy cấu hình máy chủ HTTPS.
Vì vậy, để cấu hình máy chủ HTTPS, ngay tại đây,
tôi sẽ khai báo một vài tùy chọn ở đây cho máy chủ HTTPS của tôi.
Bây giờ nhớ lại rằng đối với một máy chủ HTTPS, chúng ta cần phải cấu hình khóa riêng và
chứng chỉ mà máy chủ HTTPS của tôi sẽ sử dụng.
Vì vậy, trong các tùy chọn, tôi sẽ chỉ định chìa khóa và
sau đó tôi sẽ sử dụng hệ thống tập tin và sau đó tôi sẽ nói, ReadFileSync.
Vì vậy, tôi sẽ đọc tập tin này đồng bộ để tôi sẽ hoàn thành việc đọc trong tập tin
trước khi tôi có thể cấu hình máy chủ HTTPS của tôi.
Vì vậy, tôi sẽ đọc tập tin này từ __dirname.
Bạn đã biết lý do tại sao tôi sử dụng __dirname từ các
bài tập trước đó, nơi chúng tôi thấy mô-đun hệ thống năm đang được sử dụng.
Và sau đó, vì vậy tôi sẽ nói __dirname+.
Vì vậy, ở đây, chúng tôi cung cấp đường dẫn đến private.key.
Bây giờ, nhớ lại rằng www này nằm trong thư mục bin.
Và private.key cũng nằm trong thư mục bin, vì vậy
đó là lý do tại sao tôi sẽ nói dirname+ này, vì vậy điều này sẽ chỉ
định cho hệ thống tập tin đọc mô-đun rằng các tập tin nên được
đọc từ thư mục bin này, từ tập tin private.key ở đây.
Bây giờ cũng, chúng tôi sẽ đọc trong giấy chứng nhận ở đây.
Vì vậy, chúng tôi sẽ nói, cert FS.readFileSync.
Vì vậy, nó sẽ đồng bộ đọc tập tin có nghĩa là,
các tập tin sẽ được đọc hoàn toàn trước khi bạn tiếp tục bước tiếp theo ở đây.
Và tập tin mà chúng ta cần đọc cũng là __dirname+.
Và chúng tôi sẽ nói, /certificate ate.pem, mà chúng tôi đã tạo ra trước đó.
Và đó phải là một dấu phẩy, và tôi không nên đặt một dấu chấm phẩy ở đó,
bởi vì đây là một đối tượng JavaScript mà chúng tôi đã xác định có các tùy chọn.
Vì vậy, một khi chúng ta xác định đối tượng JavaScript, sau đó chúng ta hãy cấu hình máy chủ an toàn.
Vì vậy, chúng ta sẽ nói var Securever https.
Nhớ lại rằng, bây giờ, chúng tôi sẽ sử dụng https, và sau đó chúng tôi sẽ nói CreateServer.
Vì vậy, nhớ lại rằng đối với HTTP, chúng tôi cấu hình máy chủ của chúng tôi như thế này ở đây.
Đối với máy chủ an toàn, chúng tôi sẽ tạo ra rằng bằng cách nói,
var Securever https.CreateServer, và sau đó chúng tôi sẽ cung cấp
các tùy chọn mà chúng tôi vừa cấu hình và sau đó phần thứ hai là ứng dụng ở đây.
Vì vậy, Securever của tôi là tốt,
cũng sẽ có sẵn cho ứng dụng của tôi để truy cập.
Bây giờ dưới đây, tôi sẽ cấu
hình Securever.Nghe trên số cổng,
Secport.
Nhớ lại rằng ở đây chúng tôi đã thực hiện một app.set SecPort, vì vậy
chúng tôi đặt giá trị này ở đây để số cổng an toàn.
Và sau đó dưới đây, chúng tôi đang nói app.get.
Vì vậy, điều này có nghĩa rằng giá trị này mà chúng tôi đã
cấu hình trước đó sẽ có sẵn cho
chúng tôi để cấu hình cổng nghe
của chúng tôi cho máy chủ của chúng tôi, app.get SecPort, và
sau đó cung cấp, chức năng gọi lại ở đây.
Và bên trong chức năng gọi lại này, chúng ta sẽ nói,
console.log Server lắng nghe trên cổng.
Hãy làm máy chủ an toàn lắng nghe trên cổng
Và sau đó, một khi chúng tôi cấu hình SecureVerer,
sau đó chúng tôi cần phải, Xem, SecureVerer trên.
Vì vậy, nếu SecuReserver nhận được một sự kiện lỗi,
sau đó chúng tôi sẽ thích onError, được cấu hình dưới đây, để xử lý điều đó.
Và sau đó chúng ta sẽ nói, Secureserver.on.
Nghe, vì vậy nếu bạn nhận được sự kiện nghe,
sau đó chúng tôi sẽ gọi onListening.
Bây giờ các onError và onListening được cấu hình ở đâu?
Nếu bạn đi xuống mã ở đây, xuống dưới đây.
Bạn đang chỉ định hai chức năng onError chức năng ở đây,
và sau đó chức năng onListening ở đây.
Vì vậy, chúng tôi sẽ được sử dụng hai chức năng này để cấu hình máy chủ của chúng tôi ở đây.
Vì vậy, với những thay đổi này,
máy chủ của tôi bây giờ được cấu hình để cũng chạy SecuReserver tại cổng số 443.
Chúng tôi đã cấu hình máy chủ HTTP tiêu chuẩn ở đây rồi.
Vì vậy, một khi chúng tôi đã thực hiện hai, sau đó, cập nhật tiếp theo của chúng tôi sẽ được trong tập tin app.js.
Vì vậy, đi đến tập tin app.js Những gì tôi sẽ làm là để cấu hình
máy chủ này như vậy mà nó sẽ chuyển hướng bất kỳ lưu lượng truy cập đến cổng không an toàn.
Đó là cổng số 3.000, nó sẽ chuyển hướng yêu cầu đó đến cổng an toàn.
Vì vậy, để làm điều đó, hãy để tôi thiết lập một middleware ngay sau khi chúng tôi khai báo app.express.
Vì vậy, ở đây chúng tôi sẽ nói, app.all, do đó, có nghĩa là, cho
tất cả các yêu cầu bất kể đường dẫn trong yêu cầu là gì.
Yêu cầu riêng sắp tới, Tôi sẽ chuyển hướng đó đến,
Vì vậy, chúng ta sẽ nói rec, res, tiếp theo, và
các chức năng gọi lại được định nghĩa ở đây.
Và vì vậy chúng tôi sẽ, Khai báo các chức năng bên trong đây.
Và chúng tôi sẽ nói, nếu req.secure.
Vì vậy, có nghĩa là, nếu yêu cầu đến đã là một yêu cầu an toàn,
vậy làm thế nào để chúng ta biết điều đó?
Nếu yêu cầu đến đã là một yêu cầu an toàn, sau đó
đối tượng request sẽ mang cờ này được gọi là secure mà sẽ được thiết lập thành true.
Nếu yêu cầu đến không phải là tất cả các cổng an toàn nhưng
thay vào đó là đến cổng không an toàn, sau đó các write.secure sẽ không được thiết lập.
Vì vậy, đó là điều tôi đang chăm sóc.
Nếu nó đang đến cổng an toàn đã, tôi sẽ đi tiếp
mà không làm bất cứ điều gì bởi vì nó đã đến cổng an toàn.
Vì vậy, tôi có thể nói đơn giản, tiếp theo.
Nếu không, vì vậy chúng tôi sẽ nói, trở lại tiếp theo.
Nếu không, vì vậy nếu không sẽ xảy ra,
Khi nó đang đến cổng không an toàn.
Vì vậy, trong trường hợp này, tôi sẽ nói res.redirect.
Vì vậy, phương pháp chuyển hướng có sẵn,
chuyển hướng yêu cầu đến đến URL khác.
Vì vậy, tôi sẽ chuyển hướng yêu cầu không an toàn này để https://.
Vì vậy, tôi chuyển hướng yêu cầu này đến tên req.host.
Vì vậy, yêu cầu sẽ đã mang tên máy chủ.
Vì vậy, bởi vì điều này đang đến cùng một máy chủ, vì vậy
tôi đang chuyển hướng đến cùng một máy chủ.
Và sau đó chúng ta sẽ nói +,
; + app.get.
Bây giờ nhớ lại rằng chúng tôi đã cấu hình cổng an toàn trong app.get ở đó.
Vì vậy, chúng tôi sẽ nói app.get Secport + req.url.
Bây giờ req.url này sẽ chứa phần còn lại của đường dẫn
ngoại trừ tên máy chủ, và số cổng.
Vì vậy, nếu bạn nói một localhost:3000,
localhost:3000 sẽ được bao phủ bởi phần đầu tiên và
điều này sẽ được chuyển hướng đến localhost:3443 bởi cấu hình này ở đây.
Và sau đó, phần còn lại của nó, req.url sẽ chứa đường dẫn thực tế trên máy chủ.
Vì vậy, chúng tôi chỉ cần thêm nó vào đường dẫn chuyển hướng, và
đây là đường dẫn mà tôi sẽ chuyển hướng thông báo yêu cầu đến.
Vì vậy, một khi tôi chuyển hướng tin nhắn yêu cầu đến,
sau đó tin nhắn yêu cầu của tôi sẽ được chuyển hướng đến cổng bảo mật.
Và một thay đổi cuối cùng có thể res.redirect,
chúng tôi sẽ thêm mã trạng thái bằng văn bản là 307.
307 ở đây đại diện rằng tài nguyên mục tiêu nằm tạm thời dưới
URL khác nhau.
Và đại lý người dùng không được thay đổi phương thức yêu cầu nếu nó
cải cách trong chuyển hướng tự động đến URL đó.
Vì vậy, tôi sẽ mong đợi đại lý người dùng thử lại
với cùng một phương pháp mà họ đã sử dụng cho điểm kết thúc ban đầu.
Đó là nó, rằng sự thay đổi mà tôi cần phải thực hiện trong tập tin app.js.
Vì vậy, sau khi thay đổi app.js, và www, và
cũng tạo ra khóa và chứng chỉ,
bây giờ chúng ta có thể lưu các thay đổi, và đi và khởi động máy chủ của chúng tôi.
Đi đến thiết bị đầu cuối hoặc cửa sổ lệnh, hãy đảm bảo rằng bạn đã
trở lại trong thư mục ConfusionServer của bạn, và sau đó khởi động máy chủ.
Vì vậy, tôi đang ở đầu cuối gõ npm bắt đầu.
Và máy chủ của bạn sẽ được lên và chạy, và bạn cũng nhận thấy rằng chúng tôi đang in
ra đây nói, Máy chủ an toàn lắng nghe trên cổng số 3443 ở đây.
Để nhấn mạnh máy chủ an toàn, hãy truy cập trình duyệt như Chrome ở đây.
Và sau đó, hãy để tôi lần đầu tiên truy cập vào máy chủ an toàn tại
localhost:3443 đó là nơi máy chủ an toàn của tôi đang chạy.
Và lưu ý rằng khi tôi thử https://localhost3443 trong trình duyệt,
nó sẽ đưa ra thông báo này ở đây nói, Kết nối của bạn không phải là riêng tư.
Rõ ràng, bởi vì chứng chỉ những gì chúng tôi đang sử dụng ngay bây giờ
là một chứng chỉ tự ký.
Và điều này không được Chrome công nhận là chứng chỉ hợp lệ.
Nhưng kể từ khi chúng ta biết những gì chúng ta đang làm, chúng ta chấp nhận
rằng chúng ta sẽ cho phép tiến tới máy chủ cụ thể này.
Bây giờ, tôi sẽ khuyên bạn không bao giờ làm điều này trên
bất kỳ trang web nào đi kèm với đề xuất.
Chúng tôi đang làm điều này đặc biệt trong bài tập này bởi vì
chúng tôi biết chính xác nơi máy chủ là, và
chúng tôi biết rằng chúng tôi đã cấu hình một cách rõ ràng máy chủ mình.
Nhưng nếu bất kỳ trang web nào khác đưa ra thông báo này, tôi sẽ
khuyên bạn không nên chấp nhận đề xuất và tiếp tục truy cập vào máy chủ.
Vì vậy, bạn nên quay trở lại an toàn nếu bạn từng thấy điều này hoặc trên bất kỳ trang web nào khác.
Nhưng kể từ khi chúng ta biết rằng đây là máy chủ riêng của chúng tôi, tôi sẽ tiến hành
localhost ở đây, và sau đó bạn sẽ thấy rằng chúng tôi đang truy cập vào máy chủ Express.
Và bạn cũng sẽ nhận thấy trên đây
rằng trình duyệt của bạn đang cho bạn thấy rằng bạn đang truy cập vào một máy chủ không an toàn.
Khi bạn nhấp vào đó, bạn sẽ thấy thông báo
ở đây nói rằng kết nối của bạn với trang web là không an toàn.
Nhưng chúng ta biết rằng vì chúng ta đang tự chạy máy chủ, điều này là okay để làm như vậy.
Vì vậy, đây là cách bạn sẽ truy cập vào máy chủ HTTPS.
Bây giờ, hãy để tôi cố gắng truy cập vào cùng một máy chủ HTTP nhưng, hãy để tôi truy cập vào,
chuẩn localhost:3000.
Đây là nơi máy chủ không an toàn của chúng tôi đến máy chủ HTTP bình thường đang chạy.
Vì vậy, khi tôi cố gắng truy cập rằng HTTP localhost:3000,
sau đó bạn ngay lập tức thấy rằng máy chủ của tôi sẽ chuyển hướng tôi đến máy chủ an toàn.
Vì vậy, theo cách này, máy chủ của bạn mà chúng tôi vừa cấu hình
đảm bảo rằng bạn sẽ luôn luôn truy cập vào máy chủ trên cổng an toàn của nó.
Điều này cũng đảm bảo thực tế là, khi bạn đang trao đổi,
khi bạn đang gửi thông tin đăng nhập của bạn, và như vậy,
tất cả các trao đổi thông tin đăng nhập trong tiêu đề của thư.
Và cũng khi bạn đăng nhập với xác thực địa phương, tất cả những gì được thực hiện
một cách an toàn trong một kênh được mã hóa giữa khách hàng của bạn và máy chủ.
Vì vậy, bây giờ, chúng tôi đã cấu hình máy chủ của chúng tôi là một máy chủ HTTPS an toàn.
Với điều này, chúng tôi hoàn thành bài tập này.
Trong bài tập này, chúng ta đã học được cách cấu hình một máy chủ HTTP an toàn hoặc
sử dụng giao thức HTTPS.
Với điều này, chúng tôi hoàn thành bài tập này.
Đây là thời điểm tốt để bạn thực hiện một cam kết git với thông điệp, HTTPS.
[ NHẠC]