在客户端和服务器端创建自签名证书并进行交换
可以在 Oracle 19c 数据库服务器的任意目录位置创建钱包。但是,Oracle 建议在 ORACLE_HOME 数据库环境中创建钱包。请确保您对 Oracle 服务运行时所在的钱包目录具有必需的读取权限。可以使用 Unix 平台上的 SUDO 用户或 Windows 平台上的管理用户创建钱包。
执行以下步骤以创建两个具有自签名证书的钱包,即一个服务器钱包和一个客户端钱包。
1. 创建一个目录以供存储所有钱包。可在任意位置创建此钱包目录。Oracle 建议在下列位置创建钱包:
> mkdir wallets
> cd wallets
例如,%ORACLE_HOME%\wallets
2. 通过为 Oracle 服务器启用自动登录来创建一个空钱包:
> orapki wallet create -wallet ./server_wallet -auto_login -pwd server01
例如,
orapki wallet create -wallet %ORACLE_HOME%\wallets\server_wallet
-auto_login -pwd server01
在 server_wallet 目录下创建两个文件:
server_wallet/cwallet.sso
server_wallet/ewallet.p12
3. 在该钱包中添加自签名证书。您会发现已创建一对新的私钥或公钥:
> orapki wallet add -wallet ./server_wallet -dn “CN=server”
-keysize 1024 -self_signed -validity 365 -pwd server01
a. 查看 server_wallet 目录:
> orapki wallet display -wallet ./server_wallet
...
Requested Certificates:
Subject: CN=server
...
b. 导出服务器证书:
> orapki wallet export –wallet ./server_wallet -dn “CN=server”
-cert ./server_wallet/cert.txt
在 Windchill 客户端复制 cert.txt 文件。
4. 将服务器证书导入客户端密钥库。在客户端使用 Java 密钥库来存储服务器证书:
> keytool -importcert -alias <ALIAS-NAME> -keystore <PATH-TO-KEYSTORE>
-file <FILE-PATH-TO-SERVER-CERTIFICATE>
例如,
keytool -importcert -alias oraclessl
-keystore JAVA_HOME\jre\lib\security\cacerts
-file JAVA_HOME\bin\cert.txt
所使用的参数如下:
◦ <ALIAS-NAME> - 将服务器证书文件存储到密钥库中时所使用的别名名称。
◦ <PATH-TO-KEYSTORE> - 用于导入服务器证书的密钥库位置。如果要使用默认的 Windchill Java 密钥库,则可以在 {wt.jdk}/jre/lib/security 位置找到名为 cacerts 的密钥库。可在 WT_HOME/codebase/wt.properties 文件中找到 wt.jdk 值。
◦ <FILE-PATH-TO-SERVER-CERTIFICATE> - 存储服务器证书的目录位置。在此示例中,服务器证书为 cert.txt 文件。
5. 在客户端密钥库中创建自签名客户端证书:
keytool -genkeypair -alias "<ALIAS-OF-YOUR-CLIENT-SSL-CERT>" -keyalg RSA
-validity 365 -keysize 2048 -keystore <PATH-TO-KEYSTORE>
例如,
keytool -genkeypair -alias ClientCerts -keyalg RSA -validity 365
-keysize 2048 -keystore JAVA_HOME\jre\lib\security\cacerts
系统将要求您输入密钥库密码。默认密钥库密码为:changeit。
所使用的参数如下:
◦ <ALIAS-OF-YOUR-CLIENT-SSL-CERT> - 创建自签名证书时所使用的证书的别名。
◦ <PATH-TO-KEYSTORE> - 用于导入服务器证书的密钥库位置。
6. 将客户端证书导出到可从 server_wallet 目录导入的文件:
keytool -export -alias <ALIAS-OF-YOUR-CLIENT-SSL-CERT>
-keystore <PATH-TO-KEYSTORE> -rfc -file <PATH-TO-OUTPUT-FILE>
例如,
keytool -export -alias CLientCerts
-keystore JAVA_HOME\jre\lib\security\cacerts
-rfc -file JAVA_HOME\bin\ClientCertificate.txt
在 ORACLE 数据库服务器上复制 ClientCertificate.txt 文件。
所使用的参数如下:
◦ <ALIAS-OF-YOUR-CLIENT-SSL-CERT> - 要导出到文件并可用于从服务器钱包导入以验证客户端标识的证书的别名。
◦ <PATH-TO-KEYSTORE> - 用于导入服务器证书的密钥库位置。
◦ <PATH-TO-OUTPUT-FILE> - 用于导出客户端密钥的文件位置。
7. 将客户端证书导入服务器钱包:
> orapki wallet add –wallet ./server_wallet -trusted_cert
-cert ./client_wallet/cert.txt -pwd server01
例如,
orapki wallet add -wallet Oracle_Home\wallets\server_wallet
-trusted_cert -cert Oracle_Home\wallets\client_wallet\ClientCertificate.txt
-pwd server01
client_wallet/cert.txt 命令是指导出的客户端证书。
|
如果需要客户端身份验证,则必须在服务器钱包上导入客户端证书。如果只需加密和服务器身份验证,则可以跳过此步骤。
|
8. 查看服务器钱包和客户端密钥库的结果。请确保下列位置下存在关于服务器钱包中客户端密钥的条目,以及关于客户端密钥库中服务器密钥的条目:
◦ 在用户证书下:
Subject: CN=server
◦ 在受信任的证书下:
Subject: CN=sam,OU=ptc,O=isg,L=pune,ST=mh,C=in
◦ 在客户端密钥库输出下:
Owner: CN=server
Issuer: CN=server
◦ 在证书[1] 下:
Owner: CN=sam, OU=ptc, O=isg, L=pune, ST=mh, C=in
Issuer: CN=sam, OU=ptc, O=isg, L=pune, ST=mh, C=in
Server Wallet Output -
> orapki wallet display -wallet .
Oracle PKI Tool : Version 12.1.0.2
Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.
Requested Certificates:
User Certificates:
Subject: CN=server
Trusted Certificates:
Subject: CN=client
Subject: CN=VAGRANT
Subject: CN=VAGRANT_CLIENT
Subject: CN=server
Subject: CN=sam,OU=ptc,O=isg,L=pune,ST=mh,C=in
Client Keystore Output –
> keytool -list -v -keystore selfsigned3.jks
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 3 entries
.
.
.
*******************************************
*******************************************
Alias name: stepde-cert
Creation date: 24 Aug, 2017
Entry type: trustedCertEntry
Owner: CN=server
Issuer: CN=server
Serial number: 0
Valid from: Wed Jun 28 15:17:33 IST 2017 until: Thu Jun 28 15:17:33 IST 2018
Certificate fingerprints:
MD5: F3:46:9C:70:74:93:75:EA:08:F6:35:D9:EC:A5:20:F0
SHA1: 5D:43:23:4F:FA:C8:5B:48:C5:61:A5:CB:02:66:E7:CD:F4:47:4E:95
SHA256: BE:26:3F:88:E8:DD:F2:57:F3:D4:5F:4C:70:4A:0F:D2:99:10:D5:
27:18:BA:29:E5:00:AD:00:41:78:1E:CE:92
Signature algorithm name: MD5withRSA
Version: 1
*******************************************
*******************************************
Alias name: smandaokar2l_selfsigned3
Creation date: 24 Aug, 2017
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=sam, OU=ptc, O=isg, L=pune, ST=mh, C=in
Issuer: CN=sam, OU=ptc, O=isg, L=pune, ST=mh, C=in
Serial number: dccd23b
Valid from: Thu Aug 24 18:49:15 IST 2017 until: Fri Aug 24 18:49:15 IST 2018
Certificate fingerprints:
MD5: 5A:39:55:EA:29:0C:46:C7:86:92:DF:98:4B:C9:E5:93
SHA1: 9D:75:AE:C8:F0:EE:B9:E1:9B:E5:98:10:47:7F:3D:CE:C9:D9:47:18
SHA256: F0:78:81:AA:C4:AC:17:1C:3B:10:87:9B:A7:DF:CE:0F:BE:A0:B6:42:08:90:D9:
BC:59:23:91:BA:03:02:44:1D
Signature algorithm name: SHA256withRSA
Version: 3
Extensions:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: D3 CF 0B 8B 41 B6 63 13 B8 D3 59 57 DB E2 75 7F ....A.c...YW..u.
0010: C5 50 DE 88 .P..
]
]
*******************************************
*******************************************