本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Oracle Secure Sockets Layer
若要為 Oracle 資料庫執RDS行個體啟用SSL加密,請將 Oracle 選SSL項新增至與資料庫執行個體關聯的選項群組。Amazon 根據 Oracle 的要求RDS使用第二個連接埠進行SSL連接。這種方法允許在資料庫執行個體和 SQL *Plus 之間同時進行純文字和SSL加密通訊。例如,您可以使用具有純文本通信的端口與其他資源進行通信,VPC同時使用具有 SSL-encrypted 通信的端口與外部的資源進行通信。VPC
注意
RDS對於 Oracle 資料庫執行個體,您可以在同一個SSL或原生網路加密 (NNE) 上使用,但不能同時使用兩者。如果您使用SSL加密,請務必關閉任何其他連線加密。如需詳細資訊,請參閱Oracle 原生網路加密。
SSL/TLS和不NNE再是Oracle 進階安全性的一部分。在 Oracle 中,您可以RDS對下列資料庫版本的所有授權版本使用SSL加密:
-
Oracle Database 21c (21.0.0)
-
Oracle 資料庫 19c (19.0.0)
TLS適用於 Oracle 選SSL項的版本
Amazon RDS 適用於甲骨文支持傳輸層安全(TLS)1.0 和 1.2 版。當您新增 Oracle SSL 選項時,請SQLNET.SSL_VERSION
明確設定為有效值。此選項設定允許下列值:
-
"1.0"
— 用戶端只能使用 1.0 TLS 版連線至資料庫執行個體。對於現有的 Oracle SSL 選項,SQLNET.SSL_VERSION
會設定為"1.0"
自動。您可以視需要變更此設定。 -
"1.2"
— 用戶端只能使用 TLS 1.2 連線到資料庫執行個體。 -
"1.2 or 1.0"
— 用戶端可以使用 TLS 1.2 或 1.0 連線至資料庫執行個體。
甲骨SSL文選項的密碼套件
Amazon RDS 的甲骨文支持多個SSL加密套件。默認情況下,Oracle SSL 選項配置為使用SSL_RSA_WITH_AES_256_CBC_SHA
密碼套件。若要指定不同的加密套件以透過SSL連線使用,請使用選SQLNET.CIPHER_SUITE
項設定。
您可以為指定多個值SQLNET.CIPHER_SUITE
。如果您的資料庫執行個體之間有資料庫連結,並決定更新您的加密套件,則此技術非常有用。
下表摘要列出所有版本「Oracle RDS 資料庫 19c」和「21c」對 Oracle 的SSL支援。
密碼套件 (SQLNET. CIPHER_SUITE) | TLS版本支援 (SQLNET. SSL_VERSION) | FIPS支持 | RAMP符合美聯儲 |
---|---|---|---|
SSL_ RSA _ _ WITH _ AES _ (預設值CBC) SHA | 1.0 和 1.2 | 是 | 否 |
SSL_ RSA WITH _ AES _ _ CBC SHA256 | 1.2 | 是 | 否 |
SSL_ RSA WITH _ AES _ _ GCM SHA384 | 1.2 | 是 | 否 |
TLS_ ECDHE _ RSA _ WITH _ AES _ _ GCM SHA384 | 1.2 | 是 | 是 |
TLS_ ECDHE RSA _ WITH _ AES _ _ GCM SHA256 | 1.2 | 是 | 是 |
TLS_ ECDHE _ RSA _ WITH _ AES _ _ CBC SHA384 | 1.2 | 是 | 是 |
TLS_ ECDHE RSA _ WITH _ AES _ _ CBC SHA256 | 1.2 | 是 | 是 |
TLS_ ECDHE _ RSA _ WITH _ AES _ _ CBC SHA | 1.2 | 是 | 是 |
TLS_ ECDHE RSA _ WITH _ AES _ _ CBC SHA | 1.2 | 是 | 是 |
FIPS支持
RDSOracle 允許您使用 140-2 的聯邦資訊處理標準 (FIPS) 標準。FIPS140-2 是美國政府標準,用於定義密碼編譯模組安全性需求。您可以將 Oracle SSL 選項設定TRUE
為FIPS.SSLFIPS_140
來開啟FIPS標準。設定 FIPS 140-2 時SSL,加密程式庫會加密用戶端與 Oracle 資料庫執行個體之間的RDS資料。
用戶端必須使用符FIPS合標準的加密套件。建立連線時,用戶端和 Oracle RDS 資料庫執行個體會協商在來回傳送訊息時要使用的加密套件。中的表格甲骨SSL文選項的密碼套件顯示了每個FIPS版本的相容SSL加密套件TLS。如需詳細資訊,請參閱 Oracle 資料庫說明文件中的 Oracle 資料庫 FIPS 140-2 設定值
添加選SSL項
若要使用SSL,您的 RDS for Oracle 資料庫執行個體必須與包含該選項的選項群組產生關聯。SSL
若要將選SSL項新增至選項群組
-
建立新的選項群組,或識別現有的選項群組,以便在其中新增
SSL
選項。如需建立選項群組的相關資訊,請參閱建立選項群組。
-
將
SSL
選項新增至選項群組。如果您只想要使用FIPS經過驗證的加密套件進行SSL連線,請將選項
FIPS.SSLFIPS_140
設定為。TRUE
若要取得有關FIPS標準的資訊,請參閱FIPS支持。如需將選項新增至選項群組的相關資訊,請參閱將選項新增至選項群組。
-
RDS為 Oracle 資料庫執行個體建立新的執行個體,並將選項群組與其關聯,或修改 Oracle 資料庫執RDS行個體的執行個體,以建立選項群組與其關聯。
如需建立資料庫執行個體的相關資訊,請參閱 建立 Amazon RDS 資料庫執行個體。
如需修改資料庫執行個體的相關資訊,請參閱 修改 Amazon RDS 資料庫執行個體。
若要將選SSL項新增至選項群組
-
建立新的選項群組,或識別現有的選項群組,以便在其中新增
SSL
選項。如需建立選項群組的相關資訊,請參閱建立選項群組。
-
將
SSL
選項新增至選項群組。指定下列選項設定:
-
Port
— 端SSL口號 -
VpcSecurityGroupMemberships
— 為其啟用選項的VPC安全性群組 -
SQLNET.SSL_VERSION
— 用戶端可用來連線至資料庫執行個體的TLS版本
例如,下列 AWS CLI 指令會將
SSL
選項新增至名為的選項群組ora-option-group
。範例
對於LinuxmacOS、或Unix:
aws rds add-option-to-option-group --option-group-name ora-option-group \ --options 'OptionName=SSL,Port=2484,VpcSecurityGroupMemberships="sg-68184619",OptionSettings=[{Name=SQLNET.SSL_VERSION,Value=1.0}]'
在 Windows 中:
aws rds add-option-to-option-group --option-group-name ora-option-group ^ --options 'OptionName=SSL,Port=2484,VpcSecurityGroupMemberships="sg-68184619",OptionSettings=[{Name=SQLNET.SSL_VERSION,Value=1.0}]'
-
-
RDS為 Oracle 資料庫執行個體建立新的執行個體,並將選項群組與其關聯,或修改 Oracle 資料庫執RDS行個體的執行個體,以建立選項群組與其關聯。
如需建立資料庫執行個體的相關資訊,請參閱 建立 Amazon RDS 資料庫執行個體。
如需修改資料庫執行個體的相關資訊,請參閱 修改 Amazon RDS 資料庫執行個體。
將 SQL *Plus 設定為SSL與 Oracle 資料庫執RDS行個體搭配使用
連線前,您必須先設定 SQL *Plus,才能連線到使用 Oracle SSL 選項的RDS適用 Oracle 資料庫執行個體。
注意
若要允許從適當的用戶端存取資料庫執行個體,請確定您的安全群組已正確設定。如需詳細資訊,請參閱使用安全群組控制存取。此外,這些指示適用於 SQL *Plus 和其他直接使用 Oracle 本位目錄的從屬端。如需JDBC連線,請參閱設定SSL連線 JDBC。
若要將 SQL *Plus 設定為用於連線SSL至適用RDS於 Oracle 資料庫執行個體的步驟
-
將
ORACLE_HOME
環境變數設為 Oracle 主目錄的位置。Oracle 主目錄的路徑取決於您的安裝。下列範例設定
ORACLE_HOME
環境變數。prompt>export ORACLE_HOME=/home/user/app/user/product/19.0.0/dbhome_1
如需有關設定 Oracle 環境變數的資訊,請參閱 Oracle 說明文件中的 SQL*Plus 環境變數
,也請參閱您作業系統的 Oracle 安裝指南。 -
將
$ORACLE_HOME/lib
附加至LD_LIBRARY_PATH
環境變數。以下是設定 LD LIBRARY _ PATH 環境變數的範例。
prompt>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
-
在
$ORACLE_HOME/ssl_wallet
建立 Oracle 錢包的目錄。下列範例建立 Oracle 錢包目錄。
prompt>mkdir $ORACLE_HOME/ssl_wallet
-
下載適用於所有人的憑證服務包 .pem 檔案, AWS 區域 並將該檔案放在 ssl_wallet 目錄中。如需相關資訊,請參閱 使用SSL/TLS來加密資料庫執行個體或叢集集的連線。
-
在
$ORACLE_HOME/network/admin
目錄中,修改或建立tnsnames.ora
檔案,並包含下列項目。net_service_name
= (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCPS) (HOST =endpoint
) (PORT =ssl_port_number
) ) ) (CONNECT_DATA = (SID =database_name
) ) (SECURITY = (SSL_SERVER_CERT_DN = "C=US,ST=Washington,L=Seattle,O=Amazon.com,OU=RDS,CN=endpoint
") ) ) -
在相同的目錄中,修改或建立 sqlnet.ora 檔案,並加入下列參數。
注意
若要透過TLS安全連線與實體通訊,Oracle 需要具備必要憑證的公事包以進行驗證。您可以使用 Oracle 的ORAPKI公用程式來建立和維護 Oracle 公事包,如步驟 7 所示。如需詳細資訊,請參閱 Oracle 說明文件ORAPKI中的使用設定 Oracle 公事包
。 WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = $ORACLE_HOME/ssl_wallet))) SSL_CLIENT_AUTHENTICATION = FALSE SSL_VERSION = 1.0 SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA) SSL_SERVER_DN_MATCH = ON
注意
若資料庫執行個體支援,您可將
SSL_VERSION
設為較高的值。 -
執行下列命令以建立 Oracle 公事包。
prompt>orapki wallet create -wallet $ORACLE_HOME/ssl_wallet -auto_login_only
-
使用 OS 公用程式,將 .pem 服務包檔案中的每個憑證解壓縮至個別的 .pem 檔案中。
-
使用不同的
orapki
命令將每個憑證新增至您的公事包,並以 .pem 檔案的絕對檔案名稱取代
。certificate-pem-file
prompt>orapki wallet add -wallet $ORACLE_HOME/ssl_wallet -trusted_cert -cert
certificate-pem-file
-auto_login_only如需詳細資訊,請參閱旋轉您的SSL/TLS證書。
使用連接到RDS適用於 Oracle 資料庫執行個體的 SSL
將 SQL *Plus 設定SSL為如前所述使用之後,您可以使用SSL選項連接至RDS適用於 Oracle 資料庫執行個體的。(選用) 您可以先匯出指向包含 tnsnames.ora 和 sqlnet.ora 檔案目錄的 TNS_ADMIN
值。這樣做可確保 SQL *Plus 可以一致地找到這些文件。以下範例將匯出 TNS_ADMIN
值。
export TNS_ADMIN = ${ORACLE_HOME}/network/admin
連線到資料庫執行個體。例如,您可以使用 SQL *Plus 和 <net_service_name>
在一個 tnsname .ora 文件中。
sqlplus
mydbuser
@net_service_name
您也可以使用下列命令,在不使用 tnsnames.ora 檔案的情況下,使用 SQL *Plus 連線至資料庫執行個體。
sqlplus '
mydbuser
@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCPS)(HOST =endpoint
) (PORT =ssl_port_number
))(CONNECT_DATA = (SID =database_name
)))'
您也可以連線到適用RDS於 Oracle 資料庫執行個體,而不必使用SSL。例如,下列命令會透過純文字連接埠連接至資料庫執行個體,而不SSL加密。
sqlplus '
mydbuser
@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =endpoint
) (PORT =port_number
))(CONNECT_DATA = (SID =database_name
)))'
如果要關閉「傳輸控制通訊協定」(TCP) 連接埠存取,請建立沒有 IP 位址擷取的安全群組,並將其新增至執行個體。此新增功能會關閉透過連接TCP埠的連線,同時仍允許透過從SSL選項安全性群組允許的範圍內的 IP 位址指定的連接SSL埠進行連線。
設定SSL連線 JDBC
若要透過SSL連線使用JDBC,您必須建立金鑰儲存庫、信任 Amazon RDS 根 CA 憑證,並使用以下指定的程式碼片段。
要創建格JKS式密鑰庫,可以使用以下命令。如需有關建立金鑰儲存庫的詳細資訊,請參閱 Oracle 說明文件中的 < 建立金鑰儲存庫
keytool -genkey -alias
client
-validity365
-keyalgRSA
-keystoreclientkeystore
請執行下列步驟來信任 Amazon RDS 根 CA 憑證。
信任 Amazon RDS 根 CA 證書
-
下載適用於所有人的憑證服務包 .pem 檔案, AWS 區域 並將該檔案放在 ssl_wallet 目錄中。
如需有關下載憑證的詳細資訊,請參閱使用SSL/TLS來加密資料庫執行個體或叢集集的連線。
-
使用 OS 公用程式,將 .pem 檔案中的每個憑證解壓縮至不同的檔案。
-
使用單獨的
openssl
命令將每個證書轉換為 .der 格式,替換certificate-pem-file
具有憑證 .pem 檔案的名稱 (不含 .pem 副檔名)。openssl x509 -outform der -in
certificate-pem-file
.pem -outcertificate-pem-file
.der -
使用下列命令將每個憑證匯入金鑰儲存庫。
keytool -import -alias rds-root -keystore
clientkeystore.jks
-filecertificate-pem-file
.der如需詳細資訊,請參閱旋轉您的SSL/TLS證書。
-
確認金鑰存放區已成功建立。
keytool -list -v -keystore
clientkeystore.jks
在提示出現時,請輸入金鑰存放區密碼。
下列程式碼範例會示範如何使用來設定SSL連線JDBC。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; public class OracleSslConnectionTest { private static final String DB_SERVER_NAME = "
dns-name-provided-by-amazon-rds
"; private static final Integer SSL_PORT = "ssl-option-port-configured-in-option-group
"; private static final String DB_SID = "oracle-sid
"; private static final String DB_USER = "user-name
"; private static final String DB_PASSWORD = "password
"; // This key store has only the prod root ca. private static final String KEY_STORE_FILE_PATH = "file-path-to-keystore
"; private static final String KEY_STORE_PASS = "keystore-password
"; public static void main(String[] args) throws SQLException { final Properties properties = new Properties(); final String connectionString = String.format( "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=%s)(PORT=%d))(CONNECT_DATA=(SID=%s)))", DB_SERVER_NAME, SSL_PORT, DB_SID); properties.put("user", DB_USER); properties.put("password", DB_PASSWORD); properties.put("oracle.jdbc.J2EE13Compliant", "true"); properties.put("javax.net.ssl.trustStore", KEY_STORE_FILE_PATH); properties.put("javax.net.ssl.trustStoreType", "JKS"); properties.put("javax.net.ssl.trustStorePassword", KEY_STORE_PASS); final Connection connection = DriverManager.getConnection(connectionString, properties); // If no exception, that means handshake has passed, and an SSL connection can be opened } }
注意
指定此處所顯示提示以外的密碼,作為安全最佳實務。
透過連線強制執行 DN 相符項目 SSL
您可以使用 Oracle 參數 SSL_SERVER_DN_MATCH
,以強制資料庫伺服器的辨別名稱 (DN) 比對其服務名稱。如果您強制執行比對驗證,請SSL確定憑證來自伺服器。如果您不強制執行匹配驗證,則SSL執行檢查但允許連接,無論是否存在匹配項。如果您不強制執行匹配,則允許服務器可能偽造其身份。
若要強制使用 DN 比對,請新增 DN 比對屬性,並使用如下指定的連線字串。
將此屬性新增至用戶端連線,以強制使用 DN 比對。
properties.put("oracle.net.ssl_server_dn_match", "TRUE");
使用時,請使用下列連接字串來強制 DN 比對SSL。
final String connectionString = String.format( "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=%s)(PORT=%d))" + "(CONNECT_DATA=(SID=%s))" + "(SECURITY = (SSL_SERVER_CERT_DN = \"C=US,ST=Washington,L=Seattle,O=Amazon.com,OU=RDS,CN=%s\")))", DB_SERVER_NAME, SSL_PORT, DB_SID, DB_SERVER_NAME);
疑難排解SSL連
您可能會查詢資料庫並收到 ORA-28860
錯誤。
ORA-28860: Fatal SSL error 28860. 00000 - "Fatal SSL error" *Cause: An error occurred during the SSL connection to the peer. It is likely that this side sent data which the peer rejected. *Action: Enable tracing to determine the exact cause of this error.
當用戶端嘗試使用伺服器不支援的版本進行連線時,TLS就會發生這個錯誤。若要避免發生此錯誤,請編輯 sqlnet.ora 並設定SSL_VERSION
為正確的版本。TLS如需詳細資訊,請參閱「My Oracle 支援」中的 My Oracle 支援文件 2748438.1