An-Decor Nội Thất Trang Trí

An-Decor Nội Thất Trang Trí

Chúng tôi không chỉ làm đẹp, chúng tôi mang đến những không an lành và thịnh vượng…

Với tâm niệm như vậy, An-Decor tự nhận thức vai trò trong việc cung cấp những sản phẩm trang trí không chỉ đẹp, mà còn giúp chủ nhân ngôi nhà có những góc riêng thư thái, an lành và ấm áp, khi trở về tổ ấm của mình.

Với hàng nghìn sản phẩm Decor trang trí do chúng tôi cung cấp, quí khách hàng có thể dễ dàng lựa chọn những món đồ khách hàng yêu quí để tô điểm cho ngôi nhà của mình, và chúng tôi vô cùng vui mừng, khi những món đồ ấy có thể thổi hồn cho từng góc nhà thêm đẹp.

Là một trong những đơn vị lớn nhất của Hà Nội và cả nước về cung cấp các sản phẩm Decor trang trí

Với hàng nghìn khách hàng đã tin tưởng và tin yêu, trong đó có nhiều khách hàng lớn là các Khách sạn, tập đoàn lớn, An-Decor sẽ luôn khẳng định vị thế tiên phong trong xu hướng đồ trang trí của mọi gia đình.

An-Decor (Best Home) Nội Thất Trang trí

Hotline: 0941878912 – 0911221669

Website: An-decor.vn

E-mail: info@an-decor.vn

Showroom: 96 Võ Chí Công – Cầu Giấy – Hà Nội

FanPage: Facebook.com/NoiThatTrangTri.AnDecor/

 

s3.PNG

11 Cách học lập trình Java chỉ trong “vài tuần”

Học lập trình Java cơ bản cho người mới bắt đầu
https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js
https://oss.maxcdn.com/respond/1.4.2/respond.min.js

Bạn đừng nên nhầm lẫn ngôn ngữ lập trình Java với JavaScript, nó là ngôn ngữ được tạo ra để “viết một lần, chạy mọi nơi” – nói theo lối kỹ thuật nghĩa là nó có thể chạy tốt trên bất kỳ thiết bị nào hiện có.

Java là một trong những ngôn ngữ lập trình được sử dụng nhiều nhất hiện nay.
Java là một trong những ngôn ngữ lập trình được sử dụng nhiều nhất hiện nay.

Ngôn ngữ lập trình Java là gì?

Chúng ta tương tác với Java trong các hoạt động hàng ngày, dù có nhận ra thực tế đó hay không, và có nhiều trường hợp – một trang web sẽ đòi chúng ta cần phải cài Java thì mới có thể xem được, có rất nhiều trang web sử dụng flash và có một số component flash được tích hợp trong lõi hệ thống.

Java cũng là một chương trình bạn thường tải về ngay sau khi mua một chiếc máy tính mới – tôi không biết là liệu có ai sẽ cài sẵn Java như là một chương trình mặc định trong các hệ điều hành hay không. Lịch sử của nó với những vấn đề về bảo mật thì không phải là điều thú vị, nhưng chính những vấn đề đó đã làm cho ngôn ngữ này ngày hoàn thiện như bây giờ.

Từ các máy laptop cho đến các máy chủ dữ liệu (datacenter), các game console cho đến các siêu máy tính trong nghiên cứu khoa học, điện thoại di động đến Internet, Java có mặt ở khắp mọi nơi!

  • 97% Enterprise Desktops chạy Java
  • 89% máy Desktops (hoặc Computers) ở Mỹ chạy Java
  • 9 triệu lập trình viên Java trên khắp thế giới
  • Java là lựa chọn số #1 dành cho các lập trình viên
  • Java là nền tảng phát triển số #1
  • Có 3 tỷ thiết bị di động chạy Java
  • 100% đầu đĩa Blu-ray chạy Java
  • 5 tỷ Java Card đang được sử dụng
  • 125 triệu thiết bị TV chạy Java
  • 5 trong Top 5 các nhà sản xuất thiết bị gốc (Original Equipment Manufacturers) sử dụng Java ME

như chúng ta có thể thấy các số liệu thống kê ở trên, ngôn ngữ lập trình Java rất được ưa chuộng, và chắc chắn có một thị trường rất lớn dành cho nó.

Mức lương cho các lập trình viên Java

Tôi rất thích đề cập một chút đến chủ đề lương của các lập trình viên Java, bao nhiêu tiền mà bạn có thể kiếm được – trong một lượng thời gian hợp lý – bằng cách trở thành một lập trình viên Java toàn thời gian.

Mức lương của lập trình viên Java

Đây là một thống kê lương toàn cầu, không xác định cho bất cứ khu vực nào. Nó xấp xỉ khoảng $85,000 đô-la/năm (gần 1,8 tỷ VNĐ/năm) là một con số lương rất cao, khi mà bạn có thể học ngôn ngữ này miễn phí. Với suy nghĩ đó, bạn hãy xem danh sách các nguồn tài nguyên sau đây mà đã giúp chúng tôi học Java chỉ trong một vài tuần.

Khóa học “Java căn bản thực hành” lấy người học làm trung tâm, nhấn mạnh vào kỹ năng tự đào tạo của mỗi học viên trong đó giảng viên chỉ là người trợ giúp, bổ trợ, định hướng. Khóa học “Lập trình Java Spring” tập trung vào thực hành bằng các ví dụ đơn giản, ngắn gọn giúp người học làm quen, trải nghiệm và tự thu nạp kiến thức cho mình.

1. Lập trình Java cho người mới bắt đầu

Lập trình Java cho người mới bắt đầu

Bài viết này đã được đăng một thời gian, và kể từ lúc đó đến nay tôi đã nhận được khá nhiều phản hồi khác nhau, hầu hết mọi người nói rằng trong thực tế cần phải mất nhiều thời gian hơn chứ không chỉ vài tuần mà có thể học được ngôn ngữ lập trình này. Tôi không đồng ý với quan điểm của họ, vì vậy – tôi đã bổ sung thêm khóa học này và đề nghị bạn nên tham gia.

Khóa học này tốn một ít tiền, nhưng nên nhớ rằng bạn sẽ được truy cập vào một cộng đồng chuyên biệt và duy nhất, nơi mà bạn sẽ tìm thấy có tất cả 35,000 học viên đang tham gia khóa học này. Nó chứa trên 10 giờ nội dung, và nhiều hơn 100 bài giảng, cùng hàng trăm thảo luận trên hầu hết các chủ đề liên quan.

Bạn sẽ không thể tìm thấy một cách nào để học Java tốt hơn cách tham gia vào khóa học này, cách thay thế tốt hơn có thể là học trong thực tế từ một chuyên gia, nhưng điều này không phải khi nào cũng thực hiện được dễ dàng. Tôi cũng rất sẵn lòng trả lời các câu hỏi về khóa học này.

2. Lập trình Java cơ bản

Lập trình Java cơ bản

Việc học ngôn ngữ lập trình nào không thực sự quan trọng, chúng ta sẽ luôn bắt đầu với những thứ cơ bản, và Java không phải là trường hợp ngoại lệ. Thật biết ơn trang web chính thức của Oracle (công ty đứng sau hỗ trợ ngôn ngữ Java) khi có một tài liệu tuyệt vời giới thiệu về ngôn ngữ này, giải thích nó là gì và chỉ cho bạn về những thứ cơ bản và cách nó làm việc.

Bạn cũng sẽ tìm thấy có rất nhiều nguồn tài nguyên để học, nhưng điều quan trọng nhất là – trang web này sẽ giúp bạn bắt đầu với tất cả những công cụ cần thiết và những yêu cầu khác khi bắt đầu học Java.

3. Giới thiệu về lập trình Java

Giới thiệu về lập trình Java

Đây là một nguồn tài nguyên tuyệt vời khác, không chỉ bởi vì nó được giới thiệu bởi một trong những trường đại học tốt nhất thế giới, bạn sẽ học được rất nhiều kiến thức chất lượng bằng việc tham gia khóa học nhỏ này. Nó sẽ bắt bạn phải đọc hàng tấn tài liệu, tất cả điều đó là cần thiết trong quá trình học lập trình Java.

