SPNEGO TLS verification

Signed-off-by: Akira Ajisaka <aajisaka@apache.org>
(cherry picked from commit ba66f3b454)
This commit is contained in:
Eric Yang 2020-03-31 13:37:55 -04:00 committed by Akira Ajisaka
parent 50ba1949ee
commit 9db6e96db3
No known key found for this signature in database
GPG Key ID: C1EDBB9CA400FD50
1 changed files with 8 additions and 0 deletions

View File

@ -144,6 +144,7 @@ public class WebHdfsFileSystem extends FileSystem
+ "/v" + VERSION; + "/v" + VERSION;
public static final String EZ_HEADER = "X-Hadoop-Accept-EZ"; public static final String EZ_HEADER = "X-Hadoop-Accept-EZ";
public static final String FEFINFO_HEADER = "X-Hadoop-feInfo"; public static final String FEFINFO_HEADER = "X-Hadoop-feInfo";
public static final String DFS_HTTP_POLICY_KEY = "dfs.http.policy";
/** /**
* Default connection factory may be overridden in tests to use smaller * Default connection factory may be overridden in tests to use smaller
@ -173,6 +174,7 @@ public class WebHdfsFileSystem extends FileSystem
private DFSOpsCountStatistics storageStatistics; private DFSOpsCountStatistics storageStatistics;
private KeyProvider testProvider; private KeyProvider testProvider;
private boolean isTLSKrb;
/** /**
* Return the protocol scheme for the FileSystem. * Return the protocol scheme for the FileSystem.
@ -234,6 +236,7 @@ public class WebHdfsFileSystem extends FileSystem
.newDefaultURLConnectionFactory(connectTimeout, readTimeout, conf); .newDefaultURLConnectionFactory(connectTimeout, readTimeout, conf);
} }
this.isTLSKrb = "HTTPS_ONLY".equals(conf.get(DFS_HTTP_POLICY_KEY));
ugi = UserGroupInformation.getCurrentUser(); ugi = UserGroupInformation.getCurrentUser();
this.uri = URI.create(uri.getScheme() + "://" + uri.getAuthority()); this.uri = URI.create(uri.getScheme() + "://" + uri.getAuthority());
@ -691,6 +694,11 @@ public class WebHdfsFileSystem extends FileSystem
//redirect hostname and port //redirect hostname and port
redirectHost = null; redirectHost = null;
if (url.getProtocol().equals(getTransportScheme()) &&
UserGroupInformation.isSecurityEnabled() &&
isTLSKrb) {
throw new IOException("Access denied: dfs.http.policy is HTTPS_ONLY.");
}
// resolve redirects for a DN operation unless already resolved // resolve redirects for a DN operation unless already resolved
if (op.getRedirect() && !redirected) { if (op.getRedirect() && !redirected) {