Cài đặt SSL cho server. Phần I: Apache server

Phải chắc chắn là đã backup httpd.conf trước khi sửa

Cài đặt Self-signed SSL

Self-signed SSL là SSL tự sinh, khi dùng sẽ có dấu hiện cảnh báo của trình duyệt. SSL dạng này chỉ nên dùng để test sản phẩm.

  1. Tạo key file
    • Chạy lệnh: openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ssl.key -out ssl.crt
    • Khi chạy lệnh sẽ có các trường cần điền sau:
    • Ví dụ
    Country Name (2 letter code) [XX]:VN
    State or Province Name (full name) []:Hanoi
    Locality Name (eg, city) [Default City]:Hanoi
    Organization Name (eg, company) [Default Company Ltd]:Codelovers Vietnam
    Organizational Unit Name (eg, section) []:MDPTeam
    Common Name (eg, your name or your server's hostname) []:codelovers.vn Email Address []:tuyen.nguyen@codelovers.vn
  2. Thêm Virtual Host
    <VirtualHost *:443>
        DocumentRoot /var/www/html
        ServerName codelovers.vn
        SSLEngine on
        SSLCertificateFile /var/www/.ssl/ssl.crt
        SSLCertificateKeyFile /var/www/.ssl/ssl.key
    </VirtualHost>
    
  3. Khởi động lại httpd
    sudo service httpd graceful 
    

Cài đặt Offical SSL

Ví dụ với Rapid SSL mua 4.99$ 1 năm

  1. Tạo key file
    • Chạy lệnh: openssl req -nodes -newkey rsa:2048 -keyout ssl.key -out ssl.csr
    • Khi chạy lệnh sẽ có các trường cần điền sau:
    • Ví dụ
    Country Name (2 letter code) [XX]:VN
    State or Province Name (full name) []:Hanoi
    Locality Name (eg, city) [Default City]:Hanoi
    Organization Name (eg, company) [Default Company Ltd]:Codelovers Vietnam
    Organizational Unit Name (eg, section) []:MDPTeam
    Common Name (eg, your name or your server's hostname) []:codelovers.vnEmail Address []:tuyen.nguyen@codelovers.vn
  2. Copy nội dung file .csr và đưa lên cho trang bán SSL. Phần server cứ để auto detect, ví dụ như không thể chọn server chạy nginx. Hoặc để apache + openssl cũng ko vấn đề.
  3. Tạo 1 email để xác thực chủ domainThường sẽ là email dạng admin@domain.com. Nếu mail này đã có thể dùng được thì không sao, còn không thì có nhiều cách để đăng ký email này, ở đây xin giới thiệu 2 cách
    1. Dùng 1 service cho phép đăng ký email
      • Có thể dùng của Google (mất phí) hoặc của Zoho (miễn phí). Ý tưởng chung là trỏ record mx của domain mình muốn đăng ký vào 1 mail server để nó có thể nhận mail cho mình.
      • Vào http://zoho.com đăng ký 1 tài khoản. Mỗi email chỉ đăng ký được 1 acc zoho nhưng có thể dùng mẹo, ví dụ: abc@gmail.comabc+123@gmail.com đều là 1 email nhưng vẫn đăng ký được 2 acc zoho
      • Vào Godaddy, mục quản lý domain: thêm bản ghi CNAME vào để chứng thực với Zoho rằng mình sở hữu domain ấy
      • Vào Godaddy, mục quản lý domain: sửa 2 bản ghi MX có sẵn về mx.zohomail.com và mx2.zohomail.com để nhận mail
      • Gửi thử email tới địa chỉ email admin, ví dụ admin@codelovers.vn
    2. Dùng mail server của mình tự tạo
      • Cài Round Cube để nhận mail cho mình.
  4. Sau khi server SSL confirm và sẽ gửi về cho mình 2 mail (1-> mail cảm ơn, 2-> confirm có file .zip )
    1. Download file .zip mà SSL gửi về và Unzip và được các file sau (ví dụ: với SSL của Comodo bán và domain : codelovers.vn )
      • codelovers_vn.crt (1)
      • AddTrustExternalCARoot.crt (2)
      • COMODORSAAddTrustCA.crt (3)
      • COMODORSADomainValidationSecureServerCA.crt (4)
    2. Tạo 1 file mới với tên codelovers.vn.ca-bundle (domain.ca-bundle). Nội dung của file sẽ được lấy nội dung theo thứ tự lần lượt từ 3 file (4)(3)(2).
    3. Nén 2 file codelovers_vn.crt và file codelovers.vn.com.ca-bundle thành 1 file codelovers_vn.zip.
    4. Dùng lệnh scp để đưa file đó lên server. (nên đưa vào thư mục chứa myserver.keyserver.csr Note: Trước khi sinh key nên tạo thư mục vào đó sinh key để dễ quản lý)
      • Lệnh để đưa scp file user_remote@remotehost:/path => scp codelovers_vn.zip user_remote@remotehost:/path
      • Vào server tìm tới thư mục vừa up file lên và unzip. Lệnh unzip file => unzip codelovers_vn.zip
  5. Config file httpd.conf (Trước khi sửa cần chắc chắn đã backup file naỳ)Thêm mới một đoạn có nội dung sau.
    <Virtualhost *:443>
      ServerName codelovers.vn:443
      DocumentRoot /var/www/html
      SSLEngine on
      SSLCertificateKeyFile *path file myserver.key*
      SSLCertificateFile *path file codelovers_vn.crt*
      SSLCertificateChainFile *path file codelovers.vn.ca-bundle*
    </Virtualhost>
    

    Chú ý điền đúng đường dần tới các file .key, .crt, .ca-bundle

  6. Restart lại httpd: sudo service httpd graceful

Trouble shooting

  1. mod_ssl chưa được cài
    Invalid command 'SSLEngine', perhaps misspelled or defined by a module not included in the server configuration
    

    chạy lệnh để cài mod_ssl: sudo yum install mod_ssl Nếu gặp lỗi.

    Error: httpd24-tools conflicts with httpd-tools-2.2.25-1.0.amzn1.x86_64
    Error: httpd24 conflicts with httpd-2.2.25-1.0.amzn1.x86_64
    You could try using --skip-broken to work around the problem
    You could try running: rpm -Va --nofiles --nodigest
    

    thì chạy lệnh khác để cài đặt: yum install mod24_ssl

  2. Chuyển ép http về https.Sửa file httpd.conf
    • lệnh backup: sudo cp /etc/httpd/conf/httpd.conf{,.20140807}
    • sử dụng lệnh : sudo vi /etc/httpd/conf/httpd.conf
    • ấn phím i để tiến hành sửa.
    • Thêm mới đoạn sau.
    <VirtualHost *:80>
        ServerName codelovers.vn 
        Redirect / https://codelovers.vn/
    </VirtualHost>
    
    • Sau khi sửa xong ấn ESC để thoát khỏi chế độ sửa và sử dụng :wq để thoát khỏi httpd và lưu lại.
    • Restart lại httpd
    sudo service httpd graceful
    
  3. Nếu gặp thông báo lỗi:
    Starting httpd: [Fri Dec 20 03:42:47 2013] [warn] _default_ VirtualHost overlap on port 443, the first has precedence
    

    Thì quay lại file httpd.conf

    uncomment dòng NameVirtualHost *:443 hoặc thêm mới nếu không có.