しかし、orapkiを使った作業が煩雑だったため、自己署名証明書の生成はOpenSSLを使うように作業を変えました。概ねChatGPTに聞いて作業を進めています。
% mkdir tlsdb
% cd tlsdb
tlsdb %
mkdir tns_admin
tlsdb % mkdir tns_admin
tlsdb %
Oracle Database 23ai Freeのコンテナをtlsdbとして作成し実行します。作成したディレクトリtns_adminは、コンテナ内からは/home/oracle/tns_adminとして見えるように割り当てます。また、TCPのポートである1521に加え、TCPSのポートである1522もホストに割り当てます。
podman run -d --name tlsdb -v $PWD/tns_admin:/home/oracle/tns_admin -p 1521:1521 -p 1522:1522 -e ORACLE_PWD=<パスワード> container-registry.oracle.com/database/free:latest
tlsdb % podman run -d --name tlsdb -v $PWD/tns_admin:/home/oracle/tns_admin -p 1521:1521 -p 1522:1522 -e ORACLE_PWD=******** container-registry.oracle.com/database/free:latest
b18843d88a2908661aad8cb4ce71e489d62d57347b63998b607708b02e1c1ce3
tlsdb %
podman logs tlsdb
tlsdb % podman logs tlsdb
Starting Oracle Net Listener.
Oracle Net Listener started.
Starting Oracle Database instance FREE.
Oracle Database instance FREE started.
The Oracle base remains unchanged with value /opt/oracle
SQL*Plus: Release 23.0.0.0.0 - Production on Wed Aug 27 06:54:01 2025
Version 23.9.0.25.07
Copyright (c) 1982, 2025, Oracle. All rights reserved.
Connected to:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.9.0.25.07
SQL>
User altered.
SQL>
User altered.
[中略]
SQL> Disconnected from Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.9.0.25.07
The Oracle base remains unchanged with value /opt/oracle
#########################
DATABASE IS READY TO USE!
#########################
The following output is now a tail of the alert.log:
2025-08-27T06:54:01.328737+00:00
FREEPDB1(3):TABLE AUDSYS.AUD$UNIFIED: ADDED INTERVAL PARTITION SYS_P328 (4076) VALUES LESS THAN (TIMESTAMP' 2025-08-28 00:00:00')
2025-08-27T06:54:01.348382+00:00
[省略]
tlsdb %
コンテナtlsdbに接続し、作業を行ないます。
podman exec -it tlsdb bash
tlsdb % podman exec -it tlsdb bash
bash-4.4$
ディレクトリtns_adminに移動し、自己署名証明書の作成を行ないます。
bash-4.4$ cd tns_admin
bash-4.4$
openssl genrsa -aes256 -out rootCA.key 4096
bash-4.4$ openssl genrsa -aes256 -out rootCA.key 4096
Generating RSA private key, 4096 bit long modulus (2 primes)
..............................................................................++++
.........................................................................................................................................................................................................................................................................................................++++
e is 65537 (0x010001)
Enter pass phrase for rootCA.key: ****
Verifying - Enter pass phrase for rootCA.key: ****
bash-4.4$
自己署名によるルートCA証明書を作成します。証明書のサブジェクトはCN=My Root CAとしています。rootCA.keyを開くために、rootCA.keyを作成するときに設定したパスフレーズを入力します。
bash-4.4$ openssl req -x509 -new -key rootCA.key -sha256 -days 3650 -out rootCA.crt -subj "/CN=My Root CA"
Enter pass phrase for rootCA.key: ****
bash-4.4$
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
req_extensions = v3_req
[ dn ]
CN = apex
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = apex
openssl genrsa -out server.key 2048
bash-4.4$ openssl genrsa -out server.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
................................+++++
...................................+++++
e is 65537 (0x010001)
bash-4.4$
openssl req -new -key server.key -out server.csr -config apex.conf
bash-4.4$ openssl req -new -key server.key -out server.csr -config apex.conf
bash-4.4$
openssl x509 -req -in server.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out server.crt -days 397 -sha256 -extfile apex.conf -extensions v3_req
bash-4.4$ openssl x509 -req -in server.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out server.crt -days 397 -sha256 -extfile apex.conf -extensions v3_req
Signature ok
subject=CN = apex
Getting CA Private Key
Enter pass phrase for rootCA.key: ****
bash-4.4$
作成されたサーバー証明書server.crtに、SANが記載されているか確認します。
bash-4.4$ openssl x509 -in server.crt -noout -text | grep -A2 "Subject Alternative Name"
X509v3 Subject Alternative Name:
DNS:apex
Signature Algorithm: sha256WithRSAEncryption
bash-4.4$
ルートCAの証明書、サーバー証明書およびサーバー秘密鍵を、PKCS12形式のファイルserver.p12にまとめます。エクスポートしたファイルにパスワードを設定します。
openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt -certfile rootCA.crt -name "apex"
bash-4.4$ openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt -certfile rootCA.crt -name "apex"
Enter Export Password: ****
Verifying - Enter Export Password: ****
bash-4.4$
orapki wallet create -wallet /opt/oracle/admin/FREE/wallet -pwd <パスワード> -auto_login
bash-4.4$ orapki wallet create -wallet /opt/oracle/admin/FREE/wallet -pwd ******** -auto_login
Oracle PKI Tool Release 23.0.0.0.0 - Production
Version 23.0.0.0.0
Copyright (c) 2004, 2025, Oracle and/or its affiliates. All rights reserved.
Operation is successfully completed.
bash-4.4$
ルートCA証明書rootCA.crtを、信頼済み証明書としてウォレットに追加します。
orapki wallet add -wallet /opt/oracle/admin/FREE/wallet -trusted_cert -cert rootCA.crt -pwd ********
bash-4.4$ orapki wallet add -wallet /opt/oracle/admin/FREE/wallet -trusted_cert -cert rootCA.crt -pwd ********
Oracle PKI Tool Release 23.0.0.0.0 - Production
Version 23.0.0.0.0
Copyright (c) 2004, 2025, Oracle and/or its affiliates. All rights reserved.
Operation is successfully completed.
bash-4.4$
サーバーの鍵と証明書を含むファイルserver.p12をウォレットに追加します。-pwdで指定するパスワードはOracle Walletのパスワードです。-pkcs12pwdで指定するパスワードは、PKCS12形式のファイルserver.p12の作成時に設定したパスワードです。
orapki wallet import_pkcs12 -wallet /opt/oracle/admin/FREE/wallet -pwd <Oracle Walletのパスワード> -pkcs12file server.p12 -pkcs12pwd <server.p12のパスワード>
bash-4.4$ orapki wallet import_pkcs12 -wallet /opt/oracle/admin/FREE/wallet -pwd *********** -pkcs12file server.p12 -pkcs12pwd ****
Oracle PKI Tool Release 23.0.0.0.0 - Production
Version 23.0.0.0.0
Copyright (c) 2004, 2025, Oracle and/or its affiliates. All rights reserved.
orapki command import_pkcs12 executed successfully.
bash-4.4$
orapki wallet display -wallet /opt/oracle/admin/FREE/wallet -pwd <パスワード> -summary
User CertificatesとしてCN=apex、Trusted CertificatesとしてCN=My Root CAが見つかります。
bash-4.4$ orapki wallet display -wallet /opt/oracle/admin/FREE/wallet -pwd ******** -summary
Oracle PKI Tool Release 23.0.0.0.0 - Production
Version 23.0.0.0.0
Copyright (c) 2004, 2025, Oracle and/or its affiliates. All rights reserved.
Requested Certificates:
User Certificates:
Subject: CN=apex
Trusted Certificates:
Subject: CN=My Root CA
bash-4.4$
cp -i /opt/oracle/admin/FREE/wallet/* .
bash-4.4$ cp -i /opt/oracle/admin/FREE/wallet/* .
bash-4.4$ pwd
/home/oracle/tns_admin
bash-4.4$ ls
apex.conf ewallet.p12 rootCA.key server.csr
cwallet.sso ewallet.p12.lck rootCA.srl server.key
cwallet.sso.lck rootCA.crt server.crt server.p12
bash-4.4$
bash-4.4$ cd $ORACLE_HOME/network/admin
bash-4.4$
DEFAULT_SERVICE_LISTENER = FREE
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCPS)(HOST = 0.0.0.0)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SSL_CLIENT_AUTHENTICATION = FALSE
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /opt/oracle/admin/FREE/wallet)
)
)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT, HOSTNAME)
DISABLE_OOB=ON
SQLNET.EXPIRE_TIME=3
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /opt/oracle/admin/FREE/wallet)
)
)
FREEPDB1_TLS =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCPS)(HOST = 0.0.0.0)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = FREEPDB1)
)
(SECURITY =
(SSL_SERVER_DN_MATCH=TRUE)
(SSL_SERVER_CERT_DN="CN=apex")
)
)
bash-4.4$ lsnrctl stop
LSNRCTL for Linux: Version 23.0.0.0.0 - Production on 27-AUG-2025 07:45:46
Copyright (c) 1991, 2025, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=0.0.0.0)(PORT=1521)))
The command completed successfully
bash-4.4$ lsnrctl start
LSNRCTL for Linux: Version 23.0.0.0.0 - Production on 27-AUG-2025 07:45:48
Copyright (c) 1991, 2025, Oracle. All rights reserved.
Starting /opt/oracle/product/23ai/dbhomeFree/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 23.0.0.0.0 - Production
System parameter file is /opt/oracle/product/23ai/dbhomeFree/network/admin/listener.ora
Log messages written to /opt/oracle/diag/tnslsnr/94ef00fe5beb/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=0.0.0.0)(PORT=1522)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=0.0.0.0)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 23.0.0.0.0 - Production
Start Date 27-AUG-2025 07:45:48
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Default Service FREE
Listener Parameter File /opt/oracle/product/23ai/dbhomeFree/network/admin/listener.ora
Listener Log File /opt/oracle/diag/tnslsnr/94ef00fe5beb/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=0.0.0.0)(PORT=1522)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully
bash-4.4$
sqlplus / as sysdba
alter system register;
bash-4.4$ sqlplus / as sysdba
SQL*Plus: Release 23.0.0.0.0 - Production on Wed Aug 27 12:18:21 2025
Version 23.9.0.25.07
Copyright (c) 1982, 2025, Oracle. All rights reserved.
Connected to:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.9.0.25.07
SQL> alter system register;
System altered.
SQL> exit
Disconnected from Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.9.0.25.07
bash-4.4$
select sys_context('userenv','network_protocol');
bash-4.4$ sqlplus system@freepdb1_tls
SQL*Plus: Release 23.0.0.0.0 - Production on Wed Aug 27 11:37:03 2025
Version 23.9.0.25.07
Copyright (c) 1982, 2025, Oracle. All rights reserved.
Enter password: **********
Last Successful login time: Wed Aug 27 2025 11:36:46 +00:00
Connected to:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.9.0.25.07
SQL> select sys_context('userenv','network_protocol');
SYS_CONTEXT('USERENV','NETWORK_PROTOCOL')
--------------------------------------------------------------------------------
tcps
SQL> exit
Disconnected from Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.9.0.25.07
bash-4.4$
cd tns_admin
tlsdb % cd tns_admin
tns_admin %
sqlnet.oraを作成し、以下を記述します。DIRECTORYにはtlsdb/tns_adminの位置をフルパスで指定します。
SSL_CLIENT_AUTHENTICATION = FALSE
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /Users/**********/Documents/tlsdb/tns_admin)
)
)
FREEPDB1_TLS =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCPS)(HOST = 0.0.0.0)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = FREEPDB1)
)
(SECURITY =
(SSL_SERVER_DN_MATCH=TRUE)
(SSL_SERVER_CERT_DN="CN=apex")
)
)
oracle.net.wallet_location=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=${TNS_ADMIN})))
export TNS_ADMIN=$PWD
sql system@freepdb1_tls
select sys_context('userenv','network_protocol');
tns_admin % sql system@freepdb1_tls
SQLcl: 水 8月 27 21:29:44 2025のリリース25.2 Production
Copyright (c) 1982, 2025, Oracle. All rights reserved.
パスワード (**********?) ******
Last Successful login time: 水 8月 27 2025 21:29:46 +09:00
接続先:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.9.0.25.07
SQL> select sys_context('userenv','network_protocol');
SYS_CONTEXT('USERENV','NETWORK_PROTOCOL')
____________________________________________
tcps
SQL> exit
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.9.0.25.07から切断されました
tns_admin %