001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package org.apache.hadoop.hbase.io.crypto.tls; 019 020import java.io.File; 021import java.io.IOException; 022import java.security.GeneralSecurityException; 023import java.security.KeyStore; 024 025/** 026 * Implementation of {@link FileKeyStoreLoader} that loads from PEM files. 027 * <p/> 028 * This file has been copied from the Apache ZooKeeper project. 029 * @see <a href= 030 * "https://github.com/apache/zookeeper/blob/c74658d398cdc1d207aa296cb6e20de00faec03e/zookeeper-server/src/main/java/org/apache/zookeeper/common/PEMFileLoader.java">Base 031 * revision</a> 032 */ 033final class PEMFileLoader extends FileKeyStoreLoader { 034 private PEMFileLoader(String keyStorePath, String trustStorePath, char[] keyStorePassword, 035 char[] trustStorePassword) { 036 super(keyStorePath, trustStorePath, keyStorePassword, trustStorePassword); 037 } 038 039 @Override 040 public KeyStore loadKeyStore() throws IOException, GeneralSecurityException { 041 File file = new File(keyStorePath); 042 return PemReader.loadKeyStore(file, file, keyStorePassword); 043 } 044 045 @Override 046 public KeyStore loadTrustStore() throws IOException, GeneralSecurityException { 047 return PemReader.loadTrustStore(new File(trustStorePath)); 048 } 049 050 static class Builder extends FileKeyStoreLoader.Builder<PEMFileLoader> { 051 @Override 052 PEMFileLoader build() { 053 return new PEMFileLoader(keyStorePath, trustStorePath, keyStorePassword, trustStorePassword); 054 } 055 } 056}