Bài viết đã cũ. Các bạn tham khảo hướng dẫn mới nhất từ HocVPS cài đặt SSL từ các nhà cung cấp cụ thể:
Hướng dẫn cài đặt chứng chỉ miễn phí Let’s Encrypt
Hướng dẫn cài đặt chứng chỉ SSL (áp dụng Comodo/Godaddy…)

Chứng chỉ SSL (Secure Sockets Layer) là công nghệ mã hóa trao đổi dữ liệu giữa máy chủ web và máy tính cá nhân, đảm bảo việc trao đổi thông tin luôn luôn được bảo mật và an toàn, không thể bị khai thác và giải mã bởi đối tượng thứ ba. Ngoài ra SSL còn có nhiệm vụ như chứng thực Website, bảo mật FTP, Mail Service, VPN…. và rất nhiều ứng dụng khác.

Trong bài viết này, mình sẽ hướng dẫn các bạn tạo SSL Certificate trên nginx cho CentOS.

1. Tạo thư mục cho Certificate

sudo mkdir /etc/nginx/ssl

Di chuyển đến folder

cd /etc/nginx/ssl

2. Tạo Server Key và Certificate Signing Request

Tạo private server key. Chú ý ghi nhớ pass khi đăng ký nhé.

sudo openssl genrsa -des3 -out server.key 1024

Tạo certificate signing request

sudo openssl req -new -key server.key -out server.csr

Tiếp theo điền các thông tin như mẫu bên dưới. Chú ý cái Common name cần nhập chính xác domain của bạn hoặc IP nếu ko có. Phần challenge password và optional company name để trống.

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:VI
State or Province Name (full name) [Some-State]:Ha Noi
Locality Name (eg, city) []:HN
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Awesome Inc
Organizational Unit Name (eg, section) []:Dept of Merriment
Common Name (e.g. server FQDN or YOUR name) []:example.com                  
Email Address []:webmaster@awesomeinc.com

3. Xóa Passphrase vì thông tin này không cần thiết

sudo cp server.key server.key.org
sudo openssl rsa -in server.key.org -out server.key

4. Sign SSL Certificate

Mình sẽ đăng ký chứng chỉ hết hạn sau 1 năm nữa (365):

 sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

5. Cài đặt Certificate

Mở SSL config

nano /etc/nginx/conf.d/ssl.conf

Chỉnh lại phần dưới HTTPS Server như thông tin sau (chú ý thay example.com):

# HTTPS server

server {
    listen       443;
    server_name example.com;

    ssl on;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key; 
}

Khởi động lại nginx

 /etc/init.d/nginx restart

Truy cập vào https://youraddress, bạn sẽ thấy website hoạt động bình thường.

Xem thêm:

Comment của bạn

Lưu ý: tất cả comment đều được kiểm duyệt cẩn thận! Nếu có code bạn hãy up lên pastebin.com rồi để lại link trong comment.

