在写服务端的时候,有时候要求后台强制提供 Https服务,不然请求失败,并且由于 Https相对于来说更为安全,所以准备配置一下 Https在 Apache上。
安装 apache
如果没安装运行下面命令:
sudo apt-get install apache2
然后请配置好自己想要走的 Https 的二级域名!我默认你已经配置好了,不会配置的请自行看我其他博客里有写。或者百度。
下载 OpenSSL
一般情况Ubuntu已经安装了 OpenSSL,如果没有安装就安装一下:
sudo apt-get install openssl
开启 SSL模块
sudo a2enmod ssl
如果发现 a2enmod这个命令不存在,就自己手动运行下面命令:
sudo ln -s /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled
sudo ln -s /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled
这样就可以了。
生成证书
以下三种方式,自选一种!不要三种都尝试。
1. 自签名证书
这种方式就是自己生成一个证书,然后可以用 https的方式访问,但是一般浏览器会提示这种 https并不安全,但是免费:
可以通过 openssl命令来生成:
sudo openssl req -x509 -newkey rsa:1024 -keyout apache.pem -out apache.pem -nodes -days 999
然后会出现如下的内容:
Generating a 1024 bit RSA private key
......++++++
..........................................++++++
writing new private key to 'apache.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) [AU]:CH State or Province Name (full name) [Some-State]:ShannXi Locality Name (eg,city) []:Xian Organization Name (eg,company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg,section) []: Common Name (e.g. server FQDN or YOUR name) []:judianer Email Address []:
注意:在要求输入Common Name (eg,YOUR name) 时,输入你的主机名(授权主机)
把能填写的填写上就可以了,然后会生成一个 apache.pem文件。然后这个文件放到
/etc/apache/ssl/apache.pem //路径不存在的话手动创建
2. CA机构签署证书
这个就是更正式一点,浏览器不会报错出现不安全的提示,流程如下:
其中前两步是我们操作,最后一步就是找个便宜的(有钱的就找付费的)一个机构,把 CSR 文件给它们就好了。
运行下面的命令:
//需要对私钥加密的 加上-des3
openssl genrsa -des3 1024 -out server.key
//不需要加密的话去掉-des3,我没选择加密
然后出现下面的内容:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,CDE68DC5EE597A0E
tQIXgoZ7Kq+40Qyrk1Gi9KXYBctPTcQopluLYni7d6VWIK3x3AgUHU/d/ofJA5uz
1aQkeCnlG7KCuuSA3/jS+NsGecuETC2IH1f/IYB51Z8uZrHzNhnjDy7RpsbTAAhj
zRz2QEXcZ384Fmvbs2OHKy973avS5V17BPHfpVNR3dJf3UtvaebYLSF9/DiSbUAB
Svr9io6aeAm/b1NPZpnq31XZiP9AocxkNvibLDt6efOzn3AfnPAoKefnBmNZZBBs
iO/uu/qo6vAKM4V7gCa2mSq2OhsQ4iMmtt8ez2AupiRfzYVZU0KlMUDLSWlin1Aq
5/L4RbIN2G/KrciarSXMt6bCf2UCDAld8BXLQQWT016sq1bKlivGObgx3gfoI2KZ
q9WYs94z3cJ2OxvnsjSa3l1AoP4ZUkmKeP5pmCgq+sFWFpqxpqurKikRmCudvbGu
M2fid***********3N4c5k6rS6c/n2IZjIt9En0GPaR1c7J5cJiAnTqc7lE
XNb7vK4qElc7rMGBc/h18HZAqQsgwN1g2broOUIDfbQs+qe6lDL/++VniLIMWZpY
DZAIAD7epEGaDPL0o4OtojaC52AzK/e8nGmXp9At5C1fI9nIvz5tgONz+FCXy6oh
au3kBU6Fgg95uG7YYhS/UvYblbs8q9kDHDC8MS5F3zUKTUQWAjGMgc4jyYvKBKTj
ttx56094/U3oRn8ymtG9kNrRLo1EDM7oPrfFqSdwig7w1hs5VP6OVg==
-----END RSA PRIVATE KEY-----
openssl req -new -key server.key –out server.csr
这样就好了,把 csr文件发给 CA机构,这个机构就要自己去找了。
3. 云服务帮忙弄
其实就是上面的流程,不过我使用腾讯云的时候,他们可以帮忙申请,还是免费的。
申请流程:
https://www.qcloud.com/document/product/214/6989
证书安装指导:
//他的这个安装指导是老版本的,所以可以不参考。
https://www.qcloud.com/document/product/400/4143
证书安装
CA签名证书
在拿到CA发布的证书之后,做下面的配置:
sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/default-ssl.conf
sudo vim /etc/apache2/sites-available/default-ssl.conf
如果是自己签名的,请看后面,不要看这里。
<VirtualHost _default_:443>
ServerAdmin chenfushan1992@gmail.com
ServerName alps.yourserver.cc
//你自己的二级域名 要走 https的
DocumentRoot /home/alps/Sites
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
//下面是收到的三个证书
SSLCertificateFile /etc/apache2/ssl/Apache/2_alps. yourserver.cc.crt
SSLCertificateKeyFile /etc/apache2/ssl/Apache/3_alps.yourserver.cc.key
SSLCertificateChainFile /etc/apache2/ssl/Apache/1_root_bundle.crt
<FilesMatch "\.(cgi|shtml|phtml|PHP)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
# MSIE 7 and newer should be able to use keepalive
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>
这样就配置好了。重启 apache.
自签名的证书
sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/default-ssl.conf
sudo vim /etc/apache2/sites-available/default-ssl.conf
然后配置 default-ssl.conf
NameVirtualHost *:443
<VirtualHost *:443>
ServerAdmin email@example.com
DocumentRoot /var/www/
ServerName alps.yourserver.com
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options FollowSymLinks
AllowOverride All
</Directory>
Options FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</VirtualHost>
重启apache.