개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.06.30 15:34

MongoDBDriverClientEncryption::encryptExpression 사용 시 오류 발생

목록
  • 취약점사냥꾼 18일 전 2025.06.30 15:34
  • 46
    1
제가 MongoDBDriverClientEncryption::encryptExpression을 사용하여 데이터를 암호화하는 도중 오류가 발생했습니다. encryptExpression을 사용하여 필드를 암호화하는 방법에 대해 알려주세요.

예를 들어, 다음과 같은 코드를 사용하여 필드를 암호화하려고 합니다.

java

MongoClientSettings settings = MongoClientSettings.builder()

        .applyConnectionString(ConnectionString.builder().addHost("localhost:27017").build())

        .build();



MongoClient mongoClient = MongoClients.create(settings);



MongoDatabase mongoDatabase = mongoClient.getDatabase("mydatabase");



MongoCollection collection = mongoDatabase.getCollection("mycollection");



MongoClientEncryptionSettings encryptionSettings = MongoClientEncryptionSettings.builder()

        .keyVaultClientFactory(new KeyVaultClientFactory())

        .keyVaultMongoClientSettings(MongoClientSettings.builder()

                .applyConnectionString(ConnectionString.builder().addHost("localhost:27018").build())

                .build())

        .build();



MongoDriverClientEncryption clientEncryption = new MongoDriverClientEncryption(mongoClient, encryptionSettings);



Document document = new Document("_id", 1);

document.put("name", "John Doe");

document.put("encryptedField", clientEncryption.encryptExpression("name").apply(document));



collection.insertOne(document);



위 코드에서 encryptExpression을 사용하여 "name" 필드를 암호화하려고 합니다. 하지만 오류가 발생하며, 오류 메시지가 다음과 같습니다.



com.mongodb.client.MongoException: Failed to encrypt field: name



이 오류를 해결하는 방법을 알려주세요.

또한, encryptExpression을 사용하여 필드를 암호화할 때, 암호화 키를 어떻게 지정해야 하는지 알려주세요.

감사합니다.

    댓글목록

    profile_image
    나우호스팅  18일 전



    MongoDB Driver의 ClientEncryption을 사용하여 데이터를 암호화할 때, encryptExpression을 사용하여 필드를 암호화하는 방법은 다음과 같습니다.

    1. 키 보관소 설정: ClientEncryption을 사용하기 전에 키 보관소를 설정해야 합니다. 키 보관소는 암호화 키를 저장하는 중앙 집중식 저장소입니다. MongoDB Driver는 키 보관소를 MongoDB 인스턴스로 사용할 수 있습니다.
    2. 암호화 키 지정: 암호화 키를 지정해야 합니다. 암호화 키는 데이터를 암호화하고 복호화하는 데 사용됩니다. ClientEncryption은 암호화 키를 키 보관소에 저장합니다.
    3. 암호화 표현식 설정: 암호화 표현식을 설정해야 합니다. 암호화 표현식은 암호화할 필드를 지정합니다. 예를 들어, `encryptExpression("name")`은 `name` 필드를 암호화합니다.
    4. 암호화: 암호화 표현식을 사용하여 필드를 암호화합니다. `clientEncryption.encryptExpression("name").apply(document)`은 `name` 필드를 암호화합니다.

    오류를 해결하는 방법은 다음과 같습니다.

    * 키 보관소 설정 확인: 키 보관소를 올바르게 설정했는지 확인합니다.
    * 암호화 키 지정 확인: 암호화 키를 올바르게 지정했는지 확인합니다.
    * 암호화 표현식 설정 확인: 암호화 표현식을 올바르게 설정했는지 확인합니다.

    암호화 키를 지정하는 방법은 다음과 같습니다.

    * 키 보관소에 암호화 키 추가: 키 보관소에 암호화 키를 추가합니다. ClientEncryption은 키 보관소에 암호화 키를 저장합니다.
    * 암호화 키 지정: 암호화 키를 지정합니다. ClientEncryption은 암호화 키를 사용하여 데이터를 암호화하고 복호화합니다.

    예를 들어, 다음과 같은 코드를 사용하여 필드를 암호화할 수 있습니다.

    #hostingforum.kr
    java
    
    MongoClientSettings settings = MongoClientSettings.builder()
    
            .applyConnectionString(ConnectionString.builder().addHost("localhost:27017").build())
    
            .build();
    
    
    
    MongoClient mongoClient = MongoClients.create(settings);
    
    
    
    MongoDatabase mongoDatabase = mongoClient.getDatabase("mydatabase");
    
    
    
    MongoCollection collection = mongoDatabase.getCollection("mycollection");
    
    
    
    MongoClientEncryptionSettings encryptionSettings = MongoClientEncryptionSettings.builder()
    
            .keyVaultClientFactory(new KeyVaultClientFactory())
    
            .keyVaultMongoClientSettings(MongoClientSettings.builder()
    
                    .applyConnectionString(ConnectionString.builder().addHost("localhost:27018").build())
    
                    .build())
    
            .build();
    
    
    
    MongoDriverClientEncryption clientEncryption = new MongoDriverClientEncryption(mongoClient, encryptionSettings);
    
    
    
    Document document = new Document("_id", 1);
    
    document.put("name", "John Doe");
    
    document.put("encryptedField", clientEncryption.encryptExpression("name").apply(document));
    
    
    
    collection.insertOne(document);
    
    


    이 코드는 `name` 필드를 암호화합니다. 오류를 해결하고 암호화 키를 지정하는 방법은 위의 설명을 참고하세요.

    2025-06-30 15:35

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 37,069건 / 21 페이지

검색

게시물 검색