差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| study:java:sharepointonline:implement2 [2021/07/16 06:38] – [Bouncy Castleライブラリについて] banana | study:java:sharepointonline:implement2 [2025/02/07 05:17] (現在) – banana | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | ====== 3rd Party Security Providerの導入について | + | ====== 3rd Party Security Providerの導入 ====== |
| + | {{keywords> | ||
| [[study: | [[study: | ||
| Bouncy Castleライブラリを導入した理由について、本稿で説明します。\\ | Bouncy Castleライブラリを導入した理由について、本稿で説明します。\\ | ||
| 行 24: | 行 25: | ||
| 一方、Java 7が提供するTLS Versionは、TLS1.0, | 一方、Java 7が提供するTLS Versionは、TLS1.0, | ||
| - | Cipher Suiteについては、下記に示します。 | + | Cipher Suiteについては、以下に示します。 |
| ^Cipher Suites^length^ | ^Cipher Suites^length^ | ||
| ^TLS_EMPTY_RENEGOTIATION_INFO_SCSV^ ^ | ^TLS_EMPTY_RENEGOTIATION_INFO_SCSV^ ^ | ||
| 行 51: | 行 52: | ||
| これが、Bouncy Castleライブラリを導入した理由になります。\\ | これが、Bouncy Castleライブラリを導入した理由になります。\\ | ||
| - | ===== Bouncy Castleライブラリについて ===== | + | {{keywords> |
| + | |||
| + | ====== Bouncy Castleライブラリについて | ||
| Bouncy CastleはJCE(Java Cryptography Enxtension)及びJSSE(Java Security Socket Extension)のProviderです。\\ | Bouncy CastleはJCE(Java Cryptography Enxtension)及びJSSE(Java Security Socket Extension)のProviderです。\\ | ||
| Bouncy CastleがサポートするCipher Suiteについては、ReferenceのBC-FJA-(D)TLSUserGuide-1.0.9.pdfの「Appendix B – Supported Cipher Suites」部分を参照してください。\\ | Bouncy CastleがサポートするCipher Suiteについては、ReferenceのBC-FJA-(D)TLSUserGuide-1.0.9.pdfの「Appendix B – Supported Cipher Suites」部分を参照してください。\\ | ||
| 行 61: | 行 64: | ||
| ^TLS_DHE_RSA_WITH_AES_128_GCM_SHA256^N^ | ^TLS_DHE_RSA_WITH_AES_128_GCM_SHA256^N^ | ||
| - | Bouncy Castle以外にもConscryptというProviderは上記一部分のCipher Suite((TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, | + | Bouncy Castle以外にもConscryptというProviderは上記一部分のCipher Suite((TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, |
| - | ===== Reference ===== | + | |
| + | ====== Mainコード ====== | ||
| + | Bouncy Castleを適用するコードを以下に示します。 | ||
| + | <code java> | ||
| + | private static final String JCE_PROVIDER_BOUNCY_CASTLE_FIPS = " | ||
| + | private static final String BOUNCY_CASTLE_RNG_HYBRID_MODE = " | ||
| + | private static final byte[] NONCE = Strings.toByteArray(" | ||
| + | |||
| + | /** | ||
| + | * setup BouncyCastleFipsProvider | ||
| + | * < | ||
| + | * @throws RuntimeException | ||
| + | */ | ||
| + | public static void setUpProvider() throws RuntimeException { | ||
| + | /* | ||
| + | * Insert BouncyCastle' | ||
| + | */ | ||
| + | BouncyCastleFipsProvider _bcFipsProvider = new BouncyCastleFipsProvider(BOUNCY_CASTLE_RNG_HYBRID_MODE); | ||
| + | |||
| + | //setup default SecureRandom | ||
| + | setDefaultDrbg(); | ||
| + | |||
| + | /* | ||
| + | * We remove BCFIPS provider pessimistically. This is a no-op if provider does not exist. | ||
| + | * This is necessary to always add it to the first position when calling insertProviderAt. | ||
| + | * | ||
| + | * JavaDoc for insertProviderAt states: | ||
| + | | ||
| + | */ | ||
| + | Security.removeProvider(JCE_PROVIDER_BOUNCY_CASTLE_FIPS); | ||
| + | Security.insertProviderAt(_bcFipsProvider, | ||
| + | }// | ||
| + | |||
| + | //set default SecureRandom | ||
| + | private static void setDefaultDrbg() { | ||
| + | EntropySourceProvider _entSource = new BasicEntropySourceProvider(new SecureRandom(), | ||
| + | // | ||
| + | FipsDRBG.Builder _drgbBldr = FipsDRBG.SHA512.fromEntropySource(_entSource) | ||
| + | .setSecurityStrength(256) | ||
| + | .setEntropyBitsRequired(256); | ||
| + | CryptoServicesRegistrar.setSecureRandom(_drgbBldr.build(NONCE, | ||
| + | }// | ||
| + | |||
| + | </ | ||
| + | |||
| + | ★Point1\\ | ||
| + | FIPSモードでProviderを生成します。 | ||
| + | |||
| + | ★Point2\\ | ||
| + | Providerを最優先にするために、位置を指定します。インストール済みの場合は、追加されません。 | ||
| + | |||
| + | ★Point3\\ | ||
| + | デフォルトのSecureRandomアルゴリズムを登録します。\\ | ||
| + | 登録しない場合、SSLContextのインスタンスを生成する際、ものすごい時間が掛かる場合があります。 | ||
| + | |||
| + | |||
| + | |||
| + | ====== Reference | ||
| * [[https:// | * [[https:// | ||
| * [[https:// | * [[https:// | ||
| * [[https:// | * [[https:// | ||
| 100 Examples]] | 100 Examples]] | ||
| + | * [[https:// | ||
| + | ~~DISCUSSION~~ | ||