Thursday, November 21, 2024

OpenSSL là gì?

-

OpenSSL là một thư viện mã nguồn mở và một công cụ mã hóa mã nguồn mở được sử dụng rộng rãi trong lĩnh vực bảo mật mạng. Nó cung cấp các công cụ và thư viện cho việc triển khai các giao thức mạng mật mã, bao gồm SSL/TLS (Secure Sockets Layer/Transport Layer Security), mã hóa đối xứng và mã hóa bất đối xứng, tạo và quản lý chứng chỉ SSL/TLS, chữ ký số, hàm băm (hash), và nhiều tính năng bảo mật khác.

OpenSSL hỗ trợ nhiều ngôn ngữ lập trình như C, C++, Perl, Python, và các ngôn ngữ khác thông qua giao diện API (Application Programming Interface) của nó. Điều này cho phép nhà phát triển sử dụng OpenSSL để tích hợp các tính năng bảo mật vào ứng dụng của mình.

Ngoài ra, OpenSSL cũng cung cấp các công cụ dòng lệnh cho việc thực hiện các tác vụ như tạo khóa riêng tư (private key), tạo chứng chỉ SSL, mã hóa và giải mã dữ liệu, kiểm tra tính toàn vẹn của chứng chỉ, và nhiều tác vụ khác liên quan đến bảo mật mạng.

OpenSSL đã trở thành một công cụ quan trọng trong lĩnh vực bảo mật mạng và được sử dụng rộng rãi trên các máy chủ web, ứng dụng di động, thiết bị mạng và nhiều hệ thống khác để cung cấp bảo mật cho giao tiếp mạng và dữ liệu truyền qua mạng.

Để tạo SSL cho miền hoanghd.com bằng OpenSSL, bạn cần thực hiện các bước sau:

Bước 1: Chuẩn bị

  • Cài đặt OpenSSL trên máy tính của bạn (nếu chưa cài đặt).
  • Mở cửa sổ dòng lệnh hoặc terminal.

Bước 2: Tạo thư mục lưu ssl.

mkdir -p /etc/nginx/ssl/

Bước 3: Tạo cặp khóa (private key) riêng tư và tạo Certificate Signing Request (CSR).

Để sử dụng SSL với Nginx, bạn cần có một chứng chỉ SSL đã được ký và được cung cấp bởi một tổ chức phê duyệt (Certificate Authority) hoặc tự ký (self-signed certificate).

Để tạo một chứng chỉ SSL tự ký, bạn có thể sử dụng OpenSSL bằng cách chạy lệnh sau:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/hoanghd.key -out /etc/nginx/ssl/hoanghd.crt -subj "/CN=hoanghd.com"

Lệnh này sẽ tạo một chứng chỉ SSL tự ký (hoanghd.crt) và private key (hoanghd.key) trong cùng thư mục.

Bước 4: Cài đặt máy chủ Nginx làm Webserver.

apt update
apt install nginx -y

Khởi động Nginx và bật chế độ tự khởi động theo OS.

systemctl start nginx
systemctl enable nginx

Bước 5: Cấu hình máy chủ Webserver

Hiện tại trong thư mục /etc/nginx/sites-available/ tôi đã có file cấu hình mặc định default, đây là file cấu hình chào mừng của Nginx như bạn thấy ở dưới, nhưng nó đang ở dạng HTTP (80). Tức là không có SSL.

Bạn có thể sử dụng lệnh netstat -tlnp, bạn sẽ thấy Nginx đang lắng nghe port 80.

$ netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      2038/nginx: master
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      714/systemd-resolve
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1225/sshd
tcp6       0      0 :::80                   :::*                    LISTEN      2038/nginx: master
tcp6       0      0 :::22                   :::*                    LISTEN      1225/sshd

Đây là kết quả khi bạn truy cập trên trình duyệt.

