Quản trị viên Linux - Tạo chứng chỉ SSL
Nền TLS và SSL
TLS là tiêu chuẩn mới cho bảo mật lớp socket, tiếp tục SSL. TLS cung cấp các tiêu chuẩn mã hóa tốt hơn với các tính năng bảo mật và trình bao bọc giao thức khác cải tiến SSL. Thông thường, các thuật ngữ TLS và SSL được sử dụng thay thế cho nhau. Tuy nhiên, với tư cách là Quản trị viên CentOS chuyên nghiệp, điều quan trọng là phải lưu ý sự khác biệt và lịch sử tách biệt từng thứ.
SSL lên phiên bản 3.0. SSL được phát triển và quảng bá như một tiêu chuẩn công nghiệp theo Netscape. Sau khi Netscape được mua bởi AOL (một ISP phổ biến vào những năm 90 hay còn gọi là America Online), AOL chưa bao giờ thực sự thúc đẩy sự thay đổi cần thiết để cải thiện bảo mật cho SSL.
Tại phiên bản 3.1, công nghệ SSL chuyển sang các tiêu chuẩn hệ thống mở và được đổi thành TLS . Vì bản quyền trên SSL vẫn thuộc sở hữu của AOL nên một thuật ngữ mới đã được đặt ra:TLS - Transport Layer Security. Vì vậy, điều quan trọng là phải thừa nhận rằng TLS trên thực tế khác với SSL . Đặc biệt, vì các công nghệ SSL cũ hơn đã biết đến các vấn đề bảo mật và một số được coi là lỗi thời ngày nay.
Note- Hướng dẫn này sẽ sử dụng thuật ngữ TLS khi nói về công nghệ 3.1 và cao hơn. Sau đó, SSL khi nhận xét cụ thể cho các công nghệ SSL 3.0 và thấp hơn.
Phiên bản SSL so với TLS
Bảng sau đây cho thấy cách lập phiên bản TLS và SSL sẽ liên quan với nhau. Tôi đã nghe một vài người nói về SSL phiên bản 3.2. Tuy nhiên, họ có thể hiểu được thuật ngữ từ việc đọc blog. Là một nhà quản trị chuyên nghiệp, chúng tôi luôn muốn sử dụng thuật ngữ chuẩn. Do đó, trong khi nói SSL phải là tham chiếu đến các công nghệ trong quá khứ. Những điều đơn giản có thể khiến người tìm việc CentOS trông giống như một CS Major dày dạn.
TLS | SSL |
---|---|
- | 3.0 |
1,0 | 3.1 |
1.1 | 3.2 |
1,2 | 3,3 |
TLS thực hiện hai chức năng chính quan trọng đối với người dùng Internet ngày nay: Một, nó xác minh xem một bên là ai, được gọi làauthentication. Hai, nó cung cấpend-to-end encryption ở lớp truyền tải cho các giao thức cấp cao hơn thiếu tính năng gốc này (giao thức ftp, http, email, v.v.).
Đầu tiên, xác minh một bên là ai và quan trọng đối với bảo mật là mã hóa đầu cuối. Nếu người tiêu dùng có kết nối được mã hóa đến một trang web không được phép thực hiện thanh toán, dữ liệu tài chính vẫn có nguy cơ. Đây là điều mà mọi trang web lừa đảo sẽ không có:a properly signed TLS certificate verifying website operators are who they claim to be from a trusted CA.
Chỉ có hai phương pháp để tránh tình trạng không có chứng chỉ được ký đúng cách: lừa người dùng cho phép trình duyệt web tin cậy chứng chỉ tự ký hoặc hy vọng người dùng không hiểu biết về công nghệ và sẽ không biết tầm quan trọng của Chứng chỉ đáng tin cậy Cơ quan (hoặc CA).
Trong hướng dẫn này, chúng tôi sẽ sử dụng cái được gọi là chứng chỉ tự ký . Điều này có nghĩa là, nếu không cấp cho chứng chỉ này trạng thái đáng tin cậy một cách rõ ràng trong mọi trình duyệt web truy cập trang web, một lỗi sẽ hiển thị không khuyến khích người dùng truy cập trang web. Sau đó, nó sẽ khiến người dùng thực hiện một vài thao tác trước khi truy cập vào một trang web có chứng chỉ tự ký. Hãy nhớ vì lợi ích bảo mật, đây là một điều tốt.
Cài đặt và cấu hình openssl
openssl là tiêu chuẩn để triển khai mã nguồn mở của TLS. openssl được sử dụng trên các hệ thống như Linux, bản phân phối BSD, OS X và thậm chí hỗ trợ Windows.
openssl rất quan trọng, vì nó cung cấp bảo mật lớp truyền tải và tóm tắt lập trình chi tiết của Xác thực và mã hóa end-to-end cho nhà phát triển. Đây là lý do tại sao openssl được sử dụng với hầu hết mọi ứng dụng mã nguồn mở sử dụng TLS. Nó cũng được cài đặt theo mặc định trên mọi phiên bản Linux hiện đại.
Theo mặc định, openssl phải được cài đặt trên CentOS từ ít nhất phiên bản 5 trở đi. Để đảm bảo, hãy thử cài đặt openssl thông qua YUM. Chỉ cần chạy cài đặt, vì YUM đủ thông minh để cho chúng tôi biết nếu một gói đã được cài đặt. Nếu chúng tôi đang chạy phiên bản CentOS cũ hơn vì lý do tương thích, việc thực hiện cài đặt yum -y sẽ đảm bảo openssl được cập nhật chống lại lỗ hổng heart-bleed gần đây.
Khi chạy trình cài đặt, người ta thấy rằng thực sự có một bản cập nhật cho openssl .
[root@centos]# yum -y install openssl
Resolving Dependencies
--> Running transaction check
---> Package openssl.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Processing Dependency: openssl-libs(x86-64) = 1:1.0.1e-60.el7_3.1 for
package: 1:openssl-1.0.1e-60.el7_3.1.x86_64
--> Running transaction check
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Updating:
openssl x86_64
1:1.0.1e-60.el7_3.1 updates 713 k
Updating for dependencies:
Tạo chứng chỉ tự ký cho OpenLDAP
Đây là một phương pháp để tạo tự ký cho cài đặt OpenLDAP trước đây của chúng tôi .
Để tạo Chứng chỉ OpenLDAP tự ký.
openssl req -new -x509 -nodes -out /etc/openldap/certs/myldaplocal.pem -keyout
/etc/openldap/certs/myldaplocal.pem -days 365
[root@centos]# openssl req -new -x509 -nodes -out /etc/openldap/certs/vmnet.pem
-keyout /etc/openldap/certs/vmnet.pem -days 365
Generating a 2048 bit RSA private key
.............................................+++
................................................+++
writing new private key to '/etc/openldap/certs/vmnet.pem'
-----
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) [XX]:US
State or Province Name (full name) []:Califonia
Locality Name (eg, city) [Default City]:LA
Organization Name (eg, company) [Default Company Ltd]:vmnet
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos
Email Address []:[email protected]
[root@centos]#
Bây giờ các chứng chỉ OpenLDAP của chúng tôi sẽ được đặt trong / etc / openldap / certs /
[root@centos]# ls /etc/openldap/certs/*.pem
/etc/openldap/certs/vmnetcert.pem /etc/openldap/certs/vmnetkey.pem
[root@centos]#
Như bạn có thể thấy, chúng tôi đã cài đặt cả chứng chỉ và khóa trong thư mục / etc / openldap / certs / . Cuối cùng, chúng ta cần thay đổi các quyền đối với từng quyền, vì chúng hiện thuộc sở hữu của người dùng root.
[root@centos]# chown -R ldap:ldap /etc/openldap/certs/*.pem
[root@centos]# ls -ld /etc/openldap/certs/*.pem
-rw-r--r--. 1 ldap ldap 1395 Feb 20 10:00 /etc/openldap/certs/vmnetcert.pem
-rw-r--r--. 1 ldap ldap 1704 Feb 20 10:00 /etc/openldap/certs/vmnetkey.pem
[root@centos]#
Tạo chứng chỉ tự ký cho máy chủ web Apache
Trong hướng dẫn này, chúng tôi sẽ giả sử Apache đã được cài đặt. Chúng tôi đã cài đặt Apache trong một hướng dẫn khác (định cấu hình Tường lửa CentOS) và sẽ đi vào cài đặt nâng cao Apache cho một hướng dẫn trong tương lai. Vì vậy, nếu bạn chưa cài đặt Apache, hãy cùng theo dõi.
Sau khi Apache HTTPd có thể được cài đặt bằng các bước sau:
Step 1 - Cài đặt mod_ssl cho máy chủ Apache httpd.
Đầu tiên chúng ta cần cấu hình Apache với mod_ssl. Sử dụng trình quản lý gói YUM, điều này khá đơn giản -
[root@centos]# yum -y install mod_ssl
Sau đó tải lại daemon Apache của bạn để đảm bảo Apache sử dụng cấu hình mới.
[root@centos]# systemctl reload httpd
Tại thời điểm này, Apache được cấu hình để hỗ trợ các kết nối TLS trên máy chủ cục bộ.
Step 2 - Tạo chứng chỉ ssl tự ký.
Đầu tiên, hãy cấu hình thư mục khóa TLS riêng tư của chúng tôi.
[root@centos]# mkdir /etc/ssl/private
[root@centos]# chmod 700 /etc/ssl/private/
Note- Đảm bảo chỉ có người gốc mới có quyền đọc / ghi vào thư mục này. Với quyền truy cập đọc / ghi trên thế giới, khóa cá nhân của bạn có thể được sử dụng để giải mã lưu lượng truy cập bị đánh hơi.
Tạo chứng chỉ và các tệp khóa.
[root@centos]# sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout
/etc/ssl/private/self-gen-apache.key -out /etc/ssl/certs/self-sign-apache.crt
Generating a 2048 bit RSA private key
..........+++
....+++
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:xx
Locality Name (eg, city) [Default City]:xxxx
Organization Name (eg, company) [Default Company Ltd]:VMNET
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos.vmnet.local
Email Address []:
[root@centos]#
Note - Bạn có thể sử dụng Địa chỉ IP công cộng của máy chủ nếu bạn chưa có tên miền đã đăng ký.
Hãy xem chứng chỉ của chúng tôi -
[root@centos]# openssl x509 -in self-sign-apache.crt -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 17620849408802622302 (0xf489d52d94550b5e)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
Validity
Not Before: Feb 24 07:07:55 2017 GMT
Not After : Feb 24 07:07:55 2018 GMT
Subject: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:c1:74:3e:fc:03:ca:06:95:8d:3a:0b:7e:1a:56:
f3:8d:de:c4:7e:ee:f9:fa:79:82:bf:db:a9:6d:2a:
57:e5:4c:31:83:cf:92:c4:e7:16:57:59:02:9e:38:
47:00:cd:b8:31:b8:34:55:1c:a3:5d:cd:b4:8c:b0:
66:0c:0c:81:8b:7e:65:26:50:9d:b7:ab:78:95:a5:
31:5e:87:81:cd:43:fc:4d:00:47:5e:06:d0:cb:71:
9b:2a:ab:f0:90:ce:81:45:0d:ae:a8:84:80:c5:0e:
79:8a:c1:9b:f4:38:5d:9e:94:4e:3a:3f:bd:cc:89:
e5:96:4a:44:f5:3d:13:20:3d:6a:c6:4d:91:be:aa:
ef:2e:d5:81:ea:82:c6:09:4f:40:74:c1:b1:37:6c:
ff:50:08:dc:c8:f0:67:75:12:ab:cd:8d:3e:7b:59:
e0:83:64:5d:0c:ab:93:e2:1c:78:f0:f4:80:9e:42:
7d:49:57:71:a2:96:c6:b8:44:16:93:6c:62:87:0f:
5c:fe:df:29:89:03:6e:e5:6d:db:0a:65:b2:5e:1d:
c8:07:3d:8a:f0:6c:7f:f3:b9:32:b4:97:f6:71:81:
6b:97:e3:08:bd:d6:f8:19:40:f1:15:7e:f2:fd:a5:
12:24:08:39:fa:b6:cc:69:4e:53:1d:7e:9a:be:4b:
Đây là giải thích cho từng tùy chọn chúng tôi đã sử dụng với lệnh openssl -
Chỉ huy | Hoạt động |
---|---|
yêu cầu -X509 | Sử dụng tiêu chuẩn PKI quản lý CSR X.509 để quản lý khóa. |
-điểm giao | Không bảo mật chứng chỉ của chúng tôi bằng cụm mật khẩu. Apache phải có thể sử dụng chứng chỉ mà không bị gián đoạn cụm mật khẩu. |
-ngày 2555 | Cho biết thời hạn của chứng chỉ là 7 năm hoặc 2555 ngày. Khoảng thời gian có thể được điều chỉnh khi cần thiết. |
-newkey rsa: 2048 | Được chỉ định để tạo cả khóa và chứng chỉ bằng RSA ở độ dài 2048 bit. |
Tiếp theo, chúng tôi muốn tạo một nhóm Diffie-Heliman để đàm phán PFS với khách hàng.
[centos#] openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Quá trình này sẽ mất từ 5 đến 15 phút.
Perfect Forward Secrecy- Được sử dụng để bảo mật dữ liệu phiên trong trường hợp khóa riêng đã bị xâm phạm. Điều này sẽ tạo ra một khóa được sử dụng giữa máy khách và máy chủ là khóa duy nhất cho mỗi phiên.
Bây giờ, hãy thêm cấu hình Perfect Forward Secrecy vào chứng chỉ của chúng tôi.
[root@centos]# cat /etc/ssl/certs/dhparam.pem | tee -a /etc/ssl/certs/self-sign-apache.crt
Định cấu hình Apache để sử dụng tệp khóa và chứng chỉ
Chúng tôi sẽ thực hiện các thay đổi đối với /etc/httpd/conf.d/ssl.conf -
Chúng tôi sẽ thực hiện các thay đổi sau đối với ssl.conf . Tuy nhiên, trước khi làm điều đó, chúng ta nên sao lưu lại tệp gốc. Khi thực hiện thay đổi đối với máy chủ sản xuất trong trình soạn thảo văn bản nâng cao như vi hoặc emcas , cách tốt nhất là luôn sao lưu các tệp cấu hình trước khi thực hiện chỉnh sửa.
[root@centos]# cp /etc/httpd/conf.d/ssl.conf ~/
Bây giờ chúng ta hãy tiếp tục các chỉnh sửa của chúng tôi sau khi sao chép một bản sao ssl.conf hoạt động đã biết vào thư mục gốc của thư mục chính.
- Locate
- Chỉnh sửa cả DocumentRoot và ServerName như sau.
\\# General setup for the virtual host, inherited from global configuration
DocumentRoot "/var/www/html"
ServerName centos.vmnet.local:443
DocumentRootđây là đường dẫn đến thư mục apache mặc định của bạn. Trong thư mục này phải là một trang mặc định sẽ hiển thị yêu cầu HTTP yêu cầu trang mặc định của máy chủ web hoặc trang web của bạn.
ServerNamelà tên máy chủ có thể là địa chỉ ip hoặc tên máy chủ của máy chủ. Đối với TLS, cách tốt nhất là tạo chứng chỉ với tên máy chủ. Từ hướng dẫn OpenLdap của chúng tôi, chúng tôi đã tạo một tên máy chủ của centos trên miền doanh nghiệp cục bộ: vmnet.local
Bây giờ chúng tôi muốn bình luận những dòng sau đây.
SSLProtocol
# SSL Protocol support:
# List the enable protocol levels with which clients will be able to
# connect. Disable SSLv2 access by default:
~~~~> #SSLProtocol all -SSLv2
# SSL Cipher Suite:
# List the ciphers that the client is permitted to negotiate.
# See the mod_ssl documentation for a complete list.
~~~~> #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
Sau đó, hãy cho Apache biết nơi tìm chứng chỉ và cặp khóa riêng / công khai của chúng tôi.
Chỉ định đường dẫn đến tệp chứng chỉ tự ký của chúng tôi
# Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate. If
# the certificate is encrypted, then you will be prompted for a
# pass phrase. Note that a kill -HUP will prompt again. A new
# certificate can be generated using the genkey(1) command.
~~~~> SSLCertificateFile /etc/ssl/certs/self-sign-apache.crt
specify path to our private key file
# Server Private Key:
# If the key is not combined with the certificate, use this
# directive to point at the key file. Keep in mind that if
# you've both a RSA and a DSA private key you can configure
# both in parallel (to also allow the use of DSA ciphers, etc.)
~~~~> SSLCertificateKeyFile /etc/ssl/private/self-gen-apache.key
Cuối cùng, chúng ta cần cho phép các kết nối đến https qua cổng 443.