apache 配置 https

Ubuntu下HTTPS配置非常简单,对大部分用户而言,使用普通的自签名证书,只需按照步骤进行就可以了,无需了解密钥、证书的更多知识,更深的背景知识还有RSA算法、DES算法、X509规范、CA机构...等等,随便哪个方向都够学习一阵子的,所幸的是有了OpenSSL、OpenSSH等这些开源免费的软件,把很多底层的算法、规范都集成了,对上层应用而言,只需一二三操作即可,至多到...

Ubuntu下HTTPS配置非常简单,对大部分用户而言,使用普通的自签名证书,只需按照步骤进行就可以了,无需了解密钥、证书的更多知识,更深的背景知识还有RSA算法、DES算法、X509规范、CA机构...等等,随便哪个方向都够学习一阵子的,所幸的是有了OpenSSL、OpenSSH等这些开源免费的软件,把很多底层的算法、规范都集成了,对上层应用而言,只需一二三操作即可,至多到官网去查查一些特殊的命令集。

一、安装Apache

$sudo apt-get install apache2

使用此方式安装的APACHE,配置比较分散,一般如下:

  • 默认站点在 /var/www/

  • 配置文件在 /etc/apache2/

  • 日志在 /var/log/apache/

  • 启动脚本是 /usr/bin/apache2ctl 或者 /etc/init.d/apache2

二、安装openssl

Ubuntu默认已经安装了OPENSSL,如果没安装,

$sudo apt-get install openssl

三、开启SSL模块

$sudo a2enmod ssl

这条命令相当于
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

如果没有a2enmod指令,也可直接在apache2.conf中设置SSL模块加载:

LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so

四、创建证书

创建证书有两种:一种是自签名证书,另外一种是第三方CA机构签名证书。第一种随便使用,只是没有经过官方认可的机构认证而已,后一种则是正规的签名证书,有发证机构签名。其实很多所谓的大网站上使用的SSL证书,一样都是自签名的,主要是因为这个证书只做为在线验证使用,保证传输数据安全即可,不过使用这种证书,对常规浏览器和一些软件而言,一般均会弹出警告,让你确认这个签名证书的有效性。正规签名证书也不过只是多了一重保障而已,而且浏览器、软件等可以自己鉴别。

1、自签名证书

可使用apache内置的工具创建默认的自签名证书,通过-days参数指定有效期。

$sudo apache2-ssl-certificate

注意:上述命令可能在最新的apache中默认未安装,如果使用的是LAMP套件,一般会有这个模块。

不过我们还可以使用openssl命令(如果openssl是自编译安装的,没有注册该命令的话,可以使用绝对路径,比如类似/usr/local/openssl/openssl这样)创建:

1$sudoopenssl req -x509 -newkey rsa:1024 -keyout apache.pem -out apache.pem -nodes -days 999
2
3Country Name (2 letter code) [AU]:CN
4State orProvince Name (full name) [Some-State]:SH
5Locality Name (eg, city) []:SH
6Organization Name (eg, company) [Internet Widgits Pty Ltd]:ABC
7Organizational Unit Name (eg, section) []:RD
8Common Name (eg, YOUR name) []:myservername
9Email Address []:test@gmail.com

注意:在要求输入Common Name (eg, YOUR name) 时,输入你的主机名(授权主机)。

创建完成后,当前目录下有个apache.pem文件,已经包含密钥和证书。可以把这个证书拷贝到/etc/apache2/下创建一个ssl目录然后拷贝到:

/etc/apache2/ssl/apache.pem

2、第三方CA机构签署证书

生成此证书,需要向第三方提交一个“生成证书请求文件(CSR)”,生成这个CSR需要两步:

  • 生成私钥KEY

  • 生成请求CSR

A、运行如下命令生成私钥:

01[root@localhost tmp]# openssl genrsa -des3 1024 -out server.key
02Generating RSA privatekey, 1024 bit long modulus
03...++++++
04.......................................................++++++
05e is 65537 (0x10001)
06Enter pass phrase:
07Verifying - Enter pass phrase:
08-----BEGIN RSA PRIVATE KEY-----
09Proc-Type: 4,ENCRYPTED
10DEK-Info: DES-EDE3-CBC,32BDD10A4F977F7E
11
12A7FOhETnGpQnRcCoe1VtOtb8yq12xi6ljq/6wYB6MsGGdGjhftF1FxnSMd9Jx4o2
13gjyUJNQs4zYkrtAaY6WYdOMiswymxiSYlKnX3l3uA6d6NqUpoyFxN7mgxqvbrdjq
14EaGSLo1d63B6THIq9mOGNm3l1xKtiUZVwHqVaHdb1F/RD6YshwE9yE5bAXjKJKat
15sTewoVPxj0bjEDBz49K4m+epUrh7UQ7ZyjMiefvCgg0OxFB3H8zdG0SHa1sV4fG4
169R+4PPoIIlLty4oyAYRwNVUWV47qGV4Jub11s50azVwtS9CV31HZQt48zkcUZ9WF
172PBRQ3c4AMkewzfvjEUIF7bfHcBMl9ugu4fZfJTUxJbA4vHvoVczXhvcTaf6awHn
184YpEX/T3xWE8ObyOjvVh5Utl39INOqzxVKGoZF1ogLFm60SokYx0r+Y19jrz2084
19Nri4mHlYNymY+tviTFUUIHZ+8FRnkq0vnW68ejiSzG0Xyr2DDzc7pi6J58bqQ3yR
20eNJuK8KVjXxkRn1HXtGL/C6ZpJ4qs6VVzX291vPrr7luWrXGsAcRudLWRFZDSoUB
21lFw1CY9ol2TOX2mvt6JryhoH08x3s2prlIen10N35sVELB/nb1/8kkpztCbPHiA/
22IH2A3g/WexCAatmCMuqlxW8Cwe98AUZduuZsAZeDoyXk7VxD7YhPKZmKPKOx3gZv
232S1ZpzsNgZh9HhpXsRxjwbYnyICtcUY+dQZXk1w//BP2syjcffXqqhp2FPK3SG7l
24PsvHIWQGeTUe5uILP7S/Bbi/KrFAkDguGJHge0mmHgL9gi8RvODtKQ==
25-----ENDRSA PRIVATE KEY-----
26[root@localhost tmp]#

