2.3. 암호화된 속성 위치 소유자 사용 방법
Karaf 컨테이너를 보호하는 경우 구성 파일에 일반 텍스트 암호를 사용하지 마십시오. 일반 텍스트 암호를 사용하지 않는 한 가지 방법은 가능한 경우 암호화된 속성 자리 표시자를 사용하는 것입니다. 자세한 내용은 다음 항목을 참조하십시오.
2.3.1. 값을 암호화하기 위한 마스터 암호 정보
Jasypt를 사용하여 값을 암호화하려면 마스터 암호가 필요합니다. 마스터 암호를 선택하는 것은 귀하 또는 관리자에게 달려 있습니다. Jasypt는 마스터 암호를 설정하는 몇 가지 방법을 제공합니다.
한 가지 방법은 블루프린트 구성에서 일반 텍스트로 마스터 암호를 지정하는 것입니다. 예를 들면 다음과 같습니다.
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:enc="http://karaf.apache.org/xmlns/jasypt/v1.0.0"> <enc:property-placeholder> <enc:encryptor class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor"> <property name="config"> <bean class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig"> <property name="algorithm" value="PBEWithMD5AndDES" /> <property name="password" value="myPassword" /> </bean> </property> </enc:encryptor> </enc:property-placeholder> </blueprint>
일반 텍스트로 마스터 암호를 지정하는 대신 다음 중 하나를 수행할 수 있습니다.
환경 변수를 마스터 암호로 설정합니다. 블루프린트 구성 파일에서 이 환경 변수를
passwordEnvName
속성 값으로 지정합니다. 예를 들어MASTER_PW
환경 변수를 마스터 암호로 설정하면 블루프린트 구성 파일에 이 항목이 있습니다.<property name="passwordEnvName" value="MASTER_PW">
Karaf 시스템 속성을 마스터 암호로 설정합니다. 블루프린트 구성 파일에서 이 시스템 속성을
passwordSys
속성 값으로 지정합니다. 예를 들어karaf.password
시스템 속성을 마스터 암호로 설정하면 블루프린트 구성 파일에 이 항목이 있습니다.<property name="passwordSys" value="karaf.password">
2.3.2. 암호화된 속성 자리 표시자 사용
Karaf 컨테이너를 보호할 때 블루프린트 구성 파일에서 암호화된 속성 자리 표시자를 사용합니다.
사전 요구 사항
- 값을 암호화하기 위한 마스터 암호를 알고 있습니다.
절차
기본 암호화 알고리즘인
PBEWithMD5AndDES
를 사용하거나 다음과 같이 사용할 암호화 알고리즘을 선택합니다.jasypt:list-algorithms
명령을 실행하여 현재 Java 환경에서 지원되는 알고리즘을 확인합니다.karaf@root()> jasypt:list-algorithms
인수 또는 옵션이 없습니다. 출력은 지원되는 다이제스트 및 PBE(암호 기반 암호화) 알고리즘에 대한 식별자 목록입니다. 목록에는 Bouncy Castle 라이브러리에서 제공하는 알고리즘이 포함되어 있으며 Fuse 7.8의 일부입니다. 이 목록은 길 수 있습니다. 이 중 일부는 다음과 같습니다.
karaf@root()> jasypt:list-algorithms DIGEST ALGORITHMS: - 1.0.10118.3.0.55 - 1.2.804.2.1.1.1.1.2.2.1 ... - 2.16.840.1.101.3.4.2.9 - BLAKE2B-160 - BLAKE2B-256 ... - MD4 - MD5 - OID.1.0.10118.3.0.55 ... - SHA3-512 - SKEIN-1024-1024 - SKEIN-1024-384 ... - TIGER - WHIRLPOOL PBE ALGORITHMS: - PBEWITHHMACSHA1ANDAES_128 - PBEWITHHMACSHA1ANDAES_256 ... - PBEWITHSHA1ANDRC2_128 - PBEWITHSHA1ANDRC2_40 ... - PBEWITHSHAANDIDEA-CBC - PBEWITHSHAANDTWOFISH-CBC
- 목록을 검사하고 사용하려는 암호화 알고리즘의 식별자를 찾습니다. 알고리즘을 선택하는 데 도움이 되도록 사이트의 보안 전문가와 상의할 수 있습니다.
구성 파일에서 사용할 암호와 같은 중요한 구성 값을 암호화하려면
jasypt:encrypt
명령을 실행합니다. 명령의 형식은 다음과 같습니다.jasypt:encrypt [options] [input]
옵션을 지정하지 않고 이 명령을 호출하고 암호화할 값을 지정하지 않으면 명령에서 마스터 암호를 입력하라는 메시지를 표시하고 값을 암호화하고 다른 옵션에 기본값을 적용합니다. 예를 들면 다음과 같습니다.
karaf@root()> jasypt:encrypt Master password: ******** Master password (repeat): ******** Data to encrypt: ***** Data to encrypt (repeat): ***** Algorithm used: PBEWithMD5AndDES Encrypted data: oT8/LImAFQmOfXxuFGRDTAjD1l1+GxKL+TnHxFNwX4A=
암호화하려는 각 값에 대해
jasypt:encrypt
명령을 호출합니다.기본 동작을 변경하려면 다음 옵션 중 하나 이상을 지정합니다.
옵션 설명 예제 -w
또는--password-property
환경 변수 또는 마스터 암호 값으로 설정된 시스템 속성을 사용하여 이 옵션을 따릅니다. Jasypt는 암호화 알고리즘과 함께 이 값을 사용하여 암호화 키를 파생합니다.
명령을 호출한 후
-w
또는-W
옵션을 지정하지 않으면 마스터 암호를 입력하고 확인하라는 메시지를 표시합니다.-W MASTER_PW
-
w 또는--password
선택한 마스터 암호의 일반 텍스트 값을 사용하여 이 옵션을 따르십시오. 마스터 암호의 일반 텍스트 값이 기록에 표시됩니다.
Jasypt는 암호화 알고리즘과 함께 이 값을 사용하여 암호화 키를 파생합니다.
명령을 호출한 후
-w
또는-W
옵션을 지정하지 않으면 마스터 암호를 입력하고 확인하라는 메시지를 표시합니다.-W "M@s!erP#"
-a
또는--algorithm
jasypt:encrypt
명령이 초기 암호화 키를 파생하는 데 사용할 알고리즘의 식별자로 이 옵션을 따릅니다. 기본값은PBEWithMD5AndDES
입니다.목록에
jasypt-list-algorithms
명령 출력이 지원되는 모든 알고리즘이 지원됩니다. 명령줄에서 알고리즘 이름을 지정할 때 자동 완성을 사용할 수 있습니다.예:
-a PBEWITHMD5ANDRC2
-i
또는--iterations
초기 키의 해시를 반복적으로 생성하는 횟수를 나타내는 정수를 사용하여 이 옵션을 따릅니다. 각 반복은 이전 해시 결과를 가져와서 다시 해시합니다. 결과는 최종 암호화 키입니다. 기본값은 1000입니다.
예:
-i 5000
-h
또는--hex
16진수 출력을 얻으려면 이 옵션을 지정합니다. 기본 출력은 Base64입니다.
예:
-h
--help
명령 구문 및 옵션에 대한 정보를 표시합니다.
jasypt:encrypt --help
jasypt:encrypt
명령을 실행하여 얻은 암호화된 값이 포함된 속성 파일을 생성합니다.ENC()
함수에서 각 암호화된 값을 래핑합니다.예를 들어, 일부 LDAP 자격 증명을
etc/ldap.properties
파일에 저장한다고 가정합니다. 파일 콘텐츠는 다음과 같습니다.#ldap.properties ldap.password=ENC(VMJ5S566MEDhQ5r6jiIqTB+fao3NN4pKnQ9xU0wiDCg=) ldap.url=ldap://192.168.1.74:10389
암호화된 속성 자리 표시자에 필요한 네임스페이스를
블루프린트.xml
파일에 추가합니다. 이러한 네임스페이스는 Aries 확장 및 Apache Karaf Jasypt를 위한 것입니다. 예를 들면 다음과 같습니다.<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0" xmlns:enc="http://karaf.apache.org/xmlns/jasypt/v1.0.0"> ... </blueprint>
사용한 Jasypt 암호화 알고리즘과 속성 파일의 위치를 구성합니다. 다음 예제에서는 다음을 수행하는 방법을 보여줍니다.
-
etc/ldap.properties
파일에서 속성을 읽도록ext:property-placeholder
요소를 구성합니다. enc:property-placeholder
요소를 다음과 같이 구성합니다.-
PBEWithMD5AndDES
암호화 알고리즘을 식별합니다. Karaf
bin/setenv
파일에 정의된 환경 변수JASYPT_ENCRYPTION_PASSWORD
에서 마스터 암호를 읽습니다.<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0" xmlns:enc="http://karaf.apache.org/xmlns/jasypt/v1.0.0"> <ext:property-placeholder> <ext:location>file:etc/ldap.properties</ext:location> </ext:property-placeholder> <enc:property-placeholder> <enc:encryptor class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor"> <property name="config"> <bean class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig"> <property name="algorithm" value="PBEWithMD5AndDES" /> <property name="passwordEnvName" value="JASYPT_ENCRYPTION_PASSWORD" /> </bean> </property> </enc:encryptor> </enc:property-placeholder> … </blueprint>
-
-
초기화 벡터 속성 구성
다음 알고리즘에서는 블루프린트 구성에 ivGenerator
라는 초기화 벡터 속성을 추가해야 합니다.
PBEWITHHMACSHA1ANDAES_128 PBEWITHHMACSHA1ANDAES_256 PBEWITHHMACSHA224ANDAES_128 PBEWITHHMACSHA224ANDAES_256 PBEWITHHMACSHA256ANDAES_128 PBEWITHHMACSHA256ANDAES_256 PBEWITHHMACSHA384ANDAES_128 PBEWITHHMACSHA384ANDAES_256 PBEWITHHMACSHA512ANDAES_128 PBEWITHHMACSHA512ANDAES_256
다음 예제에서는 필요한 경우 ivGenerator
속성을 블루프린트 구성에 추가하는 방법을 보여줍니다.
<enc:property-placeholder> <enc:encryptor class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor"> <property name="config"> <bean class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig"> <property name="algorithm" value="PBEWITHHMACSHA1ANDAES_128"/> <property name="passwordEnvName" value="JASYPT_ENCRYPTION_PASSWORD"/> <property name="ivGenerator"> <bean class="org.jasypt.iv.RandomIvGenerator" /> </property> </bean> </property> </enc:encryptor> </enc:property-placeholder>
암호화된 속성 자리 표시자를 사용하는 LDAP JAAS 영역 구성
다음 예제는 Jasypt 암호화된 속성 자리 표시자를 사용하는 LDAP JAAS 영역 구성을 표시하여 이전 예제의 블루프린트.xml
파일에 추가합니다.
이 항목에 설명된 프로세스를 사용하여 속성을 암호화하는 경우 @PropertyInject
주석을 사용하여 속성의 암호를 해독할 수 없습니다. 대신 이 블루프린트 예제와 같이 XML을 사용하여 Java 오브젝트에 속성을 삽입합니다.
이 예에서는 컨테이너 초기화 중에 ${ldap.password}
자리 표시자가 etc/ldap.properties
파일에서 ldap.password
속성의 해독된 값으로 교체됩니다.
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0" xmlns:enc="http://karaf.apache.org/xmlns/jasypt/v1.0.0"> <ext:property-placeholder> <location>file:etc/ldap.properties</location> </ext:property-placeholder> <enc:property-placeholder> <enc:encryptor class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor"> <property name="config"> <bean class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig"> <property name="algorithm" value="PBEWithMD5AndDES" /> <property name="passwordEnvName" value="JASYPT_ENCRYPTION_PASSWORD" /> </bean> </property> </enc:encryptor> </enc:property-placeholder> <jaas:config name="karaf" rank="200"> <jaas:module className="org.apache.karaf.jaas.modules.ldap.LDAPLoginModule" flags="required"> initialContextFactory=com.sun.jndi.ldap.LdapCtxFactory debug=true connectionURL=${ldap.url} connectionUsername=cn=mqbroker,ou=Services,ou=system,dc=jbossfuse,dc=com connectionPassword=${ldap.password} connectionProtocol= authentication=simple userRoleName=cn userBase = ou=User,ou=ActiveMQ,ou=system,dc=jbossfuse,dc=com userSearchMatching=(uid={0}) userSearchSubtree=true roleBase = ou=Group,ou=ActiveMQ,ou=system,dc=jbossfuse,dc=com roleName=cn roleSearchMatching= (member:=uid={1}) roleSearchSubtree=true </jaas:module> </jaas:config> </blueprint>
환경 변수 또는 시스템 속성 지정의 예
값을 암호화할 때 일반 텍스트 마스터 암호를 지정하는 대신 환경 변수 또는 마스터 암호로 설정된 시스템 속성을 지정할 수 있습니다. 예를 들어 bin/setenv
파일에 다음이 포함되어 있다고 가정합니다.
export MASTER_PASSWORD=passw0rd
다음 명령을 사용하여 값을 암호화할 수 있습니다.
karaf@root()> jasypt:encrypt -w MASTER_PASSWORD "$en$!t!ve" Algorithm used: PBEWithMD5AndDES Encrypted data: /4DZCwqXD7cQ++TKQjt9QzmmcWv7TwmylCPkHumv2LQ=
etc/system.properties
파일에 다음이 포함된 경우:
master.password=passw0rd
다음 명령을 사용하여 값을 암호화할 수 있습니다.
karaf@root()> jasypt:encrypt -w master.password "$en$!t!ve" Algorithm used: PBEWithMD5AndDES Encrypted data: 03+8UTJJtEXxHaJkVCmzhqLMUYtT8TBG2RMvOBQlfmQ=
2.3.3. jasypt:digest
명령 호출
Jasypt 다이제스트는 MD5와 같은 암호화 해시 함수를 값에 적용한 결과입니다. 다이제스트를 생성하는 것은 단방향 암호화의 유형입니다. 다이제스트를 생성한 다음 다이제스트에서 원래 값을 재구성할 수 없습니다. 특히 민감한 값의 경우 값을 암호화하는 대신 다이제스트를 생성해야 할 수 있습니다. 그런 다음 다이제스트를 속성 자리 표시자로 지정할 수 있습니다.
다이제스트를 생성하기 위한 명령을 호출하는 형식은 다음과 같습니다.
jasypt:digest [options] [입력]
옵션을 지정하지 않고 다이제스트를 생성할 입력을 지정하지 않으면 명령에서 옵션에 기본값을 암호화하고 적용할 값을 지정하라는 메시지를 표시합니다. 예를 들면 다음과 같습니다.
karaf@root()> jasypt:digest Input data to digest: ******** Input data to digest (repeat): ******** Algorithm used: MD5 Digest value: 8D4C0B3D5EE133BCFD7585A90F15C586741F814BC527EAE2A386B9AA6609B926AD9B3C418937251373E08F18729AD2C93815A7F14D878AA0EF3268AA04729A614ECAE95029A112E9AD56FEDD3FD7E28B73291C932B6F4C894737FBDE21AB382
다음 예제에서는 명령줄에서 입력
인수의 사양을 보여줍니다.
karaf@root()> jasypt:digest ImportantPassword
이 명령은 기본 옵션을 적용하고 ImportantPassword
의 단방향 암호화를 제공하는 다이제스트를 생성합니다. 명령 출력은 다음과 같습니다.
karaf@root()> jasypt:digest ImportantPassword Algorithm used: MD5 Digest value: 0bL90nno/nHiTEdzx3dKa61LBDcWQQZMpjaONtY3b1fJBuDWbWTTtZ6tE5eOOPKh7orLTXS7XRt2blA2DrfnjWIlIETjge9n
단방향 암호화를 원하는 각 값에 대해 jasypt:digest
명령을 호출합니다.
기본 동작을 변경하려면 다음 옵션 중 하나 이상을 지정합니다.
옵션 | 설명 | 예제 |
---|---|---|
|
목록에 |
예: |
| 초기 다이제스트의 해시를 반복적으로 생성하는 횟수를 나타내는 정수와 함께 이 옵션을 따릅니다. 각 반복은 이전 해시 결과를 가져와서 다시 해시합니다. 결과는 최종 다이제스트입니다. 기본값은 1000입니다. |
예: |
|
다이제스트를 생성하기 위해 |
예: |
| 16진수 출력을 얻으려면 이 옵션을 지정합니다. 기본 출력은 Base64입니다. |
예: |
| 명령 구문 및 옵션에 대한 정보를 표시합니다. |
|
다이제스트를 가져온 후 암호화된 속성 자리 표시자 사용에서 설명한 것과 동일한 방식으로 사용할 수 있습니다.
기본값이 아닌 값을 사용하는 경우 계산 시간이 더 오래 걸립니다. 예를 들면 다음과 같습니다.
karaf@root()> jasypt:digest --iterations 1000000 --salt-size 32 -a SHA-512 --hex passw0rd Algorithm used: SHA-512 Digest value: 4007A85C4932A399D8376B4F2B3221E34F0AF349BB152BEAC80F03BEB2B368DA7900F0990C186DB36D61741FA147B96DC9F73481991506FAA3662EA1693642CDAB89EB7E6B1DC21E1443D06D70A5842EB2851D37E262D5FC77A1D0909B3B2783
2.3.4. jasypt:decrypt
명령 호출
암호화한 자리 표시자의 원래 값을 확인하려면 자리 표시자에서 jasypt:decrypt
명령을 호출합니다. jasypt:encrypt
명령을 호출하여 자리 표시자를 생성해야 합니다. 다음을 알고 있어야 합니다.
- 마스터 암호 또는 마스터 암호로 설정된 환경 변수 또는 시스템 속성입니다.
-
jasypt:encrypt
명령이 값을 암호화하는 데 사용되는 알고리즘입니다. -
jasypt:encrypt
명령이 원래 값을 암호화하는 데 사용한 반복 횟수입니다.
jasypt:decrypt
명령을 호출하는 형식은 다음과 같습니다.
jasypt:decrypt [options] [input]
옵션을 지정하지 않고 암호 해독할 암호화된 입력을 지정하지 않으면 명령에서 마스터 암호와 암호를 해독할 값을 입력하라는 메시지를 표시하고 다른 옵션에 기본값을 적용합니다. 이 예제 암호 해독이 성공하려면 jasypt:encrypt
명령에서 기본값을 사용하여 값을 암호화해야 합니다. 예를 들면 다음과 같습니다.
karaf@root()> jasypt:decrypt Master password: ******** Data to decrypt: ******************************************** Algorithm used: PBEWithMD5AndDES Decrypted data: $en$!t!ve
이 명령은 사용자가 지정하는 마스터 암호와 기본 알고리즘인 PBEWithMD5AndDES
를 사용하여 암호 해독 키를 만듭니다. 그러면 명령에서 이 암호 해독 키를 사용하여 프롬프트에 입력한 값을 해독합니다.
기본 동작을 변경하려면 다음 옵션 중 하나 이상을 지정합니다.
옵션 | 설명 | 예제 |
---|---|---|
| 환경 변수 또는 마스터 암호 값으로 설정된 시스템 속성을 사용하여 이 옵션을 따릅니다. Jasypt는 암호 해독 알고리즘과 함께 이 값을 사용하여 초기 암호 해독 키를 파생합니다.
명령을 호출한 후 |
|
| 선택한 마스터 암호의 일반 텍스트 값을 사용하여 이 옵션을 따르십시오. 마스터 암호의 일반 텍스트 값이 기록에 표시됩니다. Jasypt는 암호 해독 알고리즘과 함께 이 값을 사용하여 초기 암호 해독 키를 파생합니다.
명령을 호출한 후 |
|
|
목록에 |
예: |
| 초기 키의 해시를 반복적으로 생성하는 횟수를 나타내는 정수를 사용하여 이 옵션을 따릅니다. 각 반복은 이전 해시 결과를 가져와서 다시 해시합니다. 결과는 최종 암호 해독 키입니다. 기본값은 1000입니다.
|
예: |
| 16진수 출력을 얻으려면 이 옵션을 지정합니다. 기본 출력은 Base64입니다. |
예: |
| 이전 버전의 Jasypt로 암호화된 암호 해독에 고정 IV 생성기를 사용합니다. |
예: |
| 명령 구문 및 옵션에 대한 정보를 표시합니다. |
|
환경 변수 또는 시스템 속성 지정의 예
값을 해독할 때 일반 텍스트 마스터 암호를 지정하는 대신 환경 변수 또는 마스터 암호로 설정된 시스템 속성을 지정할 수 있습니다. 예를 들어 bin/setenv
파일에 다음이 포함되어 있다고 가정합니다.
export MASTER_PASSWORD=passw0rd
다음 명령을 사용하여 값을 해독할 수 있습니다.
karaf@root()> jasypt:decrypt -a -w MASTER_PASSWORD Data to decrypt: ******************************************** Algorithm used: PBEWithMD5AndDES Decrypted data: $en$!t!ve
etc/system.properties
파일에 다음이 포함된 경우:
master.password=passw0rd
다음 명령을 사용하여 값을 해독할 수 있습니다.
karaf@root()> jasypt:decrypt -w master.password Data to decrypt: ******************************************** Algorithm used: PBEWithMD5AndDES Decrypted data: $en$!t!ve