Đây cũng được xem là một trong những nguồn tài nguyên thân thiện nhất dành cho người mới bắt đầu học lập trình Java, không quan trọng việc dường như có một chút kỹ thuật ngay lúc đầu tiên. Các bài học gồm nhiều hình ảnh minh họa, các ví dụ code mẫu và tài liệu sẽ giúp bạn tiến lên phía trước.

4. Học lập trình Java trực tuyến

Học lập trình Java trực tuyến

Trong một vài năm trở lại đây, việc học qua các tutorial có tính tương tác đã trở nên khá phổ biến, vì vậy tôi cảm thấy bắt buộc phải thêm vào một số liên kết tới những trang web đó trong danh sách này. Nhưng phải nên nhớ rằng bạn sẽ không học toàn bộ từ những tutorial kiểu tương tác đó, tôi cũng đề xuất bạn nên bắt đầu bằng một vài tutorial cho các chương đầu tiên của bất kỳ cuốn sách nào mà bạn chọn.

Thêm nữa, trang web cho phép bạn viết một số code và chạy thử ngay trên trình duyệt, mà không cần phải lo lắng về việc cài đặt IDE để làm việc với nó.

5. Học lập trình Java theo Hard Way

Học lập trình Java theo Hard Way

Đây là cuốn sách duy nhất trong danh sách này không miễn phí, nhưng cũng đáng đồng tiền bát gạo khi nó là một nguồn tài nguyên hữu ích và thân thiện cho người mới bắt đầu, tôi nghĩ rằng sẽ là một ý tưởng hay khi tôi liệt kê nó vào đây. Nó chỉ có giá khoảng $20 đô-la, rẻ hơn giá của một chiếc áo sơ-mi hàng hiệu mà bạn đang mặc trên người.

Bạn có thể xem (và làm việc với) 16 chương đầu tiên một cách miễn phí và trực tuyến tại link này. Tôi nghĩ rằng có nhiều người sẽ yêu thích cuốn sách này, bởi thiết kế thân thiện của nó kết hợp với các bài tập rất hay, bạn còn đòi hỏi thêm điều gì nữa chứ.

6. Lập trình bằng cách thực hành

Lập trình bằng cách thực hành

Trang web này được tạo ra bởi chính người đã xuất bản cuốn sách mà tôi đã liệt kê ở trên, nó cũng là nguồn cảm hứng để tạo ra cuốn sách đó. Bạn sẽ tìm thấy rất nhiều thách thức mà không yêu cầu nhiều kỹ năng lập trình lúc ban đầu, nhưng khi bạn vượt qua những thách thức này thì chúng sẽ ngày càng trở nên khó hơn.

Tôi luôn tin rằng cách tốt nhất để học một cái gì đó là bằng cách thực hành nó trước tiên, testing và sau đó lại làm lại nó một lần nữa. Hãy chọn lấy bất kỳ một tutorial hoặc cuốn sách nào có trong danh sách này và bạn sẽ sẵn sàng tiến lên phía trước.

7. Nhập môn lập trình Java

Nhập môn lập trình Java

Một số người có sở thích học từ các nội dung video hơn, và điều đó là hoàn toàn chấp nhận được. Thỉnh thoảng, khi bạn đang bận rộn và có rất nhiều thứ phải làm, thì việc học qua video sẽ tốt hơn vì bạn có thể phát lại bất cứ lúc nào, hãy nắm lấy một số kiến thức quan trọng của một ngôn ngữ lập trình, trong trường hợp này là Java.

Đây là một khóa học miễn phí tại Udemy (bạn sẽ cần một tài khoản để xem nó), khóa học đã nhận được trên 100,000 sinh viên đăng ký tham gia, và đó là một trong những khóa học nổi tiếng nhất tại trang web này. Khóa học được dẫn dắt bởi John Purcell, một kỹ sư phần mềm có nhiều năm kinh nghiệm lập trình Java.

Bạn sẽ nhận được gần 20 giờ nội dung học, cùng với trên 70 bài giảng. Nếu bạn vẫn chưa biết đến Udemy, thì bạn cũng sẽ truy cập tới một cộng đồng hỗ trợ rất rộng lớn (tất cả có trên 100,000 sinh viên đã và đang theo học khóa học này), và có một hệ thống hỗ trợ nội bộ để hỏi đáp các vấn đề liên quan.

8. CodingBat

CodingBat

Đừng để cho giao diện của trang web này đánh lừa bạn, nếu nó đơn giản – là vì nó sẽ giữ cho bạn không bị mất tập trung vào những thứ chẳng liên quan. CodingBat (trước đây là JavaBat) là một trong những cách tốt nhất để học Java miễn phí và tương tác trong trình duyệt của bạn. Nó là trang web thứ hai trong danh sách của chúng tôi có đưa ra hình thức học tập qua tương tác, tôi phải nói rằng nó còn tốt hơn cả trang trước đó.

Vấn đề là bạn có thể thấy CodingBat không giống những trang như Codecademy, chúng thường giảng giải mọi thứ từ dưới lên trên, step-by-step. Ở CodingBat thì nhiều hơn vậy, ngoài việc thực hành cái mà bạn đã biết thì ở đây bạn còn chọn cái mà bạn có khả năng làm. Đừng bối rối bởi sự thiếu trật tự của nó, có vô số các tutorial cho mỗi phần và bạn sẽ học được nhanh hơn rất nhiều.

9. Các tutorial về lập trình Java cho người mới học

Các tutorial về lập trình Java cho người mới học

New Boston giờ đây đã được biết đến là nơi có những video tuyệt vời và toàn diện hướng dẫn về các ngôn ngữ lập trình, và Java không phải là một ngoại lệ. Bạn sẽ tìm thấy 80 video dạng step-by-step để học Java và tất cả nó được cung cấp miễn phí, mặc dù tôi nghĩ rằng nó có đôi chút chưa được cập nhật lắm.

Đừng để ý đến điều mà tôi nói về tính cập nhật của nó, đây vẫn là một nguồn tài nguyên hữu ích đến khó tin cho bất kỳ ai có quyết tâm muốn bắt đầu học lập trình Java, thêm nữa nó không yêu cầu bạn phải đăng nhập giống như trang Udemy. Các bình luận khá sâu sắc trên một số video.

10. Lập trình hướng đối tượng với Java

Lập trình hướng đối tượng với Java

Đây là một khóa học của một trường đại học khác, bạn sẽ cần khoảng xấp xỉ 6 tuần để hoàn thành nó. Khóa học rất thân thiện với người mới bắt đầu, và mọi thứ có thể hoàn thành trên trình duyệt. Nó cũng là một trong những tutorial tốt nhất để bắt đầu học cách làm thế nào để cài đặt Java và các công cụ cần thiết. Trong khóa học này, bạn sẽ học tất cả những kiến thức cơ bản của lập trình máy tính, các thuật toán và sử dụng lập trình hướng đối tượng trong ngôn ngữ lập trình Java.

Phần 2 của khóa học cũng có sẵn tại đây, phần này có thời lượng thêm khoảng 6 tuần lập trình nữa. Tổng cộng, bạn sẽ cần khoảng 12-13 tuần để học lập trình Java. Cuối khóa học đó, bạn sẽ biết được cách làm thế nào để xây dựng các ứng dụng cho riêng mình, và làm cách nào để nghĩ giống như một lập trình viên Java thực thụ. Bạn cũng sẵn sàng nâng cao kiến thức và khám phá ngôn ngữ này sâu hơn.

11. Các bài tập lập trình Java

Các bài tập lập trình Java

Tôi kết thúc danh sách này bằng cách cung cấp tới bạn một trang web thực hành lập trình khác, được thiết kế đặc biệt dành cho Java và chứa các câu trả lời cho nhiều câu hỏi liên quan. Việc thực hành các bài tập này là rất quan trọng, đặc biệt khi bạn học một ngôn ngữ như Java – ngôn ngữ mà chẳng dễ dàng với ai khi mới bắt đầu học nó cả.