92 Comments

  1. Hiếu 5 comment

    Mình đang có domain cài trên webserver theo hocvps. giờ mình muốn thêm subdomain cho site đó cụ thể m.domain.com , mình đã chạy hocvps chọn 12 subdomain domain chạy song song cùng domain nhưng chưa kết nối được với domain mới… ai hướng dẫn mình làm tiếp với

    1. Việt Phương Moderator

      Menu 12 là Park Domain. Tức bạn muốn m.domain.com với domain.com cùng source code, trong trường hợp này là cùng thư mục web /home/domain.com/public_html ?

  2. BTC 7 comment

    Cái đoạn common name mình điền nhầm thông tin thì chỉnh lại kiểu gì nhỉ mấy bác?

    1. Việt Phương Moderator

      Bạn tạo cert mới thôi, bỏ cert cũ. Mà bạn nên dùng Let’s Encrypt hơn là chứng chỉ tự kí nhé

      1. BTC 7 comment

        Cảm ơn bạn, để mình thử lại. À, có phải xoá cert cũ đi không bạn nhỉ?

        1. Việt Phương Moderator

          Nếu không xài đến thì bạn xóa đi cho gọn, tránh nhầm lẫn sau này

  3. Bùi Cường 1 comment

    có một vấn đề em đang thắc mắc, mong MOD và Admin trả lời dùm em, em hiện tại đang xài Centos 7 + LAMP, em có cài chứng chỉ Let’s Encrypt cho domain vuicuoi.xyz, em còn 1 domain nữa cũng mún add chứng chỉ để làm 1 site mới nhưng không biết làm thế nào, khi em chạy lệnh để add chứng chỉ cho domain thứ 2 thì domain vuicuoi.xyz sẽ báo lỗi bảo mật và em lại phải sửa lại.
    Có cách nào add thêm site mới mà ko bị hỏng site chính không ạ.

    1. Việt Phương Moderator

      Mỗi site một chứng chỉ riêng và 1 file cấu hình Nginx Webserver riêng nên không ảnh hưởng gì nhau cả. Bạn cứ theo hướng dẫn trong bài viết Let’s Encrypt nhé. Bạn comment đúng topic cho tiện support

  4. Long Vu Viet 2 comment

    Tại sao em làm theo hướng dẫn của bác mà và truy cập https thì nó thông báo

    -Không thể truy cập trang web này
    -… đã từ chối kết nối.

    Bác giúp em với. em mua ssl bên namechip về mà không thể cài vào hocvps được

  5. Quý 1 comment

    [ support ]

    Mình có nhờ 1 bạn cài SSL (chắc là free !) – bây giờ nó hết hạn và rơi vào tình trạng như thế này:

    ” Kết nối của bạn không phải là kết nối riêng tư

    Có thể những kẻ tấn công đang cố đánh cắp thông tin của (ví dụ: mật khẩu, tin nhắn hoặc thẻ tín dụng). NET::ERR_CERT_DATE_INVALID

    Tự động gửi một số thông tin hệ thống và nội dung trang tới Google để giúp phát hiện các ứng dụng và trang web nguy hiểm. Chính sách bảo mật
    Quay lại an toànẨN CHI TIẾT
    Máy chủ này không chứng minh được; chứng chỉ bảo mật của máy chủ này đã hết hạn cách đây 91 ngày. Điều này có thể do cấu hình sai hoặc có kẻ tấn công chặn kết nối của bạn. Đồng hồ của máy tính hiện được đặt là Chủ Nhật, 9 tháng 7, 2017. Ngày này có đúng không? Nếu không đúng, bạn phải sửa lại đồng hồ của hệ thống rồi làm mới trang này. Tìm hiểu thêm.

    Tiếp tục truy cập (không an toàn) ”

    => Mình không chuyên về IT, xin được vài lời tư vấn để gỡ bỏ từ các pro pro. Thanks nhiều nhiều

    1. Việt Phương Moderator

      Nếu bạn không chuyên IT thì nên nhờ gỡ hoặc gia hạn tiếp chứ bạn không biết động vào hệ thống đúng không?
      Hệ thống bạn là VPS OS gì? Webserver sử dụng là Nginx hay Apache? SSL của bạn mình đoán chắc là Let’ Encrypt nên chỉ cần gia hạn là được

        1. Việt Phương Moderator

          Vậy thì bạn kiểm tra Nginx Conf của site là biết SSL đang sử dụng là SSL nào. Nếu SSL Let’s Encrpt thì chạy lệnh gia hạn là được, còn không thì có thể issue cert mới đè vào

      1. Việt Phương Moderator

        Let’s Encrypt thì bạn chỉ cần xóa phần git về là ok
        Còn nginx bạn đã kịp chỉnh đâu mà lỗi? Bạn restart nginx gặp thông báo gì?

          1. Việt Phương Moderator

            Các lỗi không liên quan đến nhau nên bạn tập trung xử lý từng thứ 1.
            1. Không login được VPS thì bạn check login trên web browser,check cổng SSH. Ping IP VPS xem off hay on
            2. Lỗi Nginx thì check nginx status để xem lỗi.
            Chứ các lỗi bạn bảo ko có thông báo hay log gì thì sao biết do gì

          2. Nguyễn Phúc 11 comment

            [root@nguyenphucit home]# systemctl status nginx.service
            ● nginx.service – nginx – high performance web server
            Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset : disabled)
            Active: failed (Result: exit-code) since Wed 2017-06-21 10:07:58 +07; 24s ago
            Docs: http://nginx.org/en/docs/
            Process: 23653 ExecStop=/bin/kill -s QUIT $MAINPID (code=exited, status=0/SUCC ESS)
            Process: 24008 ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf (code= exited, status=1/FAILURE)
            Main PID: 21151 (code=exited, status=0/SUCCESS)

            Jun 21 10:07:58 nguyenphucit systemd[1]: Starting nginx – high performance w….
            Jun 21 10:07:58 nguyenphucit nginx[24008]: nginx: [emerg] BIO_new_file(“/etc…)
            Jun 21 10:07:58 nguyenphucit nginx[24008]: nginx: configuration file /etc/ng…d
            Jun 21 10:07:58 nguyenphucit systemd[1]: nginx.service: control process exit…1
            Jun 21 10:07:58 nguyenphucit systemd[1]: Failed to start nginx – high perfor….
            Jun 21 10:07:58 nguyenphucit systemd[1]: Unit nginx.service entered failed s….
            Jun 21 10:07:58 nguyenphucit systemd[1]: nginx.service failed.
            Hint: Some lines were ellipsized, use -l to show in full.

          3. Việt Phương Moderator

            Bạn login đc VPS đấy chứ. Bạn chạy lệnh thêm tham số -l để hiển thị toàn bộ nhé
            Jun 21 10:07:58 nguyenphucit nginx[24008]: nginx: [emerg] BIO_new_file(“/etc…)
            Jun 21 10:07:58 nguyenphucit nginx[24008]: nginx: configuration file /etc/ng…d

            2 dòng này sẽ cho bạn biết file cấu hình nginx của bạn sai chỗ nào. Mà thế tức là bạn đã chỉnh sửa cấu hình Nginx? Thế bạn backup về file cũ là ok mà

          4. Việt Phương Moderator

            Xóa cả thư mục SSL đi rồi restart lại xem: rm -rf /etc/nginx/ssl

      1. Nguyễn Phúc 11 comment

        Mình cài Let’s Encrypt nó báo lỗi này bạn chỉ vs

        Command “/root/.local/share/letsencrypt/bin/python2.7 -u -c “import setuptools, tokenize;__file__=’/tmp/pip-build-4c2IYf/cryptography/setup.py’;exec(compile(getattr(tokenize, ‘open’, open)(__file__).read().replace(‘\r\n’, ‘\n’), __file__, ‘exec’))” install –record /tmp/pip-JD0hlb-record/install-record.txt –single-version-externally-managed –compile –install-headers /root/.local/share/letsencrypt/include/site/python2.7/cryptography” failed with error code 1 in /tmp/pip-build-4c2IYf/cryptography
        You are using pip version 8.0.3, however version 9.0.1 is available.
        You should consider upgrading via the ‘pip install –upgrade pip’ command.

        1. Việt Phương Moderator

          VPS bạn RAM bao nhiêu?
          Mình nghĩ thời điểm bạn cài đặt Let’ Encrypt quá thiếu RAM. Kết quả của free -m là gì bạn

          1. Nguyễn Phúc 11 comment

            mình đã thử lệnh đó nhưng vẫn lồi k cài được 😀 h mình restart nginx k đc luôn :ò

  6. vannguyen 29 comment

    Mình có mua 1 cái chứng chỉ ssl của thằng namecheap mà nó gửi mail về không có cái sll nào để cài thì mình vào đâu để tìm vậy Luân?

    1. Việt Phương Moderator

      Bạn cần tạo cặp key csr theo thông tin domain của mình. Rồi thông qua key đó, bạn tạo SSL trên trang quản lý của Namecheap. Thành công, Namecheap sẽ gửi mail cho bạn trong đó chứa file nén SSL (chứa file .ca-bundle và .crt)

  7. thanhbang 7 comment

    sao mình chỉnh lại https rồi mà Khởi động lại nginx không được nhỉ ?

    1. Việt Phương Moderator

      Lỗi bạn do insert SSL vào Nginx Conf sai nên báo lỗi file không thể khởi động Nginx.
      Lúc khởi động Nginx sẽ báo lỗi Conf sai ở dòng nào, như thế nào. Bạn cũng có thể kiểm tra lỗi bằng # nginx -t
      Nếu bạn dùng SSL miễn phí, nên dùng từ bên thứ 3 như Let’s Encrypt, không nên tự tạo
      Hướng dẫn Cài đặt chứng chỉ bảo mật Let’s Encrypt trên server HocVPS Script

  8. suong 3 comment

    nano /etc/nginx/conf.d/ssl.conf
    sao minhf nos k co file ssl.còn vậy mình tìm hết rồi. vps do

      1. suong 3 comment

        nó tạo tự động hay là phải thủ công? và mình cũng k biết nội dung nữa. mình cài ssl namecheap vps su dụng cr hocvps làm mãi k dc

  9. Vũ Nguyễn 5 comment

    Chào bạn !

    Cách tạo ssl này có sử dụng được cho nhiều website trên cùng 1 vps không ? Và nếu mình xóa VPS thì mình phải tạo ssl cho từng website trên vps không bạn ?

    Cám ơn bạn !

  10. Vincent 21 comment

    Vấn đề của mình như thế này.
    Sau khi cài SSL thành công mình test https://domain.com thì bị lỗi 404

    Còn site: http://domain.com chạy bình thường.
    Hiện mình đã biết chuyển hướng http sáng https nhưng ko biết cấu hình sao cho site https về đúng thu mục public html
    cam ơn Luân!

      1. Vincent 21 comment

        Mình copy nguyên cái code trong file, sửa tên miền nhưng khi start Nginx lỗi
        [root@centos-512mb-lon1-01 home]# /etc/init.d/nginx restart
        nginx: [emerg] BIO_new_file(“/etc/letsencrypt/live/domain.com/fullchain.pem”) failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen(‘/etc/letsencrypt/live/domain.com/fullchain.pem’,’r’) error:2006D080:BIO routines:BIO_new_file:no such file)
        nginx: configuration file /etc/nginx/nginx.conf test failed

        Bác có skype không. remove cho em chút

        1. Vincent 21 comment

          Ah, bác xoá giúp em cái tên miền trong code trên với. cái này liên quan nhiều thứ nên không được cho lên. Thanks

        2. Luân Trần Admin

          Không thấy file cấu hình SSL trong /etc/letsencrypt/live/domain.com/
          Bạn kiểm tra lại đi

  11. Tùng 5 comment

    A luân ơi đến chỗ
    Tạo private server key. Chú ý ghi nhớ pass khi đăng ký nhé.

    sudo openssl genrsa -des3 -out server.key 1024
    e nhập pass vào không được viết gì cũng không được e dùng zoc kết nối nó bị sao hả anh

  12. Trung 1 comment

    Anh luân em muốn trang của em hiện địa chỉ mặc định là https:// chứ không phải www. thì em phải làm thế nào ạ ?

  13. Huy Hùng 4 comment

    Chào Luân,
    Mình dùng hocvps script, khi làm theo hướng dẫn thì không truy cập website với https:// được(Your connection is not private). Mình đã tắt iptables rồi.
    Cái đoạn # HTTPS server thì mình vứt ra file ssl.conf à, hay gộp chung trong file domain.conf.

    1. Luân Trần Admin

      Ra thông báo đó là đúng rồi, vì đây là tự mã hóa, không dùng chứng chỉ của bên thứ 3.

  14. HOA VO 6 comment

    Mình cài đến bước cuối cùng thì bị lỗi như sau:

    ./configure: error: SSL modules require the OpenSSL library.
    You can either do not enable the modules, or install the OpenSSL library
    into the system, or build the OpenSSL library statically from the source
    with nginx by using –with-openssl= option.

    Anh LUÂN TRẦN xem giúp với nhé.

    Cảm ơn nhiều ạ!

      1. Xuân Lợi 6 comment

        domain là http://www.iceo.vn. Với cho mình hỏi luôn khi dùng wordpress là dùng file .htaccess nhưng khi cài hocvps 1.1 lại không dùng được nên có web wordpress của mình bị lỗi tạo trang hoặc 1 số lỗi khác. Cảm ơn

          1. Vincent 21 comment

            Luân nói rõ chỗ này thêm đi, sau khi setup SSL của bên thứ 3, mình vào web https cũng bị lỗi 404

          2. Luân Trần Admin

            Bạn gặp vấn đề gì thì comment riêng ra ấy, cho nó rõ ràng nhé

  15. tamansu 6 comment

    Hi Luân
    Mình đã làm theo Luân ok hết
    nhưng khi chạy https
    thì nó hiện cái này ra
    còn ko đánh https thì nó ra web binh thuong
    mong luân giúp đở

  16. tamansu 6 comment

    Chào Luân
    Mình đang xài hocvps của bạn (centos 7)
    mình đã làm theo hướng dẫn của bạn
    nhưng khi chạy
    nó báo lỗi not found (giống như khi cài script hocvps của Luân, khi không up file index và root nó báo lỗi y chang thế)
    mình ko biết fix

    1. Luân Trần Admin

      Mình đoán bạn giải nén trực tiếp trên server nên webserver không có quyền đọc ghi ở folder public_html. Hãy chạy menu hocvps rồi chọn option số 14 nhé

  17. Phúc 5 comment

    Cái file ssl.conf của mình thế này thì thay làm sao hã Luân

    # HTTPS server
    #
    #server {
    # listen 443;
    # server_name localhost;
    # keepalive_timeout 30;

    # ssl on;
    # ssl_certificate cert.pem;
    # ssl_certificate_key cert.key;
    # ssl_session_timeout 5m;

    #openssl =1.0.1
    #ssl_protocols SSLv3 TLSv1.1 TLSv1.2;

    ##
    # ssl_session_cache shared:SSL:10m;
    # ssl_session_timeout 10m;
    ## http://www.openssl.org/docs/apps/ciphers.html
    # ssl_ciphers RC4:HIGH:!aNULL:!MD5:!kEDH;
    # ssl_prefer_server_ciphers on;

    # location / {
    # root html;
    # }

    #include /usr/local/nginx/conf/staticfiles.conf;
    #include /usr/local/nginx/conf/php.conf;
    #include /usr/local/nginx/conf/drop.conf;
    #include /usr/local/nginx/conf/errorpage.conf;

    #}

        1. Luân Trần Admin

          Thường người ta chỉ chạy 1 trong 2 webserver nginx hoặc apache thôi bạn

  18. Le Thanh Sang 3 comment

    Anh Luân oi! SSL này chỉ xài dc duy nhất tên trên 1 ip trọn đời hay sao a, có thể thây đổi ip dc ko, em vừa bị xóa cái vps ko chạy dc ssl nữa

  19. TuongDang 10 comment

    Chào anh. mình có làm theo hướng dẫn nhưng hiện tại bị lỗi sau :
    – file image hay html thì xem được
    nhưng file php thì nó download nguyên cái file .php về

    CentOS 6.5 64bit / cài HocVPS script

    mong nhận được hổi âm . cảm ơn anh nhiều!

    1. Wind Love 5 comment

      TuongDang ! Cái đó là do bạn chưa cài PHP !
      Bạn cần cài PHp để server đọc đc file .php !
      Bạn có thể xem hướng dẫn trên mạng

      1. Luân Trần Admin

        À nguyên nhân của bạn này là do chưa config php trong file cấu hình của nginx. Đã xử lý qua mail rồi.

        1. Phu Tuan Le 1 comment

          Mình cũng đang bị y như bạn này nhưng của mình k load đc index.php chứ login admin vẫn bt.còn nếu chạy http thì vô dc hết

          1. Luân Trần Admin

            Bạn nên tạo comment mới và ghi rõ trường hợp của bạn để bên mình support được hiệu quả hơn nhé.

  20. Nguyen Van Long 45 comment

    Em thử làm theo hướng dẫn !
    Sử dụng VPS của Do ! HDH CentOS 6.5 64bit 500MB Ram\
    Nhưng k đc anh ak !
    vô bằng http thì bình thường mà https thì nó hiện : trang web k tồn tại !
    Anh giúp e đi