1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.net.ssl;
18
19 import java.security.KeyStoreException;
20 import java.security.NoSuchAlgorithmException;
21 import java.util.Arrays;
22
23 import javax.net.ssl.TrustManagerFactory;
24
25 import org.apache.logging.log4j.core.Core;
26 import org.apache.logging.log4j.core.config.plugins.Plugin;
27 import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
28 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
29
30
31
32
33 @Plugin(name = "TrustStore", category = Core.CATEGORY_NAME, printObject = true)
34 public class TrustStoreConfiguration extends AbstractKeyStoreConfiguration {
35
36 private final String trustManagerFactoryAlgorithm;
37
38 public TrustStoreConfiguration(final String location,
39 final PasswordProvider passwordProvider,
40 final String keyStoreType,
41 final String trustManagerFactoryAlgorithm) throws StoreConfigurationException {
42 super(location, passwordProvider, keyStoreType);
43 this.trustManagerFactoryAlgorithm = trustManagerFactoryAlgorithm == null ? TrustManagerFactory
44 .getDefaultAlgorithm() : trustManagerFactoryAlgorithm;
45 }
46
47
48
49
50 @Deprecated
51 public TrustStoreConfiguration(final String location, final char[] password, final String keyStoreType,
52 final String trustManagerFactoryAlgorithm) throws StoreConfigurationException {
53 this(location, new MemoryPasswordProvider(password), keyStoreType, trustManagerFactoryAlgorithm);
54 if (password != null) {
55 Arrays.fill(password, '\0');
56 }
57 }
58
59
60
61
62 @Deprecated
63 public TrustStoreConfiguration(final String location, final String password, final String keyStoreType,
64 final String trustManagerFactoryAlgorithm) throws StoreConfigurationException {
65 this(location, new MemoryPasswordProvider(password == null ? null : password.toCharArray()), keyStoreType,
66 trustManagerFactoryAlgorithm);
67 }
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 @PluginFactory
84 public static TrustStoreConfiguration createKeyStoreConfiguration(
85
86 @PluginAttribute("location") final String location,
87 @PluginAttribute(value = "password", sensitive = true) final char[] password,
88 @PluginAttribute("passwordEnvironmentVariable") final String passwordEnvironmentVariable,
89 @PluginAttribute("passwordFile") final String passwordFile,
90 @PluginAttribute("type") final String keyStoreType,
91 @PluginAttribute("trustManagerFactoryAlgorithm") final String trustManagerFactoryAlgorithm) throws StoreConfigurationException {
92
93
94 if (password != null && passwordEnvironmentVariable != null && passwordFile != null) {
95 throw new IllegalStateException("You MUST set only one of 'password', 'passwordEnvironmentVariable' or 'passwordFile'.");
96 }
97 try {
98
99 PasswordProvider provider = passwordFile != null
100 ? new FilePasswordProvider(passwordFile)
101 : passwordEnvironmentVariable != null
102 ? new EnvironmentPasswordProvider(passwordEnvironmentVariable)
103
104 : new MemoryPasswordProvider(password);
105
106 if (password != null) {
107 Arrays.fill(password, '\0');
108 }
109 return new TrustStoreConfiguration(location, provider, keyStoreType, trustManagerFactoryAlgorithm);
110 } catch (Exception ex) {
111 throw new StoreConfigurationException("Could not configure TrustStore", ex);
112 }
113 }
114
115
116
117
118 public static TrustStoreConfiguration createKeyStoreConfiguration(
119
120 final String location,
121 final char[] password,
122 final String keyStoreType,
123 final String trustManagerFactoryAlgorithm) throws StoreConfigurationException {
124
125 return createKeyStoreConfiguration(location, password, null, null, keyStoreType, trustManagerFactoryAlgorithm);
126 }
127
128
129
130
131
132
133
134
135
136
137
138
139
140 @Deprecated
141 public static TrustStoreConfiguration createKeyStoreConfiguration(
142
143 final String location,
144 final String password,
145 final String keyStoreType,
146 final String trustManagerFactoryAlgorithm) throws StoreConfigurationException {
147
148 return createKeyStoreConfiguration(location, (password == null ? null : password.toCharArray()),
149 null, null, keyStoreType, trustManagerFactoryAlgorithm);
150 }
151
152 public TrustManagerFactory initTrustManagerFactory() throws NoSuchAlgorithmException, KeyStoreException {
153 final TrustManagerFactory tmFactory = TrustManagerFactory.getInstance(this.trustManagerFactoryAlgorithm);
154 tmFactory.init(this.getKeyStore());
155 return tmFactory;
156 }
157
158 @Override
159 public int hashCode() {
160 final int prime = 31;
161 int result = super.hashCode();
162 result = prime * result
163 + ((trustManagerFactoryAlgorithm == null) ? 0 : trustManagerFactoryAlgorithm.hashCode());
164 return result;
165 }
166
167 @Override
168 public boolean equals(final Object obj) {
169 if (this == obj) {
170 return true;
171 }
172 if (!super.equals(obj)) {
173 return false;
174 }
175 if (getClass() != obj.getClass()) {
176 return false;
177 }
178 final TrustStoreConfiguration other = (TrustStoreConfiguration) obj;
179 if (trustManagerFactoryAlgorithm == null) {
180 if (other.trustManagerFactoryAlgorithm != null) {
181 return false;
182 }
183 } else if (!trustManagerFactoryAlgorithm.equals(other.trustManagerFactoryAlgorithm)) {
184 return false;
185 }
186 return true;
187 }
188
189 public String getTrustManagerFactoryAlgorithm() {
190 return trustManagerFactoryAlgorithm;
191 }
192 }