Tổng cộng có tất cả 30 bài tập cho bạn thực hành, và thay vì nói rằng “khó quá, tôi không thể làm được” – hãy giải lao một lát và khi quay lại bạn thường có câu trả lời xuất hiện trong đầu.

Kết luận

Bài viết này có vẻ như không rõ ràng bằng bài viết về cách học ngôn ngữ Python do tôi viết trước đây, tôi chắc chắn sẽ đổ lỗi cho một thực tế rằng Java không phải là một ngôn ngữ lập trình dễ học, và nó yêu cầu mức độ tập trung cao hơn đến từng chi tiết. Nó cũng nằm trong top các ngôn ngữ lập trình nên học trong năm nay, và có một cộng đồng lớn ở phía sau.

Bạn cũng nên tham gia trao đổi trên các trang như StackOverflow và Reddit – để tìm kiếm câu trả lời cho những câu hỏi thường gặp, và học được nhiều hơn bằng cách đặt các câu hỏi cho chính mình. Nếu không đặt câu hỏi thì chúng ta thừa nhận với bản thân mình rằng chúng ta có thể sống mà không cần một giải pháp, trong khi không phải là hoàn toàn như vậy.

Tôi hy vọng với các tài nguyên, sách và trang web trong bài viết này sẽ có thể giúp ích cho bạn, và dù cho bạn có trở thành một lập trình viên Java chuyên nghiệp hay không, thì tôi cũng nhờ bạn share bài viết này đến với những người đang tìm cách gia nhập vào cộng đồng phát triển phần mềm. Chúc bạn may mắn!

Một tháng làm freelancer

 

  • Bởi Mai Hùng Diên
Freelancer là người làm công việc tự do. Trong giới lập trình những anh em nào lam Freelancer là những anh em có khả năng tự lập rất tốt, tiếng Anh cũng tốt. Đôi khi có chút liều lĩnh, thích tự do, không gò bó. Đây là bài viết của chú Đức NTQ ở trang blog Đói Qua Cơ . Anh em nào học iOS, Android ở Techmaster chinh chiến độ 5 -7 dự án hoàn chỉnh từ A-Z là có thể ra làm riêng được rồi đó. Dám chơi không?
Anh em nào trình độ thực sự ngon, code tốt thử nghiên cứu một lựa chọn khác là làm giảng viên tại Techmaster nhé. Thu nhập / 1 giờ tốt và ổn định hơn nhiều.

E hèm, thực ra thì chưa tròn 1 tháng làm freelancer , nhưng do mình sắp vào Nam rồi nên viết tâm sự luôn. Làm freelancer khác hẳn với làm employee cho một công ty nào đó, kể cả tư nhân lẫn quốc doanh, trong nước lẫn ngoài nước. Trong bài viết sẽ chỉ đề cập đến freelancer.com.

Học lập trình web cơ bản đến nâng cao

Bắt đầu khó khăn

Thực sự thì hoàn cảnh thúc ép mình phải làm freelancer. Cách đây 2 tháng, mình có dự định chuyển vào Nam sinh sống và làm việc, vì không muốn ảnh hưởng đến dự án lớn của công ty mình đang làm hiện tại, thế nên mình chủ động xin nghỉ, và làm online cho một công ty của Úc, có công ty con ở VN. Nhưng vấn đề ở chỗ, cuối tháng 9, đầu tháng 10, họ nhận thấy làm việc online không hiệu quả, và mặc dù mình đã chủ động nói từ đầu là mình chưa có kinh nghiệm làm Angular, và cũng chưa có kinh nghiệm quản lý, nhưng họ một mực cho mình ngừng thử việc vì 2 lý do: performance kém, và quản lý kém (mặc dù mình đã nói từ đầu là kinh nghiệm quản lý kém). Tình hình cấp bách, thế nên chỉ còn một con đường là làm freelancer để kiếm tiền chi trả cho chuyến Nam tiến này.Bắt đầu freelancer có lẽ là một thử thách với bất cứ ai làm coding. Tại sao? Khi bid một dự án trên website freelancer.com, ngoài profile đẹp và một cái proposal letter, người thuê (employer) sẽ nhìn vào 3 tham số quan trọng để đánh giá ứng viên:

  1. Rating và Review/Feedback.
  2. Earning.
  3. Completion Rate.

Cả 3 tham số trên đều quan trọng. Lúc đầu mình nghĩ Rating và Review/Feedback là quan trọng nhất, ai có 5 sao là ổn. Nhưng sau khi làm một dự án fake (tự mình tạo, tự mình hire mình), thì mình nhận ra một điều là: earning và completion rate mới là thứ quan trọng nhất. Cho dù bạn có 3 sao, hay 5 sao đi nữa, thì bạn vẫn không được xếp lên đầu danh sách ứng viên cho dự án nếu không có earning cao. Mà đã không kiếm được dự án nào để làm thì sao mà có earning được.

Chiến thắng dành cho kẻ kiên nhẫn

Những ngày đầu tiên dài dằng dặc, mình liên tục bid, liên tục check dự án, xem cái nào làm được thì bid. Nhưng có vẻ như nữ thần may mắn không mỉm cười với mình. Sau 5 ngày kiêm trì, cuối cùng mình cũng kiếm được một dự án nhỏ: sửa lại HTML/CSS cho một forum chạy vbb. Cảm giác ban đầu thật là sung sướng, sảng khoái. Nhưng rồi bắt đầu làm mình cảm thấy “có phải mình đang bán rẻ sức lao động”. Nhưng cuối cùng thì mình cũng hoàn thành được dự án sau 6 tiếng từ khi bắt đầu. Sau khi kết thúc dự án, mình còn có dịch vụ hậu mãi cho khách hàng là hỗ trợ thêm banner mới cho 1 tháng tiếp theo.

Nhưng những ngày sau đó mình lại không kiếm thêm được một dự án nào. Vậy thì phải thay đổi chiến thuật:

  1. Bid vào những odd job (công việc lạ).
  2. Bid vào những project có ít budget (ít tiền).
  3. Đọc kỹ job description, và có nói về description trong proposal letter của mình.
  4. Undersell dịch vụ của mình: hạ thấp giá so với mặt bằng chung, chịu thiệt khi làm dự án.
  5. Trả lời thật nhanh khi employer liên lạc.
  6. Hỗ trợ hậu mãi.
  7. Walk the extra mile: làm thêm công việc kể cả không có trong job description hoặc thỏa thuận ban đầu.

Áp dụng chiến thuật trên, mình kiếm được thêm 3 dự án nữa. Tất cả đều được mình hỗ trợ hết khả năng, đều làm những yêu cầu mà không có trong thỏa thuận ban đầu. Và tất cả khách hàng đều hài lòng.

Mỗi một khách hàng hài lòng là một cơ hội trong tương lai

Đúng vậy, mỗi một khách hàng hài lòng là một cơ hội trong tương lai. Tại sao vậy?

  1. Một khi họ hài lòng, nếu có việc, họ sẽ lại muốn chất lượng dịch vụ tương đương.
  2. Khi họ hài lòng, họ sẽ tin tưởng bạn, họ sẽ cho bạn password vào web panel, ssh, etc. Và khi đó, họ sẽ ngại khi phải đưa cho một người khác, vì nguy cơ lộ password và mất dữ liệu.

Hiện tại mình đã phục vụ được khoảng gần 10 khách hàng, trong đó có 4 khách hàng sử dụng lại dịch vụ của mình. Một khách hàng người Ả rập thậm chí còn chờ mình 1-2 tuần để mình giải quyết xong công việc hiện tại, để làm cho họ. Một khách hàng người Úc cứ mỗi lần script của họ có vấn đề, họ lại nhờ mình, và vì sửa nhỏ, mình ko lấy tiền, và cái mình được lại là một cơ hội làm việc trong tương lai.

