Apache开启SSL/https的过程
启用Apache SSL模块
a2enmod ssl
默认的Apache网站提供了一个启用SSL的有用模板
a2ensite default-ssl
重新启动Apache以使这些更改生效
service apache2 reload
===购买了证书的跳过生成步骤===
生成私钥
使用openssl工具生成一个RSA私钥
nbsp;openssl genrsa -des3 -out server.key 2048
说明:生成rsa私钥,des3算法,2048位强度,server.key是秘钥文件名。
注意:生成私钥,需要提供一个至少4位的密码。
生成CSR(证书签名请求)
生成私钥之后,便可以创建csr文件了。
此时可以有两种选择。理想情况下,可以将证书发送给证书颁发机构(CA),CA验证过请求者的身份之后,会出具签名证书(很贵)。
另外,如果只是内部或者测试需求,也可以使用OpenSSL实现自签名,具体操作如下
nbsp;openssl req -new -key server.key -out server.csr
说明:需要依次输入国家,地区,城市,组织,组织单位,Common Name和Email 其中Common Name,可以写自己的名字或者域名 如果要支持https,Common Name应该与域名保持一致,否则会引起浏览器警告Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []: Email Address []:
生成自签名证书
如果你不想花钱让CA签名,或者只是测试SSL的具体实现。那么,现在便可以着手生成一个自签名的证书了。
需要注意的是,在使用自签名的临时证书时,浏览器会提示证书的颁发机构是未知的。
nbsp;openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
说明:crt上有证书持有人的信息,持有人的公钥,以及签署者的签名等信息。当用户安装了证书之后,便意味着信任了这份证书,同时拥有了其中的公钥。证书上会说明用途,例如服务器认证,客户端认证,或者签署其他证书。当系统收到一份新的证书的时候,证书会说明,是由谁签署的。如果这个签署者确实可以签署其他证书,并且收到证书上的签名和签署者的公钥可以对上的时候,系统就自动信任新的证书。
=====下面继续 进行证书路径指定=======
000-default.conf #http服务器配置文件
default-ssl.conf #https服务器配置文件
配置Apache以使用SSL
/etc/apache2/sites-enabled/default-ssl.conf
里面的注释希望你看一看 写得很清楚 每一行是干什么的 例如:错误日志呀 普通日志呀 端口呀 域名呀 脑子变通一下
nano /etc/apache2/sites-enabled/default-ssl.conf
到开头的部分<VirtualHost _default_:443>
并进行以下修改。
ServerAdmin webmaster@localhost #网站管理员邮箱 ServerName blog.moeyuuko.top:443 #域名 SSLCertificateFile /etc/apache2/ssl/apache.crt #.crt路径 SSLCertificateKeyFile /etc/apache2/ssl/apache.key #.key路径 SSLCACertificatePath /etc/apache2/ssl/ #ca.crt证书目录 SSLCACertificateFile /etc/apache2/ssl/apache.key #ca.crt证书路径
进行这些更改后,请检查配置文件是否与以下内容匹配。
/ etc / apache2 / sites-enabled / default-ssl
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin webmaster@localhost ServerName example.com:443 DocumentRoot /var/www/html . . . SSLEngine on . . . SSLCertificateFile /etc/apache2/ssl/apache.crt SSLCertificateKeyFile /etc/apache2/ssl/apache.key SSLCACertificatePath /etc/apache2/ssl/ SSLCACertificateFile /etc/apache2/ssl/apache.key
保存并退出文件。
重新启动Apache以应用更改。
service apache2 reload
设置重定向规则--http跳转到https
注意: 如果没有启用rewrite的 使用命令 a2enmod rewrite 启用
然后修改 /etc/apache2/apache2.conf 配置文件
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All #None改成All Require all granted </Directory>
最后 重启apache2
编辑器打开.htaccess文件,写入如下规则:
RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ [NC] RewriteCond %{REQUEST_URI} !^/tz.php ##这行是排除,可删除,举例子而已 RewriteRule (.*) https://%{SERVER_NAME}/$1 [L]
解释:
%{SERVER_PORT} ##访问端口 %{REQUEST_URI} ##比如如果url是 http://localhost/tz.php,则是指 /tz.php %{SERVER_NAME} ##比如如果url是 http://localhost/tz.php,则是指 localhost
以上规则的意思是,如果访问的url的端口不是443,且访问页面不是tz.php,则应用RewriteRule这条规则。这样便实现了: 访问了 http://localhost/index.php 或者 http://localhost/admin/index.php 等页面的时候会自动跳转到 https://localhost/index.php 或者 https://localhost/admin/index.php 但是访问 http://localhost/tz.php 的时候就不会做任何跳转 [你可以把他删掉] 也就是说 http://localhost/tz.php 和 https://localhost/tz.php 两个地址都可以访问
文章评论