> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kasoftware.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 安全和最佳實踐

> 知行之橋安裝的安全相關功能和推薦的最佳實踐。

export const companyName = "知行軟件";

export const siteNameShort = "知行之橋";

export const siteName = "知行之橋";

此頁面提供有關 {siteName} 中可用的安全相關功能的資訊，並介紹了我們建議遵循的最佳實踐。

安全問題大致分為兩類：

* 保證 {siteNameShort} 執行的基礎設施
* 保護 {siteNameShort} 中的資料

這兩個部分都描述了相關的安全概念，幷包含帶有我們最佳實踐建議的小節。

## 保證 {siteName} 執行的基礎設施

許多安全設定由伺服器配置檔案管理。使用 {siteNameShort} 中包含的嵌入式 Web 伺服器時，可以在以下位置找到伺服器配置檔案：

* .NET 版——{siteNameShort} 安裝目錄的 `www` 資料夾中的 `Web.Config` 檔案（預設為 `C:\Program Files\CData\CData Arc`）
* Java 版——{siteNameShort} 安裝目錄中的 `arc.properties` 檔案

將 {siteNameShort} 部署到外部伺服器時，應改用該外部伺服器的配置檔案。

### 為入站流量啟用 TLS/SSL

強烈建議在伺服器上啟用 TLS/SSL。TLS/SSL 使用公開金鑰/私密金鑰加密來加密用戶端和伺服器之間的通訊通道。這種加密保護 {siteNameShort} 中資料的機密性、真實性和完整性。此外，透過使用數字憑證，TLS 為用戶端/伺服器身份確認提供了便利。

啟用入站 TLS/SSL 可以分為兩類：

* 主機 Web 伺服器的 TLS，與 HTTP 流量相關，包括底層使用 HTTP 的協議（如 [AS2](../../connectors/as2) 和 [AS4](../../connectors/as4)）。由於託管 {siteNameShort} 的 Web 伺服器用於處理這些請求，因此必須在 Web 伺服器級別啟用 TLS。
* 所有其他伺服器的 TLS，與非 HTTP 流量相關，例如 [FTP](../../connectors/ftp) 和 [OFTP](../../connectors/oftp)。由於處理這些入站連線的伺服器與託管 {siteNameShort} 的 Web 伺服器不同，因此必須在 {siteNameShort} 介面的 [個人設定](./profiles) 頁面的相應協議索引標籤中啟用這些選項。

#### 用於 Web 伺服器的 TLS/SSL