Vậy cảm giác làm freelancer là như nào

Làm freelancer là một dạng làm ông chủ của bản thân mình. Bạn cần kỹ năng sale, vì bạn đang đi bán dịch vụ. Bạn cần kỹ năng giao tiếp, vì bạn phải giao tiếp trực tiếp với khách hàng. Bạn cần kỹ năng chăm sóc khách hàng, vì nếu họ không vui, họ sẽ không trả tiền. Bạn cần kỹ năng quản lý thời gian, vì muốn kiếm được nhiều tiền, bạn phải làm được nhiều việc. Bạn không được ngại công việc, vì nếu ngại công việc thì sẽ không có gì mà làm.

Nếu như làm dự án, sản phẩm ở các công ty, bạn cứ tằng tằng mà làm, cuối tháng nhận lương, rồi sẽ đến lúc bạn cảm thấy chán vì công việc quá vô vị. Thì từ khi làm freelancer, mình cảm thấy thoải mái hơn nhiều. Sáng sớm dậy đều đặn 7h, chỉ riêng việc nghĩ đến không phải tham gia rat race (tức là đi từ nhà đến công ty), không phải hít khói bụi, là đã vui lắm rồi. Làm việc năng suất hơn vì tập trung vào công việc, ít phải lo bị soi mói. Con người thấy khỏe khoắn hơn vì nghỉ ngơi thoải mái, bất cứ lúc nào mình muốn. Tối mình ngủ ngon hơn vì không phải lo lắng nghĩ xem công việc ngày mai giải quyết như nào.

Thực sự thì mình rất thích thú làm freelancer, và mình cũng mong muốn phát triển sự nghiệp theo hướng này.

Nhưng làm freelancer cũng có nhiều vấn đề. Đầu tiên là cảm giác lo lắng, bấp bênh khi không kiếm được việc; hoặc lo lắng ngày mai không kiếm được việc. Rồi lo lắng không hoàn thành được công việc. Và thỉnh thoảng cũng bị employer thúc ép tiến độ. Nhưng tất cả những nhược điểm này đều có thể dễ dàng vượt qua được.

Vậy làm freelancer có khả thi không?

Có chứ! Tháng đầu tiên mình làm mà kiếm được gần 10tr rồi. Mình mong mỗi tháng tăng thêm được 1tr. Nói như vậy không phải là mình khuyên các bạn bỏ hết day job, và chuyển qua làm freelancer, đừng đối đầu với mình, hãy hợp tác với mình nếu bạn muốn.

Điểm

 

 

Hình như tôi chỉ là hệ quả
Của hai đường thẳng giao nhau
Chẳng còn gì
Như khi người ta xuất phát từ một điểm.
Tới đâu ?
Chẳng biết !
Nhưng ai ?
Sẽ là người đi xoá hết tôi đi …

Tin?

 

