要求以 root 身份运行的命令以前缀#
,而可以以普通用户身份运行的命令以前缀$
。建议以 root 用户身份运行命令的方式是,以普通用户的身份为每个命令添加前缀sudo
。安装并熟悉文本编辑器,例如 vi,vim,nano,emacs 或其他类似的编辑器。
使用 HTTPS 安全服务
通过 HTTPS 提供内容可以使用非常强大的加密,因此,没有人拦截用户和 Web 服务器之间的流量,无法读取该内容。它不仅对流量本身进行加密,而且对所访问的 URL 进行加密,否则将暴露信息。一段时间以来,作为 HTTPS Everywhere 计划的一部分,Google 一直根据网页是否使用 HTTPS 来部分确定搜索排名。
注意:DNS 查找不会公开正在连接的域名,但是在此过程中不会公开整个 URL。
获取 SSL / TLS 证书
从技术上讲,TLS 取代了 HTTPS 证书的 SSL,但是,大多数地方只是继续使用更流行的术语 SSL 证书来调用 TLS 证书。遵循常用用法,本指南将执行相同的操作。
要使用 HTTPS,您的 Web 服务器需要一个私钥(.key
)才能私有使用,并需要一个证书(.crt
)进行公开共享,其中包括一个公钥。必须签署证书。您可以自己对其进行签名,但是现代的浏览器会抱怨它们无法识别该签名者。例如,Chrome 将显示:Your connection is not private. Attackers might be trying to steal your information... NET::ERR_CERT_AUTHORITY_INVALID
。如果只有一群人在使用该网站,这是可以接受的,因为浏览器将允许继续进行操作。例如,在 Chrome 上,点击“高级”,然后点击“继续…(不安全)”;仍然会显示“不安全”并划掉“ https”。
请注意,此过程将询问您您所在的国家,州/省,地区,组织,组织单位和惯用名称,以及您的电子邮件地址;所有这些都可以在通过 HTTPS 连接到您网站的任何浏览器中访问。
还要注意,如果要给虚拟主机证书,则需要在下面提供不同的文件名,并在虚拟主机配置中指向它们。
切换到适合您的 Web 服务器的目录。
如果安装了 Apache:
$ cd /etc/httpd/conf
如果您安装了 Nginx:
$ cd /etc/nginx
进入正确的目录后,生成一个私钥(server.key
)和自签名证书(server.crt
):
# openssl req -new -x509 -nodes -newkey rsa:4096 -keyout server.key -out server.crt -days 825
设置只读权限,并且仅允许由根用户读取私钥:
# chmod 400 server.key
# chmod 444 server.crt
或者,您可以获取由受信任的证书颁发机构签名的证书。您可以支付各种公司(证书颁发机构)来为您签名证书。在考虑证书颁发机构时,重要的是要研究哪些浏览器和哪些版本可以识别它们。在较旧的浏览器版本上,某些新的证书颁发机构可能不被视为比自签名证书更正式的证书。
通常,您不仅需要一个公共 IP 地址,而且还需要一个域名。一些证书颁发机构可以将证书颁发给公共 IP 地址,但是很少这样做。
许多提供商都提供 30 天的免费试用期,建议从 30 天开始免费试用。这样一来,您可以在付款之前确保该过程对您有效。价格可能从每年几美元到几百美元不等,这取决于它是哪种类型以及诸如多个域或子域之类的选项。标准证书仅表示签署机构已验证获得证书的人可以在域上进行更改。扩展验证证书还将指示签名授权机构对请求者进行了一些尽职调查,并且在现代浏览器中将在 URL 内或 URL 附近显示一个绿色条。在验证您可以在域上进行更改时,某些签名机构会要求您在域名的重要探测地址接收电子邮件,例如admin@your-domain.com
。许多提供替代验证,例如为您提供文件放置在服务器上,例如将文件放置在/srv/http/.well-known/pki-validation/
Apache 或/usr/share/nginx/html/.well-known/pki-validation/
Nginx 中,以用于单个主机目录配置。或临时创建一个 CNAME 条目,它们会在您域的 DNS 记录中为您提供。
您选择的签名机构可能具有略有不同的步骤,但是大多数将接受以下过程:
在适当的目录中,生成一个私钥(server.key
):
# openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out server.key
将私钥设置为只读,仅通过 root 用户:
# chmod 400 server.key
生成证书签名请求(server.csr
)。当要求您输入时,必须输入您的域名Common Name
,并且可以将质询密码留为空白:
# openssl req -new -sha256 -key server.key -out server.csr
将证书签名请求设置为只读,仅按 root 身份:
# chmod 400 server.csr
查看证书签名请求的内容。此信息是 base64 编码的,因此将看起来像随机字符:
# cat server.csr
-----BEGIN CERTIFICATE REQUEST-----
.....
-----END CERTIFICATE REQUEST-----
进行签名机构的过程,并在要求粘贴到 CSR 中时,复制并粘贴包括-----
行在内的整个文件。根据您选择的签名授权和证书的类型,它们可能会立即为您提供已签名的证书,或者可能是几天。当他们给您签名的证书后,将其(包括-----BEGIN CERTIFICATE-----
和-----END CERTIFICATE-----
行)复制到server.crt
上面为您的 Web 服务器指定的正确目录中的名为文件中,并将其设置为只读:
# chmod 444 server.crt
配置您的 Web 服务器以使用私钥和证书
如果您使用的是防火墙,则需要启用到端口的传入 TCP 通信443
。
对于 Apache
编辑/etc/httpd/conf/httpd.conf
并取消注释这些行:
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
Include conf/extra/httpd-ssl.conf
请注意,如果您使用的是虚拟主机,则将上面的更改更改为/etc/httpd/conf/httpd.conf
将在所有主机上使用相同的证书。要为每个主机提供自己的证书以避免浏览器抱怨该证书与域名不匹配,您需要编辑其每个配置文件/etc/httpd/conf/vhosts/
以指向其自己的证书和私钥:
- 更改
<VirtualHost *:80>
为<VirtualHost *:80 *:443>
。 - 在此
VirtualHost
部分中,添加以下内容:SSLEngine on SSLCertificateFile "/etc/httpd/conf/YOUR-DOMAIN-NAME.com.crt" SSLCertificateKeyFile "/etc/httpd/conf/YOUR-DOMAIN-NAME.com.key"
重新启动 Apache:
# systemctl restart httpd
对于 Nginx
编辑/etc/nginx/nginx.conf
并在底部附近,取消注释HTTPS server
部分,并将行更改为以下内容:
ssl_certificate server.crt;
ssl_certificate_key server.key;
root /usr/share/nginx/html;
请注意,如果您使用的是虚拟主机,则将上面的更改更改为/etc/nginx/nginx.conf
将所有主机发送到该位置。要为每个主机分配自己的证书,您需要在其中编辑每个配置文件,/etc/nginx/sites-enabled/
以拥有一个额外的服务器块来指向其自己的证书和私钥:
server {
listen 443 ssl;
server_name YOUR-DOMAIN-NAME.com;
ssl_certificate YOUR-DOMAIN-NAME.com.crt;
ssl_certificate_key YOUR-DOMAIN-NAME.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/YOUR-DOMAIN-NAME.com;
index index.html index.htm;
}
}
重新启动 Nginx:
# systemctl restart nginx