这里使用了-des3参数,将会需要输入一个密码对私钥进行加密,每次使用此私钥也需要输入此密码,如不需对私钥加密请不要使用-des3选项。输入两次密码后,将会生成server.key私钥文件。

B、生成请求文件

运行如下命令生成证书请求文件(CSR)

openssl req -new -key server.key –out server.csr

把这个CSR文件传给CA机构,然后他们会使用此请求文件生成证书。

五、编辑HTTPS(SSL)配置

A、添加监听端口

编辑Apache端口配置(/etc/apache2/ports.conf),加入443端口(SSL缺省使用):

Listen 80

Listen 443

B、设置site-enabled

上文安装完后,会在/etc/apache2/sites-available/目录下生成一个缺省的default-ssl文件。缺省的网页目录仍然是/var/www/。我们可以创建一个链接到site-enabled目录。

ln -s /etc/apache2/sites-available/default-ssl /etc/apache2/sites-enabled/001-ssl

C、修改配置文件

确认HTTP监听端口改为80

#vi /etc/apache2/sites-enabled/000-default

1NameVirtualHost *:80
2
3ServerAdmin webmaster@localhost
4#[......]

HTTPS监听端口缺省443:

把端口改为443,在<Virtualhost>下加入SSL认证配置,其它的根据需要自己定制 与普通配置无异:

#vi /etc/apache2/sites-enabled/001-ssl

01NameVirtualHost *:443
02
03<VirtualHost *:443>
04SSLEngine on
05SSLCertificateFile /etc/apache2/ssl/apache.pem
06ServerAdmin webmaster@localhost
07DocumentRoot /var/www
08ServerName myServerName
09<Directory />
10Options FollowSymLinks
11AllowOverride All
12</Directory>
13<Directory /var/www/>
14Options FollowSymLinks MultiViews
15AllowOverride None
16Order allow,deny
17allow from all
18# This directive allows us to have apache2's defaultstart page
19# in /apache2-default/, but still have / go to the right place
20#RedirectMatch ^/$ /apache2-default/
21</Directory>

六、重启APACHE

# service httpd restart

或,

# /etc/init.d/apache2 restart

测试https://localhost/,IE会弹出security alert(安全警告),如下图:

201204162008567661.jpg


Firefox会提示是否添加Exception信息,如下图:

201204161849421261.jpg


附带虚拟主机配置

<VirtualHost 127.0.0.6:443>

SSLEngine on

SSLCertificateFile /etc/apache2/ssl/apache.pem

ServerAdmin webmaster@localhost

ServerName www.xxx.com

ServerAlias www.xxx.com


DocumentRoot /var/www/ www.xxx.com

<Directory />

Options FollowSymLinks

AllowOverride None

</Directory>

<Directory /var/www/ www.xxx.com>

Options Indexes FollowSymLinks MultiViews

AllowOverride None

Order allow,deny

allow from all

</Directory>


ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

<Directory "/usr/lib/cgi-bin">

AllowOverride None

Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch

Order allow,deny

Allow from all

</Directory>


ErrorLog ${APACHE_LOG_DIR}/error.log


# Possible values include: debug, info, notice, warn, error, crit,

# alert, emerg.

LogLevel warn


CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>


<VirtualHost 127.0.0.6:80>

ServerAdmin webmaster@localhost

ServerName www.xxx.com

ServerAlias www.xxx.com


DocumentRoot /var/www/ www.xxx.com

<Directory />

Options FollowSymLinks

AllowOverride None

</Directory>

<Directory /var/www/ www.xxx.com>

Options Indexes FollowSymLinks MultiViews

AllowOverride None

Order allow,deny

allow from all

</Directory>


ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

<Directory "/usr/lib/cgi-bin">

AllowOverride None

Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch

Order allow,deny

Allow from all

</Directory>


<IfModule mod_rewrite.c>

RewriteEngine On

RewriteCond %{REQUEST_URI} !^/test.php

RewriteCond %{REQUEST_URI} !^/tp.php

RewriteRule ^(.*) https://%{SERVER_NAME}$1 [L,R]

</IfModule>


ErrorLog ${APACHE_LOG_DIR}/error.log


# Possible values include: debug, info, notice, warn, error, crit,

# alert, emerg.

LogLevel warn


CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>


?kjerryhe

转载于:https://blog.51cto.com/jerry1204/1358502

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐

  • 浏览量 118
  • 收藏 0
  • 0

所有评论(0)

查看更多评论 
已为社区贡献14条内容