Tôi luôn tự hỏi, Facebook chọn người thế nào để đưa status của họ lên newsfeed của mình. Suy luận một cách ngớ ngẩn, bèn đoán họ là những người quan tâm đến Tôi hoặc Tôi quan tâm đến họ. Hay một cách khác, họ là một xã hội thu nhỏ trên mạng mà Tôi muốn (hoặc ngầm muốn) được thành một phần của xã hội đó. Tạm gọi là “Xã hội Tôi-XHT”, không phải xã hội đen:)
XHT gồm đủ các lứa tuổi, thành phần, đều đặn hàng ngày cung cấp cho Tôi thế giới dưới cách nhìn của họ. XHT ban đầu bé tí, đa phần là đồng nghiệp, gia đình. Rồi phình dần lên theo tốc độ phát triển của facebook. Thông tin nhiều chiều đa dạng phong phú, đủ các loại thơ ca hò vè, phim, ảnh. Còn rủ nhau lập hội, bán hàng, chăn nuôi sản xuất. Vui như Chợ.
Có điều khác với chợ, nơi lòng tin gần là điều kiện tiên quyết, ở XHT, với thời gian, các thành viên càng mất dần điểm tựa. Họ cũng không giấu diếm điều đó. Người lao động không tin nhà khoa học, khoa học coi thường doanh nhân, doanh nhân đả kích văn nghệ sĩ, còn văn nghệ sĩ thì bất cần đời. Họ cần tình yêu, nhưng lại đi tìm người chung tình ghét. Họ ghét chính phủ, nhưng có việc thì lại đòi chính phủ ra tay. Họ căm thù truyền thông, nhưng nghiến ngấu hưởng thụ các sản phẩm của chúng.
Tôi biết mặt đa số trong số họ và biết chắc họ đều là những người tử tế. Vậy thì điều gì đã đẩy các thành viên của XHT đến tình trạng như vậy? Điều đó làm Tôi day dứt.
Hôm qua Tôi đi taxi. Hết hơn 100,000. Nhờ cậu taxi mặt non choẹt đợi chở về. Hỏi có cần đặt tiền không? Cậu ta cười nhạt, bảo: cháu tin chú, 100 ngàn đáng bao nhiêu mà phải đổi niềm tin hả chú, cháu chạy cố thêm là bù đủ.
Tôi chợt ngộ ra, cậu taxi này tin Tôi, không phải vì Tôi tốt (cậu ấy có biết Tôi là ai đâu), mà cậu ấy tin là mình thừa năng lực để khắc phục những thiệt hại mà niềm tin “mù quáng” có thể gây ra.
Vậy là chúng ta, những thành viên trong XHT không tin nhau, suy cho kỹ có lẽ vì chúng ta đang mất niềm tin vào chính mình.
Chúng ta hoặc không lớn hoặc không lớn được nữa. Chúng ta sợ không trả giá được cho niềm tin đặt nhầm chỗ.
Và chúng ta lựa chọn cách chẳng tin ai nữa:-(

“BUÔNG” !

***Câu chuyện 1:

Một cô gái đến tìm một nhà sư, cô hỏi:
– Thưa thầy, con muốn buông một vài thứ mà không thể, con mệt mỏi quá.
Nhà sư đưa cho cô gái 1 cốc nước và bảo cô cầm, đoạn ông liên tục rót nước sôi nóng vào cốc,nước chảy tràn ra cả tay, làm cô bị phỏng,cô buông tay làm vỡ cốc.
Lúc này nhà sư từ tốn nói:
– Đau rồi tự khắc sẽ buông!
Vấn đề là, tại sao phải đợi tổn thương thật sâu rồi mới buông?

***Câu chuyện 2:

Một chàng trai đến tìm nhà sư , anh hỏi:
-Thưa thầy con muốn buông xuôi vài thứ nhưng con do dự quá, con mệt mỏi vô cùng.
Nhà sư đưa anh ta 1 cái tách và bảo anh cầm, đoạn ông rót đầy tách trà nóng vừa mới pha xong.
Chàng trai nóng quá nhưng anh vẫn không buông tay mà chuyển từ tay này sang tay kia cho đến khi nguội đi rồi uống và cảm nhận thấy rất ngon. Lúc này nhà sư từ tốn nói:
– Cứ đau là buông thì con đã bỏ lỡ những cái tốt đẹp sau đó rồi!
Vấn đề là tại sao cứ đau là phải buông trong khi còn có thể làm cho nó tốt đẹp lên.

GIAO THỨC BẢO MẬT SSL/TLS

PDF Print E-mail

I – Lịch sử phát triển của giao thức SSL & TLS:

Như chúng ta đã biết có hai giao thức bảo mật quan trọng lớp vận chuyển (Layer Transport) có tầm quan trọng cao nhất đối với sự bảo mật của các trình ứng dụng trên Web: đó là hai giao thức SSL và TLS.

Nói chung, có một số khả năng để bảo vệ bằng mật mã lưu lượng dữ liệu HTTP. Ví dụ, vào những năm 1990, tập đoàn CommerceNet đã đề xuất S-HTTP mà về cơ bản là một cải tiến bảo mật của HTTP. Một phần thực thi của S-HTTP đã làm cho có sẵn công cộng trong một phiên bản được chỉnh sửa của trình duyệt Mosaic NCSA mà những người dùng phải mua (trái với trình duyệt Mo NCSA “chuẩn” có sẵn công cộng và miễn phí trên Internet).

Tuy nhiên, cùng thời điểm Netscape Communication đã giới thiệu SSL và một giao thức tương ứng với phiên bản đầu tiên của Netscape Navigator, Trái với tập đoàn CommerceNet, Netscape Communications đã không tính phí các khách hàng của nó về việc thực thi giao thức bảo mật của nó. Kết quả, SSL trở thành giao thức nổi bật để cung cấp các dịch vụ bảo mật cho lưu lượng dữ liệu HTTP 1994 và S-HTTP lặng lẽ biến mất.

Cho đến bây giờ, có ba phiên bản của SSL:

  1. SSL 1.0: được sử dụng nội bộ chỉ bởi Netscape Communications. Nó chứa một số khiếm khuyết nghiêm trọng và không bao giờ được tung ra bên ngoài.
  2. SSL 2.0: được kết nhập vào Netscape Communications 1.0 đến 2.x. Nó có một số điểm yếu liên quan đến sự hiện thân cụ thể của cuộc tấn công của đối tượng trung gian. Trong một nỗ lực nhằm dùng sự không chắc chắn của công chúng về bảo mật của SSL, Microsoft cũng đã giới thiệu giao thức PCT (Private Communication Technology) cạnh tranh trong lần tung ra Internet Explorer đầu tiên của nó vào năm 1996.
  3. Netscape Communications đã phản ứng lại sự thách thức PCT của Microsoft bằng cách giới thiệu SSL 3.0 vốn giải quyết các vấn đề trong SSL 2.0 và thêm một số tính năng mới. Vào thời điểm này, Microsoft nhượng bộ và đồng ý hỗ trợ SSL trong tất cả các phiên bản phần mềm dựa vào TCP/IP của nó (mặc dù phiên bản riêng của nó vẫn hỗ trợ PCT cho sự tương thích ngược).

Thông số kỹ thuật mới nhất của SSL 3.0 đã được tung ra chính thức vào tháng 3 năm 1996. Nó được thực thi trong tất cả các trình duyệt chính bao gồm ví dụ Microsoft Internet Explorer 3.0 (và các phiên bản cao hơn), Netscape Navigator 3.0 (và các phiên bản cao hơn), và Open. Như được thảo luận ở phần sau trong chương này, SSL 3.0 đã được điều chỉnh bởi IETF TLS WG. Thực tế, thông số kỹ thuật giao thức TLS 1.0 dẫn xuất từ SSL 3.0.

II – Cấu trúc của giao thức SSL:

Cấu trúc của SSL và giao thức SSL tương ứng được minh họa trong hình 1(Cấu trúc SSL và giao thức SSL). Theo hình này, SSL ám chỉ một lớp (bảo mật) trung gian giữa lớp vận chuyển (Transport Layer) và lớp ứng dụng (Application Layer). SSL được xếp lớp lên trên một dịch vụ vận chuyển định hướng nối kết và đáng tin cậy, chẳng hạn như được cung cấp bởi TCP. Về khả năng, nó có thể cung cấp các dịch vụ bảo mật cho các giao thức ứng dụng tùy ý dựa vào TCP chứ không chỉ HTTP. Thực tế, một ưu điểm chính của các giao thức bảo mật lớp vận chuyển (Transport layer) nói chung và giao thức SSL nói riêng là chúng độc lập với ứng dụng theo nghĩa là chúng có thể được sử dụng để bảo vệ bất kỳ giao thức ứng dụng được xếp lớp lên trên TCP một cách trong suốt. Hình 1.1 minh họa một số giao thức ứng dụng điển hình bao gồm NSIIOP, HTTP, FTP, Telnet, IMAP, IRC, và POP3. Tất cả chúng có thể được bảo vệ bằng cách xếp lớn chúng lên trên SSL (mẫu tự S được thêm vào trong các từ ghép giao thức tương ứng chỉ định việc sử dụng SSL). Tuy nhiên, chú ý rằng SSL có một định hướng client-server mạnh mẽ và thật sự không đáp ứng các yêu cầu của các giao thức ứng dụng ngang hàng.

hình 1: Cấu trúc của SSL và giao thức SSL

Tóm lại, giao thức SSL cung cấp sự bảo mật truyền thông vốn có ba đặc tính cơ bản:

  1. Các bên giao tiếp (nghĩa là client và server) có thể xác thực nhau bằng cách sử dụng mật mã khóa chung.
  2. Sự bí mật của lưu lượng dữ liệu được bảo vệ vì nối kết được mã hóa trong suốt sau khi một sự thiết lập quan hệ ban đầu và sự thương lượng khóa session đã xảy ra.
  3. Tính xác thực và tính toàn vẹn của lưu lượng dữ liệu cũng được bảo vệ vì các thông báo được xác thực và được kiểm tra tính toàn vẹn một cách trong suốt bằng cách sử dụng MAC.

Tuy nhiên, điều quan trọng cần lưu ý là SSL không ngăn các cuộc tấn công phân tích lưu lượng. Ví dụ, bằng cách xem xét các địa chỉ IP nguồn và đích không được mã hóa và các sô cổng TCP, hoặc xem xét lượng dữ liệu được truyền, một người phân tích lưu lượng vẫn có thể xác định các bên nào đang tương tác, các loại dịch vụ đang được sử dụng, và đôi khi ngay cả dành được thông tin về các mối quan hệ doanh nghiệp hoặc cá nhân. Hơn nữa, SSL không ngăn các cuộc tấn công có định hướng dựa vào phần thực thi TCP, chẳng hạn như các cuộc tấn công làm tràn ngập TCP SYN hoặc cưỡng đoạt session.

Để sử dụng sự bảo vệ SSL, cả client lẫn server phải biết rằng phía bên kia đang sử dụng SSL. Nói chung, có ba khả năng để giải quyết vấn đề này:

  1. Sử dụng các số cổng chuyên dụng được dành riêng bởi Internet Asigned Numbers Authority (IANA). Trong trường hợp này, một số cổng riêng biệt phải được gán cho mọi giao thức ứng dụng vốn sử dụng SSL.
  2. Sử dụng số cổng chuẩn cho mọi giao thức ứng dụng và để thương lượng các tùy chọn bảo mật như là một phần của giao thức ứng dụng (bây giờ được chỉnh sửa đôi chút).
  3. Sử dụng một tùy chọn TCP để thương lượng việc sử dụng một giao thức bảo mật, chẳng hạn như SSL trong suốt giai đoạn thiết lập nối kết TCP thông thường.

Sự thương lượng dành riêng cho ứng dụng của các tùy chọn bảo mật (nghĩa là khả năng thứ hai) có khuyết điểm là đòi hỏi mọi giao thức ứng dụng được chỉnh sửa để hiểu tiến trình thương lượng. Ngoài ra, việc xác định một tùy chọn TCP (nghĩa là khả năng thứ ba) là một giải pháp tốt, nhưng đó không được thảo luận nghiêm túc cho đến bây giờ. Thực tế, các số cổng riêng biệt đã được dành riêng và được gán bởi IANA cho mọi giao thức ứng dụng vốn có thể chạy trên SSL hoặc TLS (nghĩa là khả năng thứ nhất). Tuy nhiên, hãy chú ý việc sử dụng các số cổng riêng biệt cũng có khuyết điểm là đòi hỏi hai nối kết TCP nếu client không biết những gì mà server hỗ trợ. Trước tiên, client phải nối kết với cổng an toàn và sau đó với cổng không an toàn hay ngược lại. Rất có thể các giao thức sau này sẽ hủy bỏ phương pháp này và tìm khả năng thứ hai. Ví dụ, SALS (Simple Authentication và Security Layer) xác định một phù hợp để thêm sự hỗ trợ xác thực vào các giao thức ứng dụng dựa vào kết nối. Theo thông số kỹ thuật SALS, việc sử dụng các cơ chế xác thực có thể thương lượng giữa client và server của một giao thức ứng dụng đã cho.

Các số cổng được gán bởi IANA cho các giao thức ứng dụng vốn chạy trên SSL/TLS được tóm tắt trong bảng 2 và được minh họa một phần trong hình 1 Ngày nay, “S” chỉ định việc sử dụng SSL được thêm (hậu tố) nhất quán vào các từ ghép của các giao thức ứng dụng tương ứng (trong một số thuật ngữ ban đầu, S được sử dụng và được thêm tiền tố một cách không nhất quán và một số từ ghép).

Bảng1.2: Các số cổng được gán cho các giao thức ứng dụng chạy trên TLS/SSL.

Từ khóa Cổng Mô tả
Nsiiop 261 Dịch vụ tên IIOP trên TLS/SSL
https 443 HTTP trên TLS/SSl
Smtps 465 SMTP trên TLS/SSL
Nntps 563 NNTP trên TLS/SSL
Ldaps 636 LDAP trên TLS/SSL
Ftps-data 989 FTP (dữ liệu) trên TLS/SSL
Ftps 990 FTP (Điều khiển) trên TLS/SSL
Tenets 992 TELNET trên TLS/SSL
Imaps 994 IRC trên TLS/SSL
Pop3s 995 POP3 trên TLS/SSL

Nói chung, một session SSL có trạng thái và giao thức SSL phải khởi tạo và duy trì thông tin trạng thái ở một trong hai phía của session. Các phần tử thông tin trạng thái session tương ứng bao gồm một session ID, một chứng nhận ngang hàng, một phương pháp nén, một thông số mật mã, một khóa mật chính và một cờ vốn chỉ định việc session có thể tiếp tục lại hay không, được tóm tắt trong bảng 3 Một session SSL có thể được sử dụng trong một số kết nối và các thành phần thông tin trạng thái nối kết tương ứng được tóm tắt trong bảng 4 Chúng bao gồm các tham số mật mã, chẳng hạn như các chuỗi byte ngẫu nhiên server và client, các khóa mật MAC ghi server và client, các khóa ghi server và client, một vector khởi tạo và một số chuỗi. Ở trong hai trường hợp, điều quan trọng cần lưu ý là các phía giao tiếp phải sử dụng nhiều session SSL đồng thời và các session có nhiều nối kết đồng thời.

Bảng 3: Các thành phần thông tin trạng thái Session SSL

Thành Phần Mô tả
Session ID Định danh được chọn bởi server để nhận dạng một trạng thái session hoạt động hoặc có thể tiếp tục lại.
Peer certificate Chứng nhân X.509 phiên bản 3 của thực thể ngang hàng.
Compression method Thuật toán dừng để nén dữ liệu trước khi mã hóa
Cipher spec Thông số của các thuật toán mã hóa dữ liệu và MAC
Master secret Khóa mật 48-byte được chia sẻ giữa client và server.
Is resumable Cờ vốn biểu thị session có thể được sử dụng để bắt đầu các nối kết mới hay không.

Bảng .4 Các thành phần thông tin trạng thái nối kết SSL

Thành Phần Mô tả
Ngẫu nhiên server và client Các chuỗi byte được chọn bởi server và client cho mỗi nối kết.
Khóa mật MAC ghi server Khóa mật được sử dụng cho các hoạt động MAC trên dữ liệu được ghi bởi server.
Khóa mật MAC ghi client Khóa mật được sử dụng cho các hoạt động MAC trên dữ liệu được ghi bởi client.
Khóa ghi server Khóa được sử dụng cho việc mã hóa dữ liệu bởi server và giải mã bởi client
Khóa ghi client Khóa được sử dụng để mã khóa dữ liệu bởi client và giải mã bởi server.
Initialization vector Trạng thái khởi tạo cho một mật mã khối trong chế độ CBC. Trường này được khởi tạo đầu tiên bởi SSL Handshake Player. Sau đó, khối text mật mã sau cùng từ mỗi bản ghi được dành riêng để sử dụng vởi bản ghi sau đó.
Số chuỗi Mỗi phía duy trì các số chuỗi riêng biệt cho các thông báo được truyền và được nhận cho mỗi nối kết.

Như được minh họa trong hình 1, giao thức SSL gồm hai phần chính, SSL Record Protocol và một số giao thức con SSL được xếp lớp trên nó:

– Record OK được xếp lớp trên một dịch vụ lớp vận chuyển định hướng nối kết và đáng tin cậy, chẳng hạn như được cung cấp bởi TCP và cung cấp sự xác thực nguồn gốc thông báo, sự bí mật dữ liệu và dữ liệu.

– Các dịch vụ toàn vẹn (bao gồm nhưng thứ như chống xem lại).

– Các giao thức con SSL được xếp lớp trên SSL Record Protocol để cung cấp sự hỗ trợ cho việc quản lý session SSL và thiết lập nối kết.

Giao thức con SSL quan trọng nhất là SSL Handshake Protocol. Lần lượt giao thức này là một giao thức xác thực và trao đổi khóa vốn có thể được sử dụng để thương lượng, khởi tạo và đồng bộ hóa các tham số bảo mật và thông tin trạng thái tương ứng được đặt ở một trong hai điểm cuối của một session hoặc nối kết SSL.

Sau khi SSL Handshake Protocol đã hoàn tất, dữ liệu ứng dụng có thể được gửi và được nhận bằng cách sử dụng SSL Record Protocol và các tham số bảo mật được thương lượng và các thành phần thông tin trạng thái.

III – SSL Record Protocol:

SSL Record Protocol nhận dữ liệu từ các giao thức con SSL lớp cao hơn và xử lý việc phân đoạn, nén, xác thực và mã hóa dữ liệu. Chính xác hơn, giao thức này lấy một khối dữ liệu có kích cỡ tùy ý làm dữ liệu nhập và tọa một loạt các đoạn dữ liệu SSL làm dữ liệu xuất (hoặc còn được gọi là các bản ghi) nhỏ hơn hoặc bằng 16,383 byte.

hình 5: Các bước SSL Record Protocol.

Các bước khác nhau của SSL Record Protocol vốn đi từ một đoạn dữ liệu thô đến một bản ghi SSL Plaintext (bước phân đoạn), SSL Compressed (bước nén) và SSL Ciphertext (bước mã hóa) được minh họa trong hình 5. Sau cùng, mỗi bản ghi SSL chứa các trường thông tin sau đây:

– Loại nội dung;

– Số phiên bản của giao thức;

– Chiều dài;

– Tải trọng dữ liệu (được nén và được mã hóa tùy ý);

– MAC.

Loại nội dung xác định giao thức lớp cao hơn vốn phải được sử dụng để sau đó xử lý tải trọng dữ liệu bản ghi SSL (sau khi giải nén và giải mã hóa thích hợp).

Số phiên bản của giao thức xác định phiên bản SSL đang sử dụng (thường là version 3.0)

Mỗi tải trọng dữ liệu bản ghi SSL được nén và được mã hóa theo phương thức nén hiện hành và thông số mật mã được xác định cho session SSL.

Lúc bắt đầu mỗi session SSL, phương pháp nén và thông số mật mã thường được xác định là rỗng. Cả hai được xác lập trong suốt quá trình thực thi ban đầu SSL Handshake Protocol. Sau cùng, MAC được thêm vào mỗi bản ghi SSL. Nó cung cấp các dịch vụ xác thực nguồn gốc thông báo và tính toàn vẹn dữ liệu. Tương tự như thuật toán mã hóa, thuật toán vốn được sử dụng để tính và xác nhận MAC được xác định trong thông số mật mã của trạng thái session hiện hành. Theo mặc định, SSL Record Protocol sử dụng một cấu trúc MAC vốn tương tự nhưng vẫn khác với cấu trúc HMAC hơn. Có ba điểm khác biệt chính giữa cấu trúc SSL MAC và cấu trúc HMAC:

  1. Cấu trúc SSL MAC có một số chuỗi trong thông báo trước khi hash để ngăn các hình thức tấn công xem lại riêng biệt.
  2. Cấu trúc SSL MAC có chiều dài bản ghi.
  3. Cấu trúc SSL MAC sử dụng các toán tử ghép, trong khi cấu trúc MAC sử dụng moduloe cộng 2.

Tất cả những điểm khác biệt này hiện hữu chủ yếu vì cấu trúc SSL MAC được sử dụng trước cấu trúc HMAC trong hầu như tất cả thông số kỹ thuật giao thức bảo mật Internet. Cấu trúc HMAC cũng được sử dụng cho thông số kỹ thuật giao thức TLS gần đây hơn.

Như được minh họa trong hình 5, một số giao thức con SSL được xếp lớp trên SSL Record Protocol. Mỗi giao thức con có thể tham chiếu đến các loại thông báo cụ thể vốn được gửi bằng cách sử dụng SSL Record Protocol. Thông số kỹ thuật SSL 3.0 xác định ba giao thức SSL sau đây:

– Alert Protocol;

– Handshake Protocol;

– ChangeCipherSpec Protocol;

Tóm lại, SSL Alert Protocol được sử dụng để chuyển các cảnh báo thông qua SSL Record Protocol. Mỗi cảnh báo gồm 2 phần, một mức cảnh báo và một mô tả cảnh báo.

SSL Handshake Protocol là giao thức con SSL chính được sử dụng để hỗ trợ xác thực client và server và để trao đổi một khóa session. Do đó SSL Handshake Protocol trình bày tổng quan và được thảo luận trong phần tiếp theo.

Sau cùng, SSL ChangeCipherSpec Protocol được sử dụng để thay đổi giữa một thông số mật mã này và một thông số mật mã khác. Mặc dù thông số mật mã thường được thay đổi ở cuối một sự thiết lập quan hệ SSL, nhưng nó cũng có thể được thay đổi vào bất kỳ thời điểm sau đó.

Ngoài những giao thức con SSL này, một SSL Application Data Protocol được sử dụng để chuyển trực tiếp dữ liệu ứng dụng đến SSL Record Protocol.

IV – SSL Handshake Protocol:

SSL Handshake Protocol là giao thức con SSL chính được xếp lớp trên SSL Record Protocol. Kết quả, các thông báo thiết lập quan hệ SSL được cung cấp cho lớp bản ghi SSL nơi chúng được bao bọc trong một hoặc nhiều bản ghi SSL vốn được xử lý và được chuyển như được xác định bởi phương pháp nén và thông số mật mã của session SSL hiện hành và các khóa mật mã của nối kết SSL tương ứng. Mục đích của SSL Handshake Protocol là yêu cầu một client và server thiết lập và duy trì thông tin trạng thái vốn được sử dụng để bảo vệ các cuộc liên lạc. Cụ thể hơn, giao thức phải yêu cầu client và server chấp thuận một phiên bản giao thức SSL chung, chọn phương thức nén và thông số mật mã, tùy ý xác thực nhau và tạo một khóa mật chính mà từ đó các khóa session khác nhau dành cho việc xác thực và mã hóa thông báo có thể được dẫn xuất từ đó.

Tóm lại, việc thực thi SSL Handshake Protocol giữa một client C và một server S có thể được tóm tắt như sau (các thông báo được đặt trong các dấu ngoặc vuông thì tùy ý):

1: C -> S: CLIENTHELLO

2: S -> C: SERVERHELLO

[CERTIFICATE]

[SERVERKEYEXCHANGE]

[CERTIFICATEREQUEST]

SERVERHELLODONE

3: C -> [CERTIFICATE]

CLIENTKEYEXCHANGE

[CERTIFICATEVERIFY]

CHANGECIPHERSPEC

FINISHED

4: S -> C: CHANGECIPHERSPEC

FINISHED

Khi Client C muốn kết nối với server S, nó thiết lập một nối kết TCP với cổng HTTPS (vốn không được đưa vào phần mô tả giao thức) và gởi một thông báo CLIENTHELLO đến server ở bước 1 của sự thực thi SSL Handshake Protocol. Client cũng có thể gởi một thông báo CLIENTHELLO nhằm phản hồi lại một thông báo HELLOREQUEST hoặc chủ động thương lượng lại các tham số bảo mật của một nối kết hiện có. Thông báo CLIENTHELLO bao gồm các trường sau đây:

– Số của phiên bản SSL cao nhất được biểu hiện bởi client (thường là 3.0).

– Một cấu trúc ngẫu nhiên do client tạo ra gồm một tem thời gian 32 bit có dạng UNIX chuẩn và một giá trị 28 byte được tạo ra bởi một bộ tạo số giả ngẫu nhiên.

– Một định danh session mà client muốn sử dụng cho nối kết này.

– Một danh sách các bộ mật mã client hỗ trợ.

– Một danh sách các phương pháp nén mà client hỗ trợ.

Chú ý rằng trường session identity (định danh session) nên rỗng nếu session SSL hiện không tồn tại hoặc nếu client muốn tạo các tham số bảo mật mới. Ở một trong hai trường hợp, một trường session identity không rỗng là xác định một session SSL hiện có giữa client và server (nghĩa là một session có các tham số bảo mật mà client muốn sử dụng lại.). Định danh session có thể bắt nguồn từ một nối kết trước đó, nối kết này hoặc một nối kết đang hoạt động. Cũng chú ý rằng danh sách các bộ mật mã được hỗ trợ, được chuyển từ client đến server trong thông báo CLIENTHELLO, chứa các tổ hợp thuật toán mật mã được hỗ trợ bởi client theo thứ tự ưu tiêm. Mỗi bộ mật mã xác định một thuật toán trao đổi khóa và một thông báo mật mã. Server sẽ chọn một bộ mật mã hoặc nếu các lựa chọn có thể chấp nhận được không được trình bầy, trả về một thông báo lỗi và đóng nối kết một cách phù hợp. Sau khi đã gởi thông báo CLIENTHELLO, client đợi một thông báo SERVERHELLO. Bất kỳ thông báo khác được trả về bởi server ngoại trừ một thông báo HELLOREQUEST được xem như là một lỗi vào thời điểm này.

Ở bước 2, server xử lý thông báo CLIENTHELLO và đáp ứng bằng một thông báo lỗi hoặc thông báo SERVERHELLO. Tương tự như thông báo CLIENTHELLO, thông báo SERVERHELLO có các trường sau đây:

– Một số phiên bản server chứa phiên bản thấp hơn của phiên bản được đề nghị bởi client trong thông báo CLIENTHELLO và được hỗ trợ cao nhất bởi Server.

– Một cấu trúc ngẫu nhiên do server tạo ra cũng gồm một tem thời gian 32bit có dạng UNIX chuẩn và một giá trị 28bit được tạo ra bởi một bộ tạo số ngẫu nhiên.

– Một định danh session tương ứng với nối kết này.

– Một bộ mật mã được chọn từ bởi server từ danh sách các bộ mật mã được hỗ trợ bởi client.

– Một phương pháp nén được chọn bởi server từ danh sách các thuật toán nén được hỗ trợ bởi client.

Nếu định danh session trong thông báo CLIENTHELLO không rỗng, server tìm trong cache session của nó nhằm tìm ra một mục tương hợp. Nếu mục tương hợp được tìm thấy và server muốn thiết lập nối kết mới bằng cách sử dụng trạng thái session tương ứng, server đáp ứng bằng cùng một giá trị như được cung cấp bởi client. Chỉ địn này là một session được tiếp tục lại và xác định rằng cả hai phía phải tiến hành trực tiếp với các thông báo CHANGECIPHERSPEC và FINISHED được trình bày thêm bên dưới. Nếu không, trường này chứa một giá trị khác nhận biết một session mới. Server cũng có thể trả về một trường định danh session rỗng để biểu thị rằng session sẽ không được lưu trữ và do đó không thể được tiếp tục sau đó. Cũng chú ý rằng trong thông báo SERVERHELLO, server chọn một bộ mật mã và một phương pháp nén từ các danh sách được cung cấp bởi client trong thông báo CLIENTHELLO. Các thuật toán trao đổi khóa, xác thực, mã hóa và xác thực thông báo được xác định bởi bộ mã được chọn bởi server và được làm lộ ra trong thông báo SERVERHELLO. Các bộ mật mã vốn đã được xác định trong giao thức SSL về cơ bản giống như bộ mật mã đã xác định cho TLS.

Ngoài thông báo SERVERHELLO, server cũng phải gởi các thông báo khác đến client. Ví dụ, nếu server sử dụng sự xác thức dựa vào chứng nhân, server gởi chứng nhận site của nó đến client trong một thông báo CERTIFICATE tương ứng. Chứng nhận phải thích hợp cho thuật toán trao đổi khóa của bộ mật mã được chọn và thường là một chứng nhận X.509v3. Cùng loại thông báo sẽ được sử dụng sau đó cho sự đáp ứng của client đối với thông báo sẽ được sử dụng sau đó cho sự đáp ứng của client đối với thông báo CERTIFICATERequest của server. Trong trường hợp của các chứng nhận X.509v3, một chứng nhận có thể thực sự tham chiếu đến toàn bộ một chuỗi các chứng nhận, được sắp xếp theo thứ tự với chứng nhận của đối tượng gởi trước tiên theo sau là bất kỳ chứng nhận CA tiến hành theo trình tự hướng đến một CA gốc (vốn sẽ được chấp nhận bởi client).

Tiếp theo, server có thể gởi một thông báo SERVERKEYEXCHANGE đến client nếu nó không có chứng nhận, một chứng nhận vốn có thể được sử dụng chỉ để xác nhận các chữ ký kỹ thuật số hoặc sử dụng thuật toán trao đổi khóa dựa vào token FORITEZZA (KEA). Rõ ràng, thông báo này không được yêu cầu nếu chứng nhận site gồm một khóa chung RSA vốn có thể được sử dụng trong việc mã hóa. Ngoài ra, một server không nặc danh có thể tùy ý yêu cầu một chứng nhận cá nhân để xác thực client. Do đó, nó gởi một thông báo CERTIFICATERequest đến client. Thông báo này chứa một danh sách các loại chứng nhận được yêu cầu, được phân loại theo thứ tự ưu tiên của server cũng như một danh sách các tên được phân biệt cho các CA có thể chấp nhận. Ở cuối bước 2, server gởi một thông báo SERVERHELLODone đến client để chỉ định sự kết thúc SERVERHELLO và các thông báo đi kèm.

Sau khi nhận SERVERHELLO và các thông báo đi kèm, client xác nhận rằng chứng nhận site server (nếu được cung cấp) là hợp lệ và kiểm tra nhằm bảo đảm rằng các thông số bảo mật được cung cấp trong thông báo SERVERHELLO có thể được chấp nhận. Nếu server yêu cầu sự xác thực client, client gởi một thông báo CERTIFICATE vốn chứa một chứng nhận cá nhân cho khóa chung của người dùng đến server ở bước 3. Tiếp theo, client gởi một thông báo CLIENTKEYEXCHANGE có dạng phụ thuộc vào thuật toán cho mỗi khóa được chọn bởi server:

– Nếu RSA được sử dụng cho việc xác thực server và trao đổi khóa, client tạo một khóa mật tiền chính 48 byte, mã hóa nó bằng khóa chung được tìm thấy trong chứng nhận site hoặc khóa RSA tạm thời từ thông báo SERVERKEYEXCHANGE và gởi kết quả trở về server trong thông báo CLIENTKEYEXCHANGE. Lần lượt server sử dụng khóa riêng tương ứng để giải mã khóa mật chính.

– Nếu các token FORTEZZA được sử dụng để trao đổi khóa, client dẫn xuất một khóa mã hóa token (TEK) bằng cách sử dụng KEA. Phép tình KEA cảu client sử dụng khóa chung từ chứng nhận server cùng với một số tham số riêng trong token của client. Client gởi các tham số chung cần thiết cho server để cũng tạo TEK, sử dụng các tham sô riêng của nó. Nó tạo một khóa mật chính, bao bọc nó bằng cách sử dụng TEK và gởi kết quả cùng với một số vector khởi tạo đến server như là một phần của thông báo CLIENTKEYEXCHANGE. Lần lượt, server có thể giải mã khóa mật chính một cách thích hợp. Thuật toán trao đổi khóa này không được sử dụng rộng rãi.

Nếu sự xác thực client được yêu cầu, client cũng gởi một thông báo CERTIFICATEVERIFY đến server. Thông báo này được sử dụng để cung cấp sự xác thực rõ ràng định danh của người dùng dựa vào chứng nhận các nhân. Nó chỉ được gởi theo sau một chứng chỉ client vốn có khả năng tạo chữ ký (tất cả chứng nhận ngoại trừ các chứng nhận chứa các tham số DiffeHallman cố định). Sau cùng, client hoàn tất bước 3 bằng cách gởi một thông báo CHANGECIPHERSPEC và một thông báo FINISHED tương ứng đến server. Thông báo FINISHED luôn được gởi ngay lập tức sau thông báo CHANGECIPERSPEC để xác nhận rằng các tiến trình trao đổi khóa và xác thực đã thành công. Thực tế, thông báo FINISHED là thông báo đầu tiên vốn được bảo vệ bằng các thuật toán mới được thương lượng và các khóa session. Nó chỉ có thể được tạo và được xác nhận nếu những khóa này được cài đặt một cách phù hợp ở cả hai phía. Không đòi hỏi sự báo nhận thông báo FINISHED; các phía có thể bắt đầu gởi dữ liệu được mã hóa ngay lập tức sau khi đã gởi thông báo FINISHED. Việc thực thi SSL Handshake Protocol hoàn tất bằng việc cũng yêu cầu server gởi một thông báo CHANGECIPHERSPEC và một thông báo FINISHED tương ứng đến client ở bước 4.

Sau khi sự thiết lập SSL hoàn tất, một nối kết an toàn được thiết lập giữa client và server. Nối kết này bây giờ có thể được sử dụng để gởi dữ liệu ứng dụng vốn được bao bọc bởi SSL Record Protocol. Chính xác hơn, dữ liệu ứng dụng có thể được phân đoạn, được nén, hoặc được mã hóa và đước xác thực theo SSL Record Protocol cũng như thông tin trạng thái session và nối kết vốn bây giờ được thiết lập (tùy thuộc việc thực thi SSL Handshake Protocol).

SSL Handshake Protocol có thể được rutst ngắn nếu client và server quyết định tiếp tục lại một session SSL được thiết lập trước đó (và vẫn được lưu trữ) hoặc lặp lại một session SSL hiện có. Trong trường hợp này, chỉ ba dòng thông báo và tổng cộng sáu thông báo được yêu cầu. Các dòng thông báo tương ứng có thể được tóm tắt như sau:

1: C -> S: CLIENTHELLO

2: S -> C: SERVERHELLO

CHANECIPHERSPEC

FINISHED

3: S ->C: CHANGECIPHERSPEC

FINISHED

Ở bước 1, client gởi một thông báo CLIENTHELLO đến server vốn có một định danh session cần được tiếp tục lại. Lần lượt server kiểm tra cache session của nó để tìm một mục tương hợp. Nếu một mục tương hợp được tìm thấy, server muốn tiếp tục lại nối kết bên dưới trạng thái session đã xác định, nó trả về một thông báo SERVERHELLO với cùng một định danh session ở bước 2. Vào thời điểm này, cả client lẫn server phải gởi các thông báo CHANGECIPHERSPEC và FINISHED đến nhau ở bước 2 và 3. Một khi việc tái thiết lập session hoàn tất, client và server có thể bắt đầu trao đổi dữ liệu ứng dung.