[OCI]ウォレットを使用せずにPHPアプリケーションからAutonomous DatabaseにTLS認証で接続してみた

# はじめに
[こちら](https://qiita.com/500InternalServerError/items/6822718140afc4e8884e)の記事では、ウォレットを使用せずにSQL*PlusからAutonomous DatabaseにTLS認証で接続できることを確認しました。

今回は、php-oci8を使用したPHPアプリケーションから、ウォレットを使用せずにSQL*PlusからAutonomous DatabaseにTLS認証で接続してみます。

[こちら](https://qiita.com/500InternalServerError/items/6822718140afc4e8884e)の記事で作成したAutonomous DatabaseとComputeインスタンスを使用して環境を構築します。

# 1.PHP、php-oci8、httpd（Apache2）のインストールと設定
yumコマンドでPHP、php-oci8とApache2をインストールします。

```
[opc@compute1 ~]$ sudo yum install -y oracle-php-release-el7
Loaded plugins: langpacks, ulninfo
Resolving Dependencies
--> Running transaction check
---> Package oracle-php-release-el7.x86_64 0:1.0-5.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

===================================================================================================================
 Package                              Arch                 Version                  Repository                Size
===================================================================================================================
Installing:
 oracle-php-release-el7               x86_64               1.0-5.el7                ol7_latest                14 k

Transaction Summary
===================================================================================================================
Install  1 Package

Total download size: 14 k
Installed size: 19 k
Downloading packages:
oracle-php-release-el7-1.0-5.el7.x86_64.rpm                                                 |  14 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : oracle-php-release-el7-1.0-5.el7.x86_64                                                         1/1 
  Verifying  : oracle-php-release-el7-1.0-5.el7.x86_64                                                         1/1 

Installed:
  oracle-php-release-el7.x86_64 0:1.0-5.el7                                                                        

Complete!
[opc@compute1 ~]$ sudo yum install -y php php-oci8-19c
Loaded plugins: langpacks, ulninfo
ol7_developer_php74                                                                         | 3.0 kB  00:00:00     
(1/2): ol7_developer_php74/x86_64/updateinfo                                                |   71 B  00:00:00     
(2/2): ol7_developer_php74/x86_64/primary_db                                                | 420 kB  00:00:00     
Resolving Dependencies
--> Running transaction check
---> Package php.x86_64 0:7.4.28-1.0.1.el7 will be installed
--> Processing Dependency: httpd-mmn = 20120211x8664 for package: php-7.4.28-1.0.1.el7.x86_64
--> Processing Dependency: php-cli(x86-64) = 7.4.28-1.0.1.el7 for package: php-7.4.28-1.0.1.el7.x86_64
--> Processing Dependency: php-common(x86-64) = 7.4.28-1.0.1.el7 for package: php-7.4.28-1.0.1.el7.x86_64
--> Processing Dependency: httpd for package: php-7.4.28-1.0.1.el7.x86_64
---> Package php-oci8-19c.x86_64 0:7.4.28-1.0.1.el7 will be installed
--> Processing Dependency: php-pdo(x86-64) = 7.4.28-1.0.1.el7 for package: php-oci8-19c-7.4.28-1.0.1.el7.x86_64
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-97.0.5.el7_9.4 will be installed
--> Processing Dependency: httpd-tools = 2.4.6-97.0.5.el7_9.4 for package: httpd-2.4.6-97.0.5.el7_9.4.x86_64
--> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-97.0.5.el7_9.4.x86_64
--> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-97.0.5.el7_9.4.x86_64
--> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-97.0.5.el7_9.4.x86_64
---> Package php-cli.x86_64 0:7.4.28-1.0.1.el7 will be installed
---> Package php-common.x86_64 0:7.4.28-1.0.1.el7 will be installed
---> Package php-pdo.x86_64 0:7.4.28-1.0.1.el7 will be installed
--> Running transaction check
---> Package apr.x86_64 0:1.4.8-7.el7 will be installed
---> Package apr-util.x86_64 0:1.5.2-6.0.1.el7 will be installed
---> Package httpd-tools.x86_64 0:2.4.6-97.0.5.el7_9.4 will be installed
---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

===================================================================================================================
 Package                 Arch              Version                            Repository                      Size
===================================================================================================================
Installing:
 php                     x86_64            7.4.28-1.0.1.el7                   ol7_developer_php74            3.4 M
 php-oci8-19c            x86_64            7.4.28-1.0.1.el7                   ol7_developer_php74            148 k
Installing for dependencies:
 apr                     x86_64            1.4.8-7.el7                        ol7_latest                     103 k
 apr-util                x86_64            1.5.2-6.0.1.el7                    ol7_latest                      91 k
 httpd                   x86_64            2.4.6-97.0.5.el7_9.4               ol7_latest                     1.2 M
 httpd-tools             x86_64            2.4.6-97.0.5.el7_9.4               ol7_latest                      93 k
 mailcap                 noarch            2.1.41-2.el7                       ol7_latest                      30 k
 php-cli                 x86_64            7.4.28-1.0.1.el7                   ol7_developer_php74            5.1 M
 php-common              x86_64            7.4.28-1.0.1.el7                   ol7_developer_php74            1.1 M
 php-pdo                 x86_64            7.4.28-1.0.1.el7                   ol7_developer_php74            122 k

Transaction Summary
===================================================================================================================
Install  2 Packages (+8 Dependent packages)

Total download size: 11 M
Installed size: 47 M
Downloading packages:
(1/10): apr-1.4.8-7.el7.x86_64.rpm                                                          | 103 kB  00:00:00     
(2/10): httpd-2.4.6-97.0.5.el7_9.4.x86_64.rpm                                               | 1.2 MB  00:00:00     
(3/10): httpd-tools-2.4.6-97.0.5.el7_9.4.x86_64.rpm                                         |  93 kB  00:00:00     
(4/10): mailcap-2.1.41-2.el7.noarch.rpm                                                     |  30 kB  00:00:00     
(5/10): apr-util-1.5.2-6.0.1.el7.x86_64.rpm                                                 |  91 kB  00:00:00     
(6/10): php-7.4.28-1.0.1.el7.x86_64.rpm                                                     | 3.4 MB  00:00:00     
(7/10): php-cli-7.4.28-1.0.1.el7.x86_64.rpm                                                 | 5.1 MB  00:00:00     
(8/10): php-common-7.4.28-1.0.1.el7.x86_64.rpm                                              | 1.1 MB  00:00:00     
(9/10): php-oci8-19c-7.4.28-1.0.1.el7.x86_64.rpm                                            | 148 kB  00:00:00     
(10/10): php-pdo-7.4.28-1.0.1.el7.x86_64.rpm                                                | 122 kB  00:00:00     
-------------------------------------------------------------------------------------------------------------------
Total                                                                               19 MB/s |  11 MB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : php-common-7.4.28-1.0.1.el7.x86_64                                                             1/10 
  Installing : apr-1.4.8-7.el7.x86_64                                                                         2/10 
  Installing : apr-util-1.5.2-6.0.1.el7.x86_64                                                                3/10 
  Installing : httpd-tools-2.4.6-97.0.5.el7_9.4.x86_64                                                        4/10 
  Installing : php-pdo-7.4.28-1.0.1.el7.x86_64                                                                5/10 
  Installing : php-cli-7.4.28-1.0.1.el7.x86_64                                                                6/10 
  Installing : mailcap-2.1.41-2.el7.noarch                                                                    7/10 
  Installing : httpd-2.4.6-97.0.5.el7_9.4.x86_64                                                              8/10 
  Installing : php-7.4.28-1.0.1.el7.x86_64                                                                    9/10 
  Installing : php-oci8-19c-7.4.28-1.0.1.el7.x86_64                                                          10/10 
  Verifying  : php-pdo-7.4.28-1.0.1.el7.x86_64                                                                1/10 
  Verifying  : php-oci8-19c-7.4.28-1.0.1.el7.x86_64                                                           2/10 
  Verifying  : httpd-2.4.6-97.0.5.el7_9.4.x86_64                                                              3/10 
  Verifying  : mailcap-2.1.41-2.el7.noarch                                                                    4/10 
  Verifying  : apr-1.4.8-7.el7.x86_64                                                                         5/10 
  Verifying  : apr-util-1.5.2-6.0.1.el7.x86_64                                                                6/10 
  Verifying  : php-cli-7.4.28-1.0.1.el7.x86_64                                                                7/10 
  Verifying  : php-7.4.28-1.0.1.el7.x86_64                                                                    8/10 
  Verifying  : httpd-tools-2.4.6-97.0.5.el7_9.4.x86_64                                                        9/10 
  Verifying  : php-common-7.4.28-1.0.1.el7.x86_64                                                            10/10 

Installed:
  php.x86_64 0:7.4.28-1.0.1.el7                       php-oci8-19c.x86_64 0:7.4.28-1.0.1.el7                      

Dependency Installed:
  apr.x86_64 0:1.4.8-7.el7                  apr-util.x86_64 0:1.5.2-6.0.1.el7 httpd.x86_64 0:2.4.6-97.0.5.el7_9.4
  httpd-tools.x86_64 0:2.4.6-97.0.5.el7_9.4 mailcap.noarch 0:2.1.41-2.el7     php-cli.x86_64 0:7.4.28-1.0.1.el7  
  php-common.x86_64 0:7.4.28-1.0.1.el7      php-pdo.x86_64 0:7.4.28-1.0.1.el7

Complete!
[opc@compute1 ~]$ 
```
Apacheの設定ファイル（/etc/httpd/conf/httpd.conf）を編集します。

```
sudo vi /etc/httpd/conf/httpd.conf
```
ファイルの末尾に以下の内容を追加して、拡張子がphpのファイルをapplication/x-httpd-phpハンドラーに割り当てます。

```
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>
```
httpdを起動します。

```
[opc@compute1 ~]$ sudo systemctl start httpd.service
```
httpdの自動起動を設定します。

```
[opc@compute1 ~]$ sudo systemctl enable httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[opc@compute1 ~]
```

# 2.firewalldの設定
firewalldの設定を変更し、HTTP（TCP80番）ポートを開放します。

```
[opc@compute1 ~]$ sudo firewall-cmd --add-port=80/tcp --zone=public --permanent
success
[opc@compute1 ~]$ sudo firewall-cmd --reload
success
[opc@compute1 ~]$ sudo firewall-cmd --list-all --zone=public
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens3
  sources: 
  services: dhcpv6-client ssh
  ports: 80/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
	
[opc@compute1 ~]$ 
```

# 3.SElinuxの設定
SElinuxの設定を変更します。

```
[opc@comp1 ~]$ sudo setsebool -P httpd_can_network_connect_db=1
[opc@comp1 ~]$ 
```

# 4.アプリケーションで使用するDBユーザとアプリケーションデータの準備
SQL*PlusからadminユーザとしてAutnomous Databaseに接続し、アプリケーションで使用するユーザ"apuser"とアプリケーションで使用するテーブル"dept"を作成し、テーブル"dept"にデータを挿入します。

```
[opc@compute1 ~]$ sqlplus admin/Demo#1Demo#1@testatp1_high

SQL*Plus: Release 19.0.0.0.0 - Production on 水 2月 23 11:31:34 2022
Version 19.14.0.0.0

Copyright (c) 1982, 2021, Oracle.  All rights reserved.

最終正常ログイン時間: 水 2月  23 2022 11:14:25 +00:00


Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.1.0
に接続されました。
SQL> GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO apuser IDENTIFIED BY Test#1Test#1;

権限付与が成功しました。

SQL> CREATE TABLE apuser.dept (
  2  	deptno NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
  3  	dname VARCHAR2(14),
  4  	loc VARCHAR2(13)
  5  );

表が作成されました。

SQL> INSERT INTO apuser.dept VALUES (10,'ACCOUNTING','NEW YORK');

1行が作成されました。

SQL> INSERT INTO apuser.dept VALUES (20,'RESEARCH','DALLAS');

1行が作成されました。

SQL> INSERT INTO apuser.dept VALUES (30,'SALES','CHICAGO');

1行が作成されました。

SQL> INSERT INTO apuser.dept VALUES (40,'OPERATIONS','BOSTON');

1行が作成されました。

SQL> COMMIT;

コミットが完了しました。

SQL> exit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.1.0との接続が切断されました。
[opc@compute1 ~]$ 
```

# 5.PHPアプリケーションの作成
apuserとしてAutonomous Databaseに接続し、dept表の内容を表示するPHPのWebアプリケーションを作成します。

```
[opc@comp1 ~]$ sudo vi /var/www/html/test.php
```

```php:/var/www/html/test.php
<html>
<head><meta charset="UTF-8">
<title>Connect from PHP Application to Autonomous Database using TLS Connection without Wallet</title>
</head>
<body>
<?php
    error_reporting(E_ALL);
    ini_set('display_errors', '1');
    $conn = oci_connect('apuser', 'Test#1Test#1', 'testatp1_high');
    $stid = oci_parse($conn, 'SELECT deptno,dname,loc FROM dept ORDER BY deptno');

    echo "<table border='1'>\n";
    echo "<caption>DEPT Table</caption>\n";
    echo "<tr><th>Dept No.</th><th>Dept Name</th><th>Location</th></tr>\n";

	oci_execute($stid);
    while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
        echo "<tr>\n";
        foreach ($row as $item) {
            echo " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "&amp;nbsp;") . "</td>\n";
        }
        echo "</tr>\n";
    }
	oci_free_statement($stid);
	oci_close($conn);

	echo "</table><br>\n";
	echo "Response from ".gethostname();
?>
</body>
</html>
```

# 6.PHPアプリケーションの動作確認
作成したPHPアプリケーションにブラウザからアクセスしてみます。
![スクリーンショット 2022-02-23 20.42.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/8b310dad-e6b1-129d-93b7-1630d7fbbeb1.png)

ウォレットを使用せずにPHPアプリケーションからAutonomous DatabaseにTLS認証で接続できることが確認できました。

# 参考情報
[[OCI]ウォレットを使用せずにSQL*PlusからAutonomous DatabaseにTLS認証で接続してみた](https://qiita.com/500InternalServerError/items/6822718140afc4e8884e)