* 對於 .NET 版的 {siteNameShort}，請參閱 [使用嵌入式伺服器](../installation/windows-edition#using-the-embedded-server) 或 [使用 IIS](../installation/windows-edition#using-iis)。
* 對於跨平臺版，請參閱 [啟用 TLS/SSL](../installation/cross-platform-edition#enabling-tls/ssl)。

#### 其他伺服器的 TLS/SSL

使用 [個人設定](./profiles) 頁面為以下伺服器啟用 TLS/SSL：

* [FTP 伺服器](../../connectors/ftp-server)
* [OFTP 伺服器](../../connectors/oftp)
* [HL7 MLLP 伺服器](../../connectors/hl7mllp)

每個伺服器在“個人設定”頁面上都有一個索引標籤，可以在其中啟用或停用 TLS/SSL。

### 配置防火牆和使用 DMZ

為了讓 {siteNameShort} 傳送和接收訊息，它需要在相關傳送和接收端口上不受防火牆干擾。最佳選擇是在防火牆中將特定 IP 列入白名單，以確保流量僅來自預期來源。在無法做到這一點的情況下，必須在 {siteNameShort} 偵聽入站訊息的關鍵端口上開啟防火牆。{siteNameShort} 將配置資源保護在登入門戶之後。

預設情況下，{siteNameShort} Web 伺服器偵聽端口 8001。可以直接在應用程式中為非 Web 協議配置端口。例如，可以在“個人設定”頁面的 OFTP 伺服器索引標籤中配置 [OFTP 伺服器](../../connectors/oftp) 偵聽端口。

#### DMZ

{siteNameShort} 的 .NET 版本支援建立反向 SSH 隧道，以在隔離區 (DMZ) 中託管 {siteNameShort}，從而避免直接在專用網路上開啟防火牆。有關雲託管的更多資訊，請參閱 [DMZ 閘道器](./dmz-gateway)。

### 將公共端點與 Web 介面分離

預設情況下，{siteNameShort} 使用相同的 Web 伺服器端口來託管管理控制檯（在其中配置和管理 {siteNameShort}）和遠端合作伙伴用來向應用程式傳送資料的公共接收端點。管理控制檯受憑據保護，以確保遠端合作伙伴無法存取。然而，將公共接收端點託管在單獨的端口上可確保使用網路/防火牆規則來增加一層冗餘並增強安全性。有關在單獨網路端口上託管公共接收端點的更多資訊，請參閱 [控制檯與公共端點分離部署](./split-plane-deployment)。

### 強化伺服器安全設定

您可以透過在知行之橋配置檔案中設定 `ScriptingEngineHardeningLevel` 配置參數來提高 {siteNameShort} 伺服器的安全性。預設情況下，此參數設定為 `0`，不會阻止任何運算器。您可以將其設定為 `0` 到 `3` 之間的值，其中每個較高的值透過停用某些運算器來提高安全性。下表顯示了在每個強化級別停用的運算器：

| 級別 | 停用的運算器                                                    |
| -- | --------------------------------------------------------- |
| 0  | 允許所有運算器。這是預設設定。                                           |
| 1  | 最易受攻擊的運算器被停用。這包括允許使用者以任意方式與主機系統互動的任何運算器。                  |
| 2  | 除了級別 1 中不允許的運算器外，此級別還禁止建立新使用者、以非任意方式存取磁碟上的檔案以及引入重複任務的運算器。 |
| 3  | 除了級別 1 和級別 2 中不允許的運算器外，此級別還停用從伺服器取得敏感資訊或執行任意 HTTP 請求的運算器。 |

使用以下部分為您的安裝設定強化級別。

#### .NET

使用文字編輯器開啟安裝目錄的 `www` 資料夾中的 `Web.Config` 檔案。在底部的 `<appSettings>` 標記內，新增如下所示的行並將 `value` 設定為所需的級別：

```xml theme={null}
<appSettings>
     <add key="ScriptingEngineHardeningLevel" value="0"/>
</appSettings>
```

#### Java

使用文字編輯器開啟安裝目錄中的 `arc.properties` 檔案。為以下屬性新增一行，並將數字設定為所需的級別：

```
cdata.initParameters=ScriptingEngineHardeningLevel:0
```

### 與外部惡意軟體和防病毒檔案掃描程式的互動

{siteNameShort} 希望在檔案處理期間能夠獨佔存取應用程式目錄的內容。應用程式使用時間敏感資源（例如應用程式目錄中的資源鎖）來確保多個執行緒不會處理相同的檔案。它掃描端口 **交易** 索引標籤中的檔案，以將中繼資料應用於訊息；當它在端口之間移動檔案時，它會立即在端口目錄之間移動檔案，以確保跨流程中的多個步驟進行快速處理。

掃描檔案和檔案控制代碼的處理程序可能會影響 {siteNameShort} 中的效能，並導致應用程式出現意外行為，包括檔案自動化中斷、無法記錄流量、無法在端口之間移動訊息、處理效能下降等等。

我們建議不要將檔案掃描實用程式指向 {siteNameShort} 應用程式目錄或其任何子目錄。如果需要對到達本地系統的檔案執行病毒或惡意軟體掃描，我們建議使用 [File 端口](../../connectors/file) 將檔案移動到應用程式目錄之外的磁碟路徑。然後，該位置可以用作檔案掃描的暫存資料夾。

#### 使用 File 端口繼續處理掃描的檔案

當從磁碟上與其他處理程序共享的資料夾接收檔案時，可以使用 [File 端口](../../connectors/file) 設定 **延遲接收**，以配置端口在接收和處理傳入檔案之前等待的時間（以秒為單位）。預設間隔為 5 秒。增加該值可以讓檔案掃描程式有更多時間完成。

## 保護 {siteName} 中的資料

以下部分涉及 {siteNameShort} 中資料的安全性，包括流經應用程式的訊息/資料和[工作流程](../../flows)配置本身。

### 為出站流量啟用 TLS/SSL

{siteNameShort} 會根據出站連線的目標 URL 自動解析是否協商 TLS/SSL。例如，如果出站 [AS2](../../connectors/as2) 連線以 `https` URL 為目標，{siteNameShort} 將協商 TLS。

強烈建議使用 TLS/SSL 透過不包含內建加密機制的協議傳輸資料。這意味著 Web 流量應傳送到 `https` 端點，FTP 流量應定向到 `ftps` 端點，依此類推。除了正確配置目標 URL 之外，無需其他步驟即可確保 {siteNameShort} 協商 TLS/SSL 加密。

### 驗證 TLS/SSL 伺服器憑證和 SSH 金鑰

當與 TLS/SSL 或 SSH 伺服器建立出站連線時，建立連線的端口（例如 [REST](../../connectors/rest)、[AS2](../../connectors/as2) 或 [SFTP](../../connectors/sftp)）將嘗試驗證伺服器提供的憑證或金鑰。如果端口設定中未配置伺服器憑證/金鑰，{siteNameShort} 將使用底層系統（作業系統或 JRE）中存在的驗證過程來確定伺服器的憑證是否可信。

可以使用特定的 TLS/SSL 憑證或 SSH 金鑰指紋配置端口，以覆蓋底層系統行為。進行出站連線時，如果伺服器的憑證與端口中配置的憑證匹配，則端口將信任伺服器。此選項提供最高階別的安全性。

當您將 **TLS 伺服器憑證** 欄位設定為 *任何憑證 (Any Certificate)* 時，端口會隱式信任伺服器的身份。僅當不擔心伺服器假冒攻擊時才應這樣做。

### 使用者和管理員管理以及存取 API

{siteNameShort} 為有權登入 {siteNameShort} Web 介面並使用應用程式的使用者維護一組使用者名稱和密碼憑據。有關使用者和角色（包括管理員角色）的更多資訊，請參閱[使用者](./settings/users)和[使用者角色](./settings/user-roles)。

具有管理員角色的使用者可以存取和更改其他使用者的密碼。首次啟動 {siteNameShort} 時建立的管理員使用者的憑據應安全地儲存在外部位置，以確保該帳戶既安全又可恢復。

### 系統 API

使用者可以透過呼叫系統 API 來執行所有應用程式管理任務，因此保護對該 API 的存取與保護對 Web 介面的存取同樣重要。建立 {siteNameShort} 使用者時，可以生成一個授權權杖，允許該使用者存取 API（根據該使用者在應用程式中的角色進行限制）。有關使用授權權杖存取系統 API 的更多資訊，請參閱 [API 身分驗證](../../admin-api/admin-api-authentication)。

<Note>建立使用者的授權權杖後不會顯示，因此應將其安全地儲存在外部位置。</Note>

### FIPS 合規性

聯邦資訊處理標準 (FIPS) 是由美國聯邦政府制定的一套安全標準，用於確保計算機系統的安全性、互操作性和資料完整性。要在 {siteNameShort} 中啟用 FIPS，請按照以下特定於版本的說明操作。

#### Java 版

要在嵌入式 Jetty Web 伺服器中啟用 FIPS，必須首先下載並安裝所需的 Bouncy Castle FIPS jar 檔案。從 <a href="https://www.bouncycastle.org/download/bouncy-castle-java-fips/#latest" target="_blank">[https://www.bouncycastle.org/download/bouncy-castle-java-fips/#latest](https://www.bouncycastle.org/download/bouncy-castle-java-fips/#latest)</a> 下載以下 jar 檔案，並將它們放在 `arc.jar` 旁邊的 `lib` 資料夾中：

* `bcutil-fips-2.x.jar`
* `bc-fips-2.x.jar`
* `bcpkix-fips-2.x.jar`
* `bctls-fips-2.x.jar`

FIPS 的配置取決於嵌入式 Jetty Web 伺服器配置為使用 HTTP 還是 TLS/SSL：

##### HTTP

如果 {siteNameShort} 在為用戶端提供 TLS/SSL 的反向代理後面執行，並且執行 {siteNameShort} 的伺服器透過 HTTP 與該代理通訊，則只需將 `cdata.fips.enabled=true` 新增到您的 `arc.properties` 檔案中。

##### TLS/SSL

要在配置為使用 TLS/SSL (HTTPS) 時啟用 FIPS，必須首先使用以下命令建立 BCFKS 金鑰庫：

```
keytool -genkeypair -alias jetty -keyalg RSA -keystore keystore.bcfks -storetype BCFKS -storepass xA123456 -keypass xA123456 -dname "CN=localhost" -validity 365 -providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providername BCFIPS -J-cp -J"bc-fips-2.1.0.jar"
```

建立金鑰庫後，請使用以下配置更新您的 `arc.properties` 檔案：

```
cdata.fips.enabled=true
;; TLS
cdata.tls.port=8443
cdata.tls.keyStoreType=BCFKS
cdata.tls.keyStorePath=/pathto/keystore.bcfks
cdata.tls.keyStorePassword=xA123456
```

<Note>在嵌入式 Jetty Web 伺服器中啟用 FIPS 時，密碼最小長度為 14 個字元。如果在啟用 FIPS 的情況下密碼長度少於 14 個字元，將無法登入 {siteNameShort}。</Note>

#### .NET 版

要在 .NET 嵌入式 Web 伺服器中或在 IIS 中託管應用程式時啟用 FIPS，請在您的 `Web.Config` 檔案中新增以下語句。

```xml theme={null}
<configuration>
  <appSettings>
    <add key="EnableFIPSMode" value="true" />
  </appSettings>
</configuration>
```
