知識庫 / Spring RSS 訂閱

Spring CredHub 指南

Spring
HongKong
5
11:48 AM · Dec 06 ,2025

1. 概述

在本教程中,我們將實現 Spring CredHub,它是 CredHub 的 Spring 抽象,用於存儲憑證以及帶有映射憑證資源到用户和操作的訪問控制規則。請注意,在運行代碼之前,我們需要確保我們的應用程序在 Cloud Foundry 平台上運行,並且已安裝 CredHub。

2. Maven 依賴

首先,我們需要安裝 <a href="https://mvnrepository.com/artifact/org.springframework.credhub/spring-credhub-starter"><em>spring-credhub-starter</em></a > 依賴:

<dependency>
    <groupId>org.springframework.credhub</groupId>
    <artifactId>spring-credhub-starter</artifactId>
    <version>2.2.0</version>
</dependency>

3. 為什麼憑證管理很重要?

憑證管理是指在整個生命週期中,安全且集中地處理憑證的過程,主要包括生成、創建、輪換和撤銷等環節。 儘管每個公司的應用程序和信息技術環境差異很大,但有一點是始終如一的:應用程序需要訪問其他應用程序、數據庫或工具時,都需要憑證。

憑證管理對於數據安全至關重要,因為它為用户和應用程序提供了訪問敏感信息的方式。 因此,在傳輸中和存儲時都必須確保其安全。 最佳策略之一是使用 API 調用,將硬編碼的憑證和手動管理替換為像 CredHub 這樣的專用憑證管理工具,以編程方式檢索它們。

4. CredHub API

CredHub 提供了全面的 API 接口,用於管理和訪問您的 CredHub 資源。這些 API 允許您通過編程方式與 CredHub 系統交互,實現自動化和集成。

API 概覽

  • 認證 (Authentication): 所有 API 請求都需要有效的認證憑據。
  • 速率限制 (Rate Limits): 為了保護系統穩定性和公平使用,API 請求受到速率限制。
  • 版本控制 (Version Control): CredHub API 遵循版本控制策略,以確保向後兼容性。

主要 API 端點

  • /users: 用於管理用户賬户。
  • /credentials: 用於管理憑據(例如,API 密鑰、密碼)。
  • /organizations: 用於管理組織和組織結構。
  • /policies: 用於管理 CredHub 策略。

代碼示例 (JavaScript)

// 獲取用户信息的示例
fetch('/users/123')
  .then(response => response.json())
  .then(data => console.log(data));
// 獲取憑據的示例
fetch('/credentials/api_key')
  .then(response => response.json())
  .then(data => console.log(data));

4.1. 身份驗證

CredHub API 身份驗證有以下兩種方式:UAA(OAuth2)多方 TLS

默認情況下,CredHub 提供集成的多方 TLS 身份驗證。要使用此方案,請在應用程序屬性中指定 CredHub 服務器的 URL:

spring:
  credhub:
    url: <CredHub URL>

通過 UAA 還可以驗證 API,這需要使用客户端憑據授權令牌獲取訪問令牌。

spring:
  credhub:
    url: <CredHub URL>
    oauth2:
      registration-id: <credhub-client>
  security:
    oauth2:
      client:
        registration:
          credhub-client:
            provider: uaa
            client-id: <OAuth2 client ID>
            client-secret: <OAuth2 client secret>
            authorization-grant-type: <client_credentials>
        provider:
          uaa:
            token-uri: <UAA token server endpoint>

訪問令牌隨後可以傳遞到授權標頭中。

4.2. 憑據 API

通過 `CredHubCredentialOperations</em/> 接口,我們可以調用 CredHub API 創建、更新、檢索和刪除憑據。 CredHub 支持的憑據類型如下:

  • value – 用於單個配置的字符串
  • json – 用於靜態配置的 JSON 對象
  • user – 3 個字符串 – 用户名、密碼和密碼哈希
  • password – 用於密碼和其他字符串憑據的字符串
  • certificate – 包含根 CA、證書和私鑰的對象
  • rsa – 包含公鑰和私鑰的對象
  • ssh – 包含 SSH 格式的公鑰和私鑰的對象

4.2. 權限 API

權限在憑據寫入時提供,用於控制用户可以訪問、更新或檢索的內容。Spring CredHub 提供 CredHubPermissionV2Operations 接口,用於創建、更新、檢索和刪除權限。用户允許執行的捛作包括:讀取寫入刪除

5. CredHub 集成

我們將實現一個 Spring Boot 應用程序,該應用程序返回訂單詳情,並演示一些示例以解釋憑證管理的全生命週期。

5.1. CredHubOperations 接口

CredHubOperations 接口位於 org.springframework.credhub.core 包中。它是 Spring CredHub 的核心類,支持豐富的特性,用於與 CredHub 交互。 它提供對接口的訪問,這些接口對整個 CredHub API 進行建模,並對領域對象和 CredHub 數據之間進行映射:

public class CredentialService {
    private final CredHubCredentialOperations credentialOperations;
    private final CredHubPermissionV2Operations permissionOperations;

    public CredentialService(CredHubOperations credHubOperations) {
        this.credentialOperations = credHubOperations.credentials();
        this.permissionOperations = credHubOperations.permissionsV2();
    }
}

5.2. 憑證創建

首先,我們創建一個新的憑證,類型為 密碼,該憑證使用 PasswordCredentialRequest 構建而成:

SimpleCredentialName credentialName = new SimpleCredentialName(credential.getName());
PasswordCredential passwordCredential = new PasswordCredential((String) value.get("password"));
PasswordCredentialRequest request = PasswordCredentialRequest.builder()
  .name(credentialName)
  .value(passwordCredential)
  .build();
credentialOperations.write(request);

同樣,其他的 CredentialRequest 實現也可以用於構建不同類型的憑證,例如,ValueCredentialRequest 用於 value 憑證,RsaCredentialRequest 用於 rsa 憑證,等等。

ValueCredential valueCredential = new ValueCredential((String) value.get("value"));
request = ValueCredentialRequest.builder()
  .name(credentialName)
  .value(valueCredential)
  .build();
RsaCredential rsaCredential = new RsaCredential((String) value.get("public_key"), (String) value.get("private_key"));
request = RsaCredentialRequest.builder()
  .name(credentialName)
  .value(rsaCredential)
  .build();

5.3. 憑據生成

Spring CredHub 還提供了一種動態生成憑據的選項,以避免應用程序端管理憑據的精力消耗。 這樣做,反過來又增強了數據安全性。 讓我們看看如何實現此功能:

SimpleCredentialName credentialName = new SimpleCredentialName("api_key");
PasswordParameters parameters = PasswordParameters.builder()
  .length(24)
  .excludeUpper(false)
  .excludeLower(false)
  .includeSpecial(true)
  .excludeNumber(false)
  .build();

CredentialDetails<PasswordCredential> generatedCred = credentialOperations.generate(PasswordParametersRequest.builder()
  .name(credentialName)
  .parameters(parameters)
  .build());

String password = generatedCred.getValue().getPassword();

5.4. 憑據輪換與撤銷

憑據管理中的另一個重要環節是輪換憑據。以下代碼演示了我們如何使用 密碼 憑據類型來實現這一點:

CredentialDetails<PasswordCredential> newPassword = credentialOperations.regenerate(credentialName, PasswordCredential.class);

CredHub 還允許 證書 憑證類型同時擁有多個有效版本,從而實現無需停機地進行輪換。 最終 最為 關鍵 環節 憑證的撤銷,該撤銷操作可以如下實施:</span, 確切地是 100% 準確的,沒有誇大其詞,沒有數字錯誤或漂移。

credentialOperations.deleteByName(credentialName);

5.5. 憑證檢索

現在我們對完整的憑證管理生命週期有了充分的瞭解。我們將看到如何檢索最新版本的 密碼 憑證,用於訂單 API 身份驗證:

public ResponseEntity<Collection<Order>> getAllOrders() {
    try {
        String apiKey = credentialService.getPassword("api_key");
        return new ResponseEntity<>(getOrderList(apiKey), HttpStatus.OK);
    } catch (Exception e) {
        return new ResponseEntity<>(HttpStatus.FORBIDDEN);
    }
}

public String getPassword(String name) {
    SimpleCredentialName credentialName = new SimpleCredentialName(name);
    return credentialOperations.getByName(credentialName, PasswordCredential.class)
      .getValue()
      .getPassword();
}

5.6. 控制憑據訪問權限

權限可以附加到憑據上,以限制訪問。例如,一個權限授予單個用户訪問憑據的權限,並使該用户能夠對憑據執行所有操作。 另一個權限可以附加,允許所有用户僅對憑據執行 讀取 操作。

下面是一個示例,演示瞭如何將權限附加到憑據上,允許用户 u101 執行 讀取寫入 操作:

Permission permission = Permission.builder()
  .app(UUID.randomUUID().toString())
  .operations(Operation.READ, Operation.WRITE)
  .user("u101")
  .build();
permissionOperations.addPermissions(name, permission);

Spring CredHub 除了支持 <em READ 和 <em WRITE 之外,還提供對其他操作的支持,從而允許用户:

  • – 通過 ID 和名稱獲取憑據
  • – 通過名稱設置、生成和更新憑據
  • – 通過名稱刪除憑據
  • – 通過憑據名稱獲取訪問控制列表 (ACL)
  • – 向憑據 ACL 添加和刪除條目

6. 結論

在本教程中,我們演示瞭如何使用 Spring CredHub 庫將 CredHub 集成到 Spring Boot 中。 我們為 Order 應用程序集中了憑證管理,涵蓋了兩個關鍵方面:憑證生命週期和權限。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.