- Linux 管理教程
- 家
- CentOS概述
- CentOS Linux 基本命令
- 文件/文件夹管理
- 用户管理
- 配额管理
- Systemd 服务启动和停止
- 使用 systemctl 进行资源管理
- 使用 crgroups 进行资源管理
- 流程管理
- 防火墙设置
- 在 CentOS Linux 中配置 PHP
- 在 CentOS Linux 上设置 Python
- 在 CentOS Linux 上配置 Ruby
- 为 CentOS Linux 设置 Perl
- 安装和配置开放 LDAP
- 创建 SSL 证书
- 安装 Apache Web 服务器 CentOS 7
- CentOS 7 上的 MySQL 设置
- 设置 Postfix MTA 和 IMAP/POP3
- 安装匿名 FTP
- 远程管理
- CentOS中的流量监控
- 日志管理
- 备份与恢复
- 系统升级
- 外壳脚本
- 包管理
- 卷管理
- Linux 管理有用资源
- Linux 管理员 - 快速指南
- Linux 管理员 - 有用的资源
- Linux 管理员 - 讨论
Linux 管理员 - 创建 SSL 证书
TLS 和 SSL 背景
TLS 是继 SSL 之后的套接字层安全新标准。TLS 提供了更好的加密标准,并具有其他安全性和协议包装功能,可提升 SSL 的性能。通常,术语 TLS 和 SSL 可以互换使用。然而,作为一名专业的 CentOS 管理员,重要的是要注意它们之间的差异和历史。
SSL升级至 3.0 版本。SSL 是 Netscape 旗下开发并作为行业标准推广的。Netscape 被 AOL(一家 90 年代流行的 ISP,也称为美国在线)收购后,AOL 从未真正推动过 SSL 安全改进所需的变革。
在 3.1 版本中,SSL技术进入开放系统标准并更改为TLS。由于SSL的版权仍归 AOL 所有,因此创造了一个新术语:TLS - 传输层安全性。因此,重要的是要承认TLS实际上与SSL不同。特别是,由于较旧的SSL技术存在已知的安全问题,并且有些技术如今已被认为已过时。
注意-当谈到技术 3.1 及更高版本时,本教程将使用术语TLS 。然后是在评论特定于 SSL 技术 3.0 及更低版本时的SSL 。
SSL 与 TLS 版本控制
下表显示了 TLS 和 SSL 版本控制如何相互关联。我听过一些人谈到SSL 3.2 版本。然而,他们可能是通过阅读博客获得这些术语的。作为专业管理员,我们总是希望使用标准术语。因此,在谈论SSL时应该参考过去的技术。简单的事情可以让 CentOS 求职者看起来像经验丰富的 CS 专业人士。
传输层安全协议 | SSL协议 |
---|---|
- | 3.0 |
1.0 | 3.1 |
1.1 | 3.2 |
1.2 | 3.3 |
TLS执行对当今互联网用户来说很重要的两个主要功能:其一,它验证一方是谁,称为身份验证。第二,它在传输层为缺乏此本机功能的上层协议(ftp、http、电子邮件协议等)提供端到端加密。
首先,验证参与方是谁,这对于安全性来说很重要,就像端到端加密一样。如果消费者与未经授权付款的网站建立了加密连接,则财务数据仍然面临风险。这是每个网络钓鱼网站都无法拥有的:正确签名的 TLS 证书,验证网站运营商是否是他们声称的来自可信 CA 的人。
只有两种方法可以避免没有正确签名的证书:欺骗用户允许网络浏览器信任自签名证书,或者希望用户不懂技术并且不知道受信任证书的重要性权威机构(或 CA)。
在本教程中,我们将使用所谓的自签名证书。这意味着,如果没有明确授予此证书在访问该网站的每个 Web 浏览器中受信任的状态,则会显示错误,阻止用户访问该网站。然后,它会让用户在访问具有自签名证书的站点之前跳过一些操作。请记住,为了安全起见,这是一件好事。
安装和配置 openssl
openssl是 TLS 开源实现的标准。openssl用于 Linux、BSD 发行版、OS X 等系统,甚至支持 Windows。
openssl 很重要,因为它提供了传输层安全性,并为开发人员抽象了身份验证和端到端加密的详细编程。这就是为什么 openssl 与几乎所有使用 TLS 的开源应用程序一起使用的原因。它也默认安装在每个现代版本的 Linux 上。
默认情况下, CentOS 上应安装openssl至少版本 5 及以上。为了确保安全,我们尝试通过 YUM安装openssl 。只需运行安装即可,因为 YUM 足够智能,可以让我们知道软件包是否已安装。如果我们出于兼容性原因运行旧版本的 CentOS,执行yum -y install将确保针对半新的 heart-bleed 漏洞更新 openssl。
运行安装程序时,发现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:
为 OpenLDAP 创建自签名证书
这是为我们之前的OpenLDAP安装创建自签名的方法。
创建自签名 OpenLDAP 证书。
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 []:bob@bobber.net [root@centos]#
现在我们的 OpenLDAP 证书应该放在/etc/openldap/certs/中
[root@centos]# ls /etc/openldap/certs/*.pem /etc/openldap/certs/vmnetcert.pem /etc/openldap/certs/vmnetkey.pem [root@centos]#
如您所见,我们将证书和密钥安装在/etc/openldap/certs/目录中。最后,我们需要更改每个权限,因为它们当前由 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]#
为 Apache Web 服务器创建自签名证书
在本教程中,我们假设 Apache 已安装。我们在另一个教程(配置 CentOS 防火墙)中确实安装了 Apache,并将在以后的教程中介绍 Apache 的高级安装。因此,如果您尚未安装 Apache,请继续安装。
一旦可以使用以下步骤安装 Apache HTTPd -
步骤 1 - 为 Apache httpd 服务器安装 mod_ssl。
首先我们需要使用 mod_ssl 配置 Apache。使用 YUM 包管理器这非常简单 -
[root@centos]# yum -y install mod_ssl
然后重新加载 Apache 守护程序以确保 Apache 使用新配置。
[root@centos]# systemctl reload httpd
此时,Apache 已配置为支持本地主机上的 TLS 连接。
步骤 2 - 创建自签名 ssl 证书。
首先,让我们配置我们的私有 TLS 密钥目录。
[root@centos]# mkdir /etc/ssl/private [root@centos]# chmod 700 /etc/ssl/private/
注意- 确保只有 root 具有对此目录的读/写访问权限。通过全球读/写访问权限,您的私钥可用于解密嗅探到的流量。
生成证书和密钥文件。
[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]#
注意- 如果您没有注册域名,则可以使用服务器的公共 IP 地址。
让我们看一下我们的证书 -
[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:
以下是我们与openssl命令一起使用的每个选项的解释-
命令 | 行动 |
---|---|
请求-X509 | 使用X.509 CSR管理PKI标准进行密钥管理。 |
-节点 | 不要使用密码保护我们的证书。Apache 必须能够在不中断密码的情况下使用证书。 |
- 天 2555 | 告知证书的有效期为 7 年或 2555 天。时间段可以根据需要进行调整。 |
-newkey rsa:2048 | 指定使用长度为 2048 位的 RSA 生成密钥和证书。 |
接下来,我们要创建一个 Diffie-Heliman 组来与客户协商 PFS。
[centos#] openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
这将需要 5 到 15 分钟。
完美前向保密- 用于保护会话数据,以防私钥被泄露。这将生成一个在客户端和服务器之间使用的密钥,该密钥对于每个会话都是唯一的。
现在,将完美前向保密配置添加到我们的证书中。
[root@centos]# cat /etc/ssl/certs/dhparam.pem | tee -a /etc/ssl/certs/self-sign-apache.crt
配置 Apache 以使用密钥和证书文件
我们将对/etc/httpd/conf.d/ssl.conf进行更改-
我们将对ssl.conf进行以下更改。但是,在执行此操作之前,我们应该备份原始文件。在vi或emcas等高级文本编辑器中对生产服务器进行更改时,最佳实践是在进行编辑之前始终备份配置文件。
[root@centos]# cp /etc/httpd/conf.d/ssl.conf ~/
现在,将 ssl.conf 的已知工作副本复制到主文件夹的根目录后,让我们继续编辑。
- 定位
- 按如下方式编辑 DocumentRoot 和 ServerName。
\\# General setup for the virtual host, inherited from global configuration DocumentRoot "/var/www/html" ServerName centos.vmnet.local:443
DocumentRoot这是默认 apache 目录的路径。此文件夹中应该有一个默认页面,它将显示一个 HTTP 请求,询问您的 Web 服务器或站点的默认页面。
ServerName是服务器名称,可以是服务器的 IP 地址或主机名。对于 TLS,最佳实践是创建带有主机名的证书。在我们的 OpenLdap 教程中,我们在本地企业域上创建了 centos 主机名:vmnet.local
现在我们要注释掉以下几行。
SSL协议
# 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
然后让 Apache 知道在哪里可以找到我们的证书和私钥/公钥对。
指定我们的自签名证书文件的路径
# 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
最后,我们需要允许通过端口 443 到https 的入站连接。