差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
study:java:sharepointonline:implement2 [2021/07/16 06:15] – [Bouncy Castleライブラリについて] bananastudy:java:sharepointonline:implement2 [2025/02/07 05:17] (現在) banana
行 1: 行 1:
-====== 3rd Party Security Providerの導入について ======+====== 3rd Party Security Providerの導入 ====== 
 +{{keywords>3rd Party Security Providerの導入}}
 [[study:java:sharepointonline:implement1|SAML Security token 取得の実装]]で、Bouncy Castleライブラリがpom.xmlにありました。\\ [[study:java:sharepointonline:implement1|SAML Security token 取得の実装]]で、Bouncy Castleライブラリがpom.xmlにありました。\\
 Bouncy Castleライブラリを導入した理由について、本稿で説明します。\\ Bouncy Castleライブラリを導入した理由について、本稿で説明します。\\
行 24: 行 25:
  
 一方、Java 7が提供するTLS Versionは、TLS1.0, TLS1.1, TLS1.2です。((defaultが1.0なので、CLIENT HELLO送信時TLS1.2を指定する必要があります。))\\ 一方、Java 7が提供するTLS Versionは、TLS1.0, TLS1.1, TLS1.2です。((defaultが1.0なので、CLIENT HELLO送信時TLS1.2を指定する必要があります。))\\
-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>Java add Bouncy Castle Provider, Sharepoint online}} 
 + 
 +====== 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」部分を参照してください。\\
-で、Sharepoint online要求Cipher Suite一致するのは、以下通りです。+該当する部分を以下に示します。 
 +^Cipher Suite Name^FIPS((FIPS(Federal Information Processing Standards)は、米国連邦政府コンピューター・システム用に米国連邦情報・技術局 (NIST) によって発行された標準および指針す。 FIPS はセキュリティーや相互運用性など、標準を必要とする差し迫った連邦政府要求があるに、許容可能な業界標準やソリューションが存在しない場合に作成されます。)) mode?^ 
 +^TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384^N^ 
 +^TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256^Y^ 
 +^TLS_DHE_RSA_WITH_AES_256_GCM_SHA384^N^ 
 +^TLS_DHE_RSA_WITH_AES_128_GCM_SHA256^N^
  
 +Bouncy Castle以外にもConscryptというProviderは上記一部分のCipher Suite((TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256))を提供しますが、利用可能なPlatformに制限((Nativeライブラリを利用可能なPlatformは現在次の通りです。Linux x86_64 (64-bit), Mac x86_64 (64-bit), Windows x86 (32-bit), Windows x86_64 (64-bit)。例えば、Linux s390x distributionでは、利用不可なので注意が必要です。))があります。
  
-===== Reference =====+====== Mainコード ====== 
 +Bouncy Castleを適用するコードを以下に示します。 
 +<code java> 
 +  private static final String JCE_PROVIDER_BOUNCY_CASTLE_FIPS = "BCFIPS"; 
 +  private static final String BOUNCY_CASTLE_RNG_HYBRID_MODE = "C:HYBRID;ENABLE{ALL};"; 
 +  private static final byte[] NONCE = Strings.toByteArray("number only used once"); 
 + 
 +  /** 
 +   * setup BouncyCastleFipsProvider 
 +   * <br> 
 +   * @throws RuntimeException 
 +   */ 
 +  public static void setUpProvider() throws RuntimeException { 
 +    /* 
 +     * Insert BouncyCastle's FIPS-compliant encryption and SSL providers. 
 +     */ 
 +    BouncyCastleFipsProvider _bcFipsProvider = new BouncyCastleFipsProvider(BOUNCY_CASTLE_RNG_HYBRID_MODE);  ★Point1 
 + 
 +    //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: 
 +       "A provider cannot be added if it is already installed." 
 +     */ 
 +    Security.removeProvider(JCE_PROVIDER_BOUNCY_CASTLE_FIPS); 
 +    Security.insertProviderAt(_bcFipsProvider, 1);  ★Point2 
 +  }//setUpProvider 
 + 
 +  //set default SecureRandom 
 +  private static void setDefaultDrbg() { 
 +    EntropySourceProvider _entSource = new BasicEntropySourceProvider(new SecureRandom(), true); 
 +    //DRBG(Deterministic Random Bit Generators) 
 +    FipsDRBG.Builder _drgbBldr = FipsDRBG.SHA512.fromEntropySource(_entSource) 
 +        .setSecurityStrength(256) 
 +        .setEntropyBitsRequired(256); 
 +    CryptoServicesRegistrar.setSecureRandom(_drgbBldr.build(NONCE, true));  ★Point3 
 +  }//setDefaultDrbg 
 + 
 +</code> 
 + 
 +★Point1\\ 
 +FIPSモードでProviderを生成します。 
 + 
 +★Point2\\ 
 +Providerを最優先にするために、位置を指定します。インストール済みの場合は、追加されません。 
 + 
 +★Point3\\ 
 +デフォルトのSecureRandomアルゴリズムを登録します。\\ 
 +登録しない場合、SSLContextのインスタンスを生成する際、ものすごい時間が掛かる場合があります。 
 + 
 + 
 + 
 +====== Reference ======
   * [[https://developer.mozilla.org/ja/docs/Glossary/Cipher_suite|Cipher suite (暗号スイート)]]   * [[https://developer.mozilla.org/ja/docs/Glossary/Cipher_suite|Cipher suite (暗号スイート)]]
   * [[https://downloads.bouncycastle.org/fips-java/BC-FJA-(D)TLSUserGuide-1.0.9.pdf|BC-FJA-(D)TLSUserGuide-1.0.9]]   * [[https://downloads.bouncycastle.org/fips-java/BC-FJA-(D)TLSUserGuide-1.0.9.pdf|BC-FJA-(D)TLSUserGuide-1.0.9]]
 +  * [[https://www.bouncycastle.org/fips-java/BCFipsIn100.pdf|The Bouncy Castle FIPS Java API in
 +100 Examples]]
 +  * [[https://github.com/google/conscrypt|Conscrypt - A Java Security Provider]]
  
 +~~DISCUSSION~~
  

QR Code
QR Code study:java:sharepointonline:implement2 (generated for current page)