Apache2 配置 https

## Apache 配置 httpshtml

> Apache 版本: **2.4.10**
Linux 版本 : **Debian**web

### 安裝Apache
控制檯命令:` sudo apt-get install apache2 `
安裝好了Apache2會自動啓動,可是自動啓動的不包含https僅僅是httpapache

**默認的配置路徑**vim

Apache配置文件路徑: ` cd /etc/apache2/`
Apache默認日誌路徑: `cd /var/log/apache2`瀏覽器

### 配置https
####首先
進入Apache的配置文件目錄
`cd /etc/apache2/`服務器

查看目錄結構
`tree`app

具體的目錄結構以下
> apache2.conf
conf-available
conf-enabled
envvars
magic
mods-available
ports.conf
sites-available
sites-enabledless

其中 ** apache2.conf** 是整個Apache的主配置文件,
部分代碼
```
# Include module configuration:
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.confide

# Include list of ports to listen on
Include ports.confui


# Sets the default security model of the Apache2 HTTPD server. It does
# not allow access to the root filesystem outside of /usr/share and /var/www.
# The former is used by web applications packaged in Debian,
# the latter may be used for local directories served by the web server. If
# your system is serving content from a sub-directory in /srv you must allow
# access here, or in any related virtual host.
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>

<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>

<Directory /var/www/>
Options Indexes FollowSymLinks
nclude module configuration:
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf

# Include list of ports to listen on
Include ports.conf

```
從代碼能夠看出配置文件主要就是引入了 `ports.conf` ,`mods-enabled/*.conf`,`mods-enabled/*.load`,`conf-enabled/*.conf` ,`sites-enabled/*.conf`文件,從文件名稱也能看出來,除了`ports.conf`,其餘的文件夾名稱中包含`-enabled`都表明着在Apache中啓用的配置,而`-available`的都爲提供的模塊可是並不必定已經在用。並且`-enabled`文件夾中的文件都是`-available`文件中的一個軟連接。

咱們須要啓用https,也就是須要使用ssl協議,因此咱們須要找到在`mods-available`文件夾中的`ssl.conf`,`ssl.load`,而後把這兩個文件的軟連接到`mods-enabled`中,這表明着在Apache中啓用**ssl**模塊
在`/etc/apache2/`目錄下:
```
ln -s ./mods-available/ssl.conf ./mods-enabled/ssl.conf
ln -s ./mods-available/ssl.load ./mods-enabled/ssl.load
```
而後在`mods-enabled`目錄下就能看到`ssl.conf`和`ssl.load`這兩個文件了。

新建一個目錄用來存放本身的證書文件
`mkdir ssl && cd ssl`

#### 開始證書製做:
生成2048位的加密私鑰
`openssl genrsa -out server.key 2048`

生成證書籤名請求(CSR)
`openssl req -new -key server.key -out server.csr`
在這一步當中會要求輸入一些信息,好比國家,城市,這些都不重要,重要的是** Common Name** 這個須要輸入你想要把證書用在什麼域名是 好比個人就是 `www.notrue.cn` 而後這個後面的配置有關係。好像也能夠寫通配符,可是我沒嘗試過有興趣的能夠去試試。

生成類型爲X509的自簽名證書。有效期設置3650天,即有效期爲10年
`openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt`

####修改vhost

這個在`sites-enabled`文件夾的`000-default.conf`文件當中
`vim 000-default.conf`

代碼:
```
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html

# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>

```
能夠看到這裏面只是配置了一個普通的80端口的虛擬主機,也就是http請求,咱們須要作的就是配置一個https的虛擬主機
在文件末尾添加
```
<VirtualHost *:443>
ServerName www.notrue.cn
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/2_www.notrue.cn.crt
SSLCertificateKeyFile /etc/apache2/ssl/3_www.notrue.cn.key
</VirtualHost>
```
其中的`ServerName`填入你剛纔製做證書的時候的`Common Name`,而後保存

重啓你的Apache
`service apache2 restart`

查看狀態
`service apache2 status`
若是不出意外的話應該就是顯示運行狀態爲** active (running) ** 。而後就能夠訪問了。
域名前面須要加`https://`(PS:會有一個×,這是由於沒有CA認證)

### 加入CA認證
通常的話國內各大雲服務商都有免費的CA證書。
[阿里雲](https://common-buy.aliyun.com/?commodityCode=cas#/buy),[騰訊雲](https://www.qcloud.com/product/ssl),都會有提供免費 的CA證書,而後你能夠申請,記住域名修改了的話在Apache中`000-default.conf`文件中的`VirtualHost`中的`ServerName`也須要作相應的修改,而後你就能夠雲服務器商給你的文件上傳到服務器上面去,而且在Apache配置中給添加上去,好比個人就是
```
<VirtualHost *:443>
ServerName www.notrue.cn
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/2_www.notrue.cn.crt
SSLCertificateKeyFile /etc/apache2/ssl/3_www.notrue.cn.key
SSLCertificateChainFile /etc/apache2/ssl/1_root_bundle.crt
</VirtualHost>

```

而後如今在瀏覽器訪問的時候地址欄的`https`那兒就不會有一個×了。

### 遇到的問題

遇到了不少問題,最主要的仍是本身CA製做證書,由於不懂,因此在`000-default.conf`文件中寫成了
```
<VirtualHost *:443>
ServerName localhost
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/2_www.notrue.cn.crt
SSLCertificateKeyFile /etc/apache2/ssl/3_www.notrue.cn.key
</VirtualHost>

```
而後就一直提示我`ServerName`和公鑰當中的ID不對,後面也是看了其餘的人才知道。並且網上其餘的人都沒有用這個版本,或者說沒有這個版本的教程,因此本身去看`apache2.conf`才知道整個Apache的文件結構,而後再根據本身的常識去改。

還有,在`ssl.conf`中註釋掉
```
#SSLSessionCache dbm:${APACHE_RUN_DIR}/ssl_scache
#SSLSessionCache shmcb:${APACHE_RUN_DIR}/ssl_scache(512000)
#SSLSessionCacheTimeout 300
```
這三行,(前面加** # **表示註釋),由於不註釋的話會報錯,報錯一個模塊沒有引入。由於我還並非太須要這個`Cache`因此就沒管,就直接註釋掉了.

應該就是這些問題了。。。

### 參考連接[Apache 使用ssl模塊配置HTTPS](http://blog.csdn.net/ithomer/article/details/50433363)[apache 配置https 支持ssl](http://9911505.blog.51cto.com/9901505/1696285)[自動安裝證書](https://certbot.eff.org/#debianjessie-apache)

相關文章
相關標籤/搜索