Sau khi tạo chứng chỉ SSL tự ký, bạn có thể sử dụng chúng trong cấu hình Nginx như dưới. Nội dung đơn giản là mình comment lại 2 dòng listen port 80 của IPv4 và IPv6.

# listen 80 default_server;
# listen [::]:80 default_server

Tiếp đó mình thêm nội dung để cho webserver lắng nghe port 443 và trỏ ssl đến 2 file mình vừa tạo ở trên.

listen 443 ssl;
server_name hoanghd.com;
ssl_certificate /etc/nginx/ssl/hoanghd.crt;
ssl_certificate_key /etc/nginx/ssl/hoanghd.key;

Mình sử dụng script dưới để chỉnh sửa đầy đủ nội dung file /etc/nginx/sites-available/default này.

cat > /etc/nginx/sites-available/default << 'OEF'
server {
    listen 443 ssl;
    server_name hoanghd.com;
    ssl_certificate /etc/nginx/ssl/hoanghd.crt;
    ssl_certificate_key /etc/nginx/ssl/hoanghd.key;

    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;
    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }
}
OEF

Sử dụng lệnh nginx -t để kiểm tra lỗi config.

$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Sau khi bạn check không có lỗi, bạn sử dụng lệnh sau để reload lại Nginx.

nginx -s reload

Giờ bạn dùng lệnh netstat để check lại Nginx, bạn sẽ thấy nó đã chuyển từ lắng nghe port 80 sang lắng nghe port 443.

$ netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      714/systemd-resolve
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1225/sshd
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      2038/nginx: master
tcp6       0      0 :::22                   :::*                    LISTEN      1225/sshd

Đây là IP Server Nginx của mình.

$ ip addr show ens18
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 8e:f7:13:99:a0:26 brd ff:ff:ff:ff:ff:ff
    inet 192.168.13.201/23 brd 192.168.13.255 scope global ens18
       valid_lft forever preferred_lft forever
    inet6 fe80::8cf7:13ff:fe99:a026/64 scope link
       valid_lft forever preferred_lft forever

Giờ nếu bạn truy cập bằng giao thức http thì sẽ không được nữa.

Và đây là kết quả khi truy cập bằng https.

Bạn cũng có thể dùng tên miền để duyệt website này nhé.

Câu hỏi tại sao chứng chỉ OpenSSL lại có màu đỏ?

Nếu chứng chỉ SSL của bạn có màu đỏ thay vì màu xanh, điều này có thể chỉ ra rằng chứng chỉ SSL không được xác thực bởi một tổ chức phê duyệt (Certificate Authority) được tin cậy. Thông thường, các tổ chức phê duyệt như Let’s Encrypt, Comodo, Digicert, Symantec, và các tổ chức tương tự được tin cậy và chứng chỉ SSL từ các tổ chức này sẽ được hiển thị màu xanh trong trình duyệt.

Khi sử dụng OpenSSL để tạo chứng chỉ SSL tự ký, trình duyệt sẽ không nhận diện nó là một chứng chỉ SSL xác thực từ một tổ chức phê duyệt. Thay vào đó, nó sẽ coi đó là một chứng chỉ tự ký được tạo bởi bạn. Vì vậy, trong trình duyệt, chứng chỉ tự ký sẽ hiển thị màu đỏ hoặc được đánh dấu là không an toàn.

Điều này không có nghĩa là chứng chỉ SSL tự ký không hoạt động. Nó chỉ đơn giản là không được xác thực bởi một tổ chức phê duyệt nên trình duyệt sẽ hiển thị cảnh báo cho người dùng.

Để có màu xanh và hiển thị an toàn trong trình duyệt, bạn có thể sử dụng một chứng chỉ SSL từ một tổ chức phê duyệt được tin cậy, hoặc nếu bạn sử dụng chứng chỉ tự ký, bạn có thể thêm chứng chỉ tự ký vào danh sách tin cậy của trình duyệt.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories