用 spring boot, 並將pem 檔案轉換成 jks 檔案,然後連線 AWS 的 DocumentDB 的詳細示例

gongchengship發表於2024-07-16

要使用 Spring Boot 應用程式連線到 AWS DocumentDB,並將 PEM 檔案轉換成 JKS 檔案,需要以下幾個步驟:

  1. 建立 Spring Boot 專案
  2. 配置 AWS DocumentDB
  3. 將 PEM 檔案轉換為 JKS 檔案
  4. 配置 Spring Boot 應用程式
  5. 實現連線並驗證

以下是詳細的步驟和示例程式碼。

1. 建立 Spring Boot 專案

使用 Spring Initializr(https://start.spring.io/)生成一個包含以下依賴項的專案:

  • Spring Data MongoDB
  • Spring Web

2. 配置 AWS DocumentDB

確保你的 AWS DocumentDB 叢集已經建立並可用,並獲取連線字串和所需的證書檔案。

3. 將 PEM 檔案轉換為 JKS 檔案

假設你有一個 PEM 檔案 rds-combined-ca-bundle.pem

3.1. 安裝 OpenSSL 和 Keytool

確保你的系統上安裝了 OpenSSL 和 JDK(其中包含 Keytool)。

3.2. 轉換 PEM 檔案為 PKCS12 檔案

openssl pkcs12 -export -in rds-combined-ca-bundle.pem -out rds-ca.p12 -name rds-ca

這會提示你設定匯出密碼,記住這個密碼用於下一步。

3.3. 轉換 PKCS12 檔案為 JKS 檔案

keytool -importkeystore -srckeystore rds-ca.p12 -srcstoretype PKCS12 -destkeystore rds-ca.jks -deststoretype JKS -srcalias rds-ca -destalias rds-ca

這會提示你輸入源密碼(在上一步中設定的密碼)和目標密碼。

4. 配置 Spring Boot 應用程式

將生成的 rds-ca.jks 檔案放置在你的 Spring Boot 專案的 src/main/resources 目錄中。然後編輯你的 application.properties 檔案:

spring.data.mongodb.uri=mongodb://<username>:<password>@<cluster-endpoint>:<port>/<database>?ssl=true&sslInvalidHostNameAllowed=true
spring.data.mongodb.ssl.enabled=true
spring.data.mongodb.ssl.key-store=classpath:rds-ca.jks
spring.data.mongodb.ssl.key-store-password=<jks-password>

<username><password><cluster-endpoint><port><database><jks-password> 替換為你的 AWS DocumentDB 的相應值和 JKS 密碼。

5. 實現連線並驗證

5.1 建立一個模型類

package com.example.demo;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "person")
public class Person {
    @Id
    private String id;
    private String name;
    private int age;

    // Getters and Setters
}

5.2 建立一個儲存庫介面

package com.example.demo;

import org.springframework.data.mongodb.repository.MongoRepository;

public interface PersonRepository extends MongoRepository<Person, String> {
}

5.3 建立一個控制器

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/persons")
public class PersonController {

    @Autowired
    private PersonRepository personRepository;

    @GetMapping
    public List<Person> getAllPersons() {
        return personRepository.findAll();
    }

    @PostMapping
    public Person createPerson(@RequestBody Person person) {
        return personRepository.save(person);
    }
}

啟動 Spring Boot 應用程式

確保 src/main/resources 目錄中有 rds-ca.jks 檔案,然後啟動你的 Spring Boot 應用程式:

mvn spring-boot:run

驗證連線

透過 POST 和 GET 請求來測試你的控制器。你可以使用 curl 或 Postman 等工具來傳送請求。

7.1 建立一個新的 Person

curl -X POST http://localhost:8080/persons -H "Content-Type: application/json" -d '{"name": "John Doe", "age": 30}'

7.2 獲取所有 Person

curl http://localhost:8080/persons

注意事項

  • 證書有效性:確保 PEM 檔案中的證書是有效的,並且匯出時沒有錯誤。
  • 密碼管理:確保在轉換過程中設定並使用強密碼。
  • 路徑配置:確保 application.properties 中的路徑正確指向你的 JKS 檔案。
  • 依賴庫:確保 Spring Data MongoDB 版本與 MongoDB 驅動程式相容。

透過以上步驟,你應該能夠使用 Spring Boot 應用程式安全地連線到 AWS 的 DocumentDB。

相關文章