FIPS 모드
Microsoft JDBC Driver for SQL Server는 FIPS 140 규격으로 구성된 JVM에서 실행을 지원합니다.
필수 조건
- FIPS 구성 JVM
- 적절한 TLS/SSL 인증서
- 적절한 정책 파일
- 적절한 구성 매개 변수
FIPS 구성 JVM
일반적으로 애플리케이션은 FIPS 규격 암호화 공급자를 사용하도록 파일을 구성할 java.security
수 있습니다. FIPS 140 준수 구성 방법에 대해서는 JVM 관련 설명서를 참조하세요.
FIPS 구성에 대해 승인된 모듈을 보려면 암호화 모듈 유효성 검사 프로그램에서 유효성이 검사된 모듈을 참조 하세요.
공급업체는 FIPS로 JVM을 구성하기 위해 몇 가지 추가 단계를 밟아야 할 수 있습니다.
적절한 TLS 인증서
FIPS 모드에서 SQL Server에 연결하려면 유효한 TLS/SSL 인증서가 필요합니다. FIPS를 사용하는 JVM(클라이언트 머신)의 Java 키 저장소에 설치하거나 가져옵니다.
Java keyStore에서 TLS 인증서 가져오기
FIPS의 경우 PKCS 또는 공급자별 형식으로 인증서(.cert)를 가져와야 할 가능성이 높습니다. 다음 코드 조각을 사용하여 TLS/SSL 인증서를 가져온 다음 적절한 키 저장소 형식의 작업 디렉터리에 저장합니다. Java 키 저장소의 암호는 TRUST_STORE_PASSWORD입니다.
public void saveGenericKeyStore(
String provider,
String trustStoreType,
String certName,
String certPath
) throws KeyStoreException, CertificateException,
NoSuchAlgorithmException, NoSuchProviderException,
IOException
{
KeyStore ks = KeyStore.getInstance(trustStoreType, provider);
FileOutputStream os = new FileOutputStream("./MyTrustStore_" + trustStoreType);
ks.load(null, null);
ks.setCertificateEntry(certName, getCertificate(certPath));
ks.store(os, TRUST_STORE_PASSWORD.toCharArray());
os.flush();
os.close();
}
private Certificate getCertificate(String pathName)
throws FileNotFoundException, CertificateException
{
FileInputStream fis = new FileInputStream(pathName);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
return cf.generateCertificate(fis);
}
다음 예제에서는 BouncyCastle 공급자를 사용하여 PKCS12 형식의 Azure TLS/SSL 인증서를 가져옵니다. 인증서는 다음 코드 조각을 사용하여 MyTrustStore_PKCS12라는 작업 디렉터리에서 가져옵니다.
saveGenericKeyStore(BCFIPS, PKCS12, "SQLAzure SSL Certificate Name", "SQLAzure.cer");
적절한 정책 파일
일부 FIPS 공급자의 경우 무제한 정책 jar이 필요합니다. 이와 같은 상황에서는 Sun/Oracle의 경우 JRE 8 또는 JRE 7용 JCE(Java Cryptography Extension) Unlimited Strength Jurisdiction Policy Files를 다운로드합니다.
적절한 구성 매개 변수
FIPS 준수 모드에서 JDBC 드라이버를 실행하려면 연결 속성을 다음 표와 같이 구성합니다.
속성
속성 | Type | 기본값 | 설명 | 참고 |
---|---|---|---|---|
encrypt |
스트링 ["true / false / strict"] | "true" | FIPS가 사용 설정된 JVM 암호화의 경우에는 이 속성이 true여야 합니다. | 기본값이 버전 10.2에서는 기본값이 false에서 true로 변경되었습니다. 버전 11.2.0에서는 형식이 장애 조치에서 String으로 변경되었으며 TDS 8.0 지원을 허용하도록 strict 옵션이 추가되었습니다. |
TrustServerCertificate |
장애 조치 ["true / false"] | "false" | FIPS의 경우 사용자는 인증서 체인의 유효성을 검사해야 하므로 사용자는 이 속성에 "false" 값을 사용해야 합니다. | |
trustStore |
문자열 | null | 인증서를 가져온 Java 키 저장소 파일 경로입니다. 시스템에 인증서를 설치하는 경우 아무 것도 전달할 필요가 없습니다. 드라이버는 cacerts 또는 jssecacerts 파일을 사용합니다. | |
trustStorePassword |
문자열 | null | trustStore 데이터의 무결성을 검사하는 데 사용되는 암호입니다. | |
fips |
장애 조치 ["true / false"] | "false" | FIPS가 사용 설정된 JVM의 경우에는 이 속성이 true여야 합니다. | 6.1.4에 추가됨(안정적 릴리스는 6.2.2) |
fipsProvider |
문자열 | null | JVM에서 구성된 FIPS 공급자입니다. 예를 들어 BCFIPS 또는 SunPKCS11-NSS | 6.1.2에 추가되었고(안정적 릴리스는 6.2.2) 6.4.0에서는 사용되지 않습니다. 자세한 내용은 여기를 참조하세요. |
trustStoreType |
문자열 | JKS | FIPS 모드 집합의 경우 신뢰 저장소 유형은 PKCS12 또는 FIPS 공급자가 정의한 형식입니다. | 6.1.2에 추가됨(안정적 릴리스는 6.2.2) |