web-based program

apache 配置 https

http 协议传输过程中,信息是不加密透明的,密码或者敏感信息很容易被窃取,http 服务在端口 80 上启动,现在的网站大都是 https 服务,在端口 443 上服务,利用 ssl 加密传输,如果要想在自己的主机上配置 https,可以通过 apache 和 腾讯云颁发的证书实现。

  1. 证书下载

    这里涉及密码学知识,我不多说,直接在腾讯云上买了域名,申请证书然后下载,会提供不同服务器的证书,选择 apache 的,传到服务器上。

  2. 配置 apache2

    首先让 apache2 支持 ssl

    sudo apt-get install openssl

    sudo a2enmod ssl

    设置 apache2 的ssl配置

    sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/default-ssl.conf

    cd /etc/apache2/sites-available

    下载腾讯云上面申请的 ssl 证书,里面有 apache 命名的文件夹,利用 xftp 发送到云服务器的 /tmp 目录下。

    sudo cp -r /tmp/Apache /etc/apache2

    cd /etc/apache2/sites-available

    sudo vim default-ssl.conf

    修改文档路径为你的wordpress所在路径

    添加 ServerName + 你的域名

    添加证书路径

    SSLCertificateFile  证书地址/2_xxx.crt
    SSLCertificateKeyFile 证书地址/3_xxx.key
    SSLCertificateChainFile 证书地址/1_root_bundle.crt
    

    退出编辑,重启 apache

    sudo service apache2 restart

启动重定向

强迫症患者可以强制 http 转 https。利用 apache 的重定向功能实现

启动重定向

sudo a2enmod rewrite

配置当访问 80 端口的时候启动重定向

cd /etc/apache2/sites-available

sudo vim 000-default.conf

RewriteEngine on
RewriteCond   %{HTTPS} !=on
RewriteRule   ^(.*)  https://%{SERVER_NAME}$1 [L,R=301]

重启 apache

sudo service apache2 restart

apache 利用不同域名对不同目录进行访问

多个域名可以绑定到同一个主机,利用 apache 实现不同目录的访问

cd /etc/apache2/sites-availabled

cp 000-default.conf 111-default.conf

更改 ServerName 为新域名地址

更改 DocumentRoot

sudo ln -s ../sites-available/mysql.conf 111-default.conf

重启 apache

sudo service apache2 restart

多ssl证书认证

在 default-ssl.conf 中添加一段话,修改相应的目录和域名

<VirtualHost 0.0.0.0:443>
    DocumentRoot "/var/www/html"
    ServerName www.domain.com
    SSLEngine on
    SSLCertificateFile /usr/local/apache/conf/2_www.domain.com_cert.crt
    SSLCertificateKeyFile /usr/local/apache/conf/3_www.domain.com.key
    SSLCertificateChainFile /usr/local/apache/conf/1_root_bundle.crt
</VirtualHost>

记得是将这段话添加到<IfModule mod_ssl.c></IfModule>内 ,重启 apache。

总结

https 的实现思路大概是这样的。

  1. 需要一个信任机构提供的证书,当别人访问你的网站的时候,浏览器会去信任中心确认你的证书是否可行,证书通过域名绑定。
  2. 接下来,客户和服务器上数据的传输,都会通过证书提供的密钥来加密传输。

当然这部分的实现还是挺复杂的,所以 apache 帮我们实现了,我们只需要稍微修改相应的设置即可。