Webサーバー構築

# 1.目的
仮想環境でwebサーバーを構築し、webページが表示されるのを確認する。

# 2.環境
- Windows11
- VirtualBox7.0
- Ubuntu24.04.01 LTS
- Apache/2.4.58
- OpenSSL3.0.13

# 3.前提
- VirtualBoxとUbuntuのisoイメージファイルはダウンロードし仮想マシンを立てておく

https://www.oracle.com/jp/virtualization/technologies/vm/downloads/virtualbox-downloads.html

https://ubuntu.com/download/server

# 4.構築手順
## 1\.Apache2のインストール

Apache2をインストールするには管理者権限が必要になるので、root権限またはsudoコマンドでインストールを行う

#### 1.1 Apache2をインストール
```
$ sudo apt install apache2 -y
```
Apache2のインストールが完了したら、起動とバージョンを確認。

```
$ systemctl status apache2

apache2.service - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/apache2.service; enabled; preset: enabled)
     Active: active (running) since Wed 2024-12-11 00:16:36 UTC; 1h 11min ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 1167 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
   Main PID: 1173 (apache2)
      Tasks: 55 (limit: 2276)
     Memory: 9.7M (peak: 9.9M)
        CPU: 966ms
     CGroup: /system.slice/apache2.service
             tq1173 /usr/sbin/apache2 -k start
             tq1175 /usr/sbin/apache2 -k start
             mq1176 /usr/sbin/apache2 -k start
```
```
$ apachectl -v

Server version: Apache/2.4.58 (Ubuntu)
Server built:   2024-10-02T12:40:51
```

#### 1.2 ブラウザを起動し、プライベートIPアドレスでアクセス
※IPアドレスはip addrコマンドで確認しておく

![スクリーンショット 2024-12-11 110643.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3958074/a3188054-ba1c-6d0a-8f68-448f54f80a24.png)

Apacheのデフォルトページが表示されていれば、OK。

## 2\.SSL証明書の作成

暗号化されたhttpsで通信するにはSSL証明書が必要になる。
外部に公開するつもりはないので、自己署名証明書を使用する。

#### 2.1 rootユーザーに変更

```
$ su -
```

#### 2.2 秘密鍵を作成
```
# cd /etc/ssl/private

# openssl genrsa －out <任意のファイル名> 2048
```
- genrsa: rsa暗号方式の秘密鍵を作成
- -out: 作成した秘密鍵を出力するファイル名を指定（拡張子: key）
- 2048: 鍵長の指定（bit単位）

#### 2.3 CSR（証明署名要求）を作成

```
# openssl req -new -key <秘密鍵> -out <任意のファイル名> -days 365
```

- req: CSRの操作するサブコマンド
- -new: 新規のCSRを作成
- -key: CSRの署名に使用する秘密鍵を指定
- -out: 作成したCSRを出力するファイル名を指定（拡張子: csr）
- -days: 有効期間を指定（日数）

実行すると、プロンプト上で証明書の情報の入力が求められる。

|証明書の情報(英語表記）|意味|
|:--|:--|
|Country Name (2 letter code)|国名(2文字)|
|State or Province Name|都道府県名|c|
|Locality Name|市区町村名|
|Organization Name|組織名|
|Organizational Unit Name|会社や組織の部署名|
|Common Name|氏名またはサーバのホスト名|
|Email Address|メールアドレス|

#### 2.4 自己署名証明書を作成

作成したCSRを基に秘密鍵を使用して作成する。

```
# openssl x509 -req -signkey <秘密鍵> -in <CSRファイル> -out <任意のファイル名> 
-days 365
```

- x509: X.509証明書を操作するサブコマンド
- -req: CSRから情報を取得して証明書を作成
- -signkey: 証明書に署名するための秘密鍵の指定
- -in: CSRファイルの指定
- -out: 作成した証明書を出力するファイル名を指定(拡張子: crt)
- -days: 有効期間を指定（日数）

## 3.Apache2の設定変更
作成した秘密鍵と自己署名証明書を指定するためにApache2の設定ファイルを修正する。

#### 3.1 default-ssl.confを修正
```/etc/apache2/sites-available/default-ssl.conf
SSLCertificateFile      /<自己署名証明書>　#自己署名証明書の絶対パスを指定
SSLCertificateKeyFile   /<秘密鍵>        #秘密鍵の絶対パスを指定
```

## 4.SSLの有効化とApache2の再起動
#### 4.1 SSLモジュールの有効化
```
# a2enmod ssl
```
#### 4.2 SSLの有効化
```
# e2ensite default-ssl
```
#### 4.3 Apache2の再起動
```
# systemctl restart apache2
```
#### 4.4 ブラウザを起動し、httpsでアクセス

![スクリーンショット 2024-12-11 164007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3958074/1d7e151a-d566-6e32-7a97-944025cd8160.png)

使用した証明書が自己署名証明書であるため、ERR_CERT_AUTHORITY_INVALIDのエラーメッセージが表示されるが、
詳細設定からxxxにアクセスする(安全ではありません)をクリックするとApache2のデフォルトページを表示することができる

![スクリーンショット 2024-12-11 165109.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3958074/082be3e7-2cbd-5e8b-fb9a-9e38606f2a62.png)

# 

# 5.参考
[とほほのOpenSSL入門](https://www.tohoho-web.com/ex/openssl.html)

# 6.関連
[【OpenSSL】localhost を https 化する 自己証明書の作成方法](https://qiita.com/te-k/items/252383eb07ca3cd47fc0)