~JSUG勉強会〜Spring One 2GX 2015 報告会~
Springを利用したアプリケーションに対する
テスト/セキュリティ対策の最新動向
新日鉄住金ソリューションズ株式会社
梅谷 光、井岡 正和
Copyright (C) 201...
自己紹介
梅谷 光
Springベースの社内標準FW開発・保守リーダー
 Spring Framework × MyBatis
SpringOneにここ数年参加
FWの提供・サポートだけでなく、最近は社内向けの教
育・学習なども実施
...
アジェンダ
今年のSpringOne全体の所感
RESTful APIのSecurity
Spring Framework 4.2でのテストの強化ポ
イント
Copyright (C) 2015 NS Solutions Corporat...
今年のSpringOne全体の所感
Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 4
今年の傾向
今年のテーマ
「GET CLOUD NATIVE」
傾向
「Spring Boot」、「Microservice」、
「Reactive Programing」に関する
セッションが多く、また人気だった。
Springのサ...
Springの方向性
Spring Framework自体の利便性は地道に向上
 基本的なMVCアプリケーション向け機能は出そろった印象。
 細かな便利機能は(多くはアノテーションの形で)随時強化され
ていくだろう。Springのサブプロ...
RESTful APIのSecurity
Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 7
情報元となるSpringOneのセッション
The State o...
Spring Securityの概要
RESTful APIの認証
Spring Securityによる認可
Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved...
Spring Securityの概要
Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 9
Spring Securityの概要
アプリケーションに対して主に「認証」、「認可」の機
能を提供
例えば、
ID、Passwordによるログイン
ユーザの権限によるアクセス制御
Spring Security 3.2から、XMLでの...
RESTful APIの認証
Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 11
RESTful APIの認証
RESTful APIの要件: ステートレス
→ Http認証
Basic認証
ユーザ名、パスワードを結合してBase64でエンコード
Digest認証
ユーザ名、パスワードをMD5でハッシュ化
Bas...
【デモ】 MD5クラック
使用ソフト
hashcat
 http://hashcat.net/wiki/doku.php?id=hashcat
辞書を基にMD5をクラック
恐らく、他の方式も使える。
Copyright (C) 201...
Transport Layer Security (TLS)
データを暗号化して送受信するプロトコル
機密性
完全性
Copyright (C) 2015 NS Solutions Corporation, All Rights Rese...
“On our production frontend machines,
SSL/TLS accounts for less than 1% of
the CPU load, less than 10 KB of
memory per con...
“We have found that modern software-
based TLS implementations running on
commodity CPUs are fast enough to
handle heavy H...
Spring Securityによる認可
Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 17
基本的な認可設定
Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 18
http
.authorizeRequests()
.antMatchers("/pub...
メソッドに対する認可設定
Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 19
@PreAuthorize("#message?.from?.id == pri...
メソッドに対する認可設定
Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 20
@PreAuthorize("hasPermission(#message, '...
[参考] PermissionEvaluator
Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 21
public interface PermissionE...
Spring Framework 4.2でのテストの
強化ポイント
Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 22
情報元となるSpringOneのセッシ...
Spring Framework 4.2の新機能のうちテストに有
用なもの
1. @AliasFor
2. 組み込みDB名の自動設定
3. SpringClassRule / SpringMethodRule
Spring Security...
Spring Framework 4.2の新機能の
うちテストに有用なもの
Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 24
Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 25
@ContextConfiguration
@TestPropertySource
@Transactio...
1. @AliasFor
@AliasForを使うと、どのアノテーションに値を設定
するかを宣言できる。
Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 26...
Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 27
• 同じ名前の組み込みDBを起動
できない。。。
• 複数の組み込みDBを起動した
ときの名前管理が大変。...
組み込みDBにユニークな名前を自動設定できるよう
になった。
<jdbc:embedded-database id="dataSource" generate-name="true">
<jdbc:script location="class...
Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 29
• @RunWithに
SpringJUnit4ClassRunnerを
指定したら、@Theoryや
@...
3. SpringClassRule / SpringMethodRule
Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 30
@RunWith(Theori...
Spring Security利用アプリケーション
のテスト
Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 31
テスト用アノテーション
@WithSecurityContextTestExecutionListener
 下記のアノテーションを検出するために必要
@WithMockUser
 モックユーザでログインしてテストを実行
 ユーザ名、...
apply(springSecurity())
Spring MVC TestでSpring Securityを利用
Spring MVCテストとSpring Securityの連携
Copyright (C) 2015 NS Soluti...
(おまけ) JUnit Lambda
JUnitの最新プロジェクト
Java 8に対応
恐らく、JUnit 5になる。
Pivotalが出資しているらしく、今後のSpringとの連携・親
和性に関して期待が持てる。
 資金調達のクラウ...
Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 35
・ NS Solutions、NS(ロゴ)、NSSOLは、新日鉄住金ソリューションズ株式会社の登録商標です...
Upcoming SlideShare
Loading in...5
×

Springを利用したアプリケーションに対する テスト/セキュリティ対策の最新動向(2015)

544
-1

Published on

~JSUG勉強会〜Spring One 2GX 2015 報告会資料

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
544
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Springを利用したアプリケーションに対する テスト/セキュリティ対策の最新動向(2015)

  1. 1. ~JSUG勉強会〜Spring One 2GX 2015 報告会~ Springを利用したアプリケーションに対する テスト/セキュリティ対策の最新動向 新日鉄住金ソリューションズ株式会社 梅谷 光、井岡 正和 Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 1 発表日 : 2015/12/03
  2. 2. 自己紹介 梅谷 光 Springベースの社内標準FW開発・保守リーダー  Spring Framework × MyBatis SpringOneにここ数年参加 FWの提供・サポートだけでなく、最近は社内向けの教 育・学習なども実施 井岡 正和 Springベースの社内標準FW開発・保守担当 SpringOneの参加は2回目 プライベートでは、iOSやAndroidのアプリを開発 Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 2
  3. 3. アジェンダ 今年のSpringOne全体の所感 RESTful APIのSecurity Spring Framework 4.2でのテストの強化ポ イント Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 3
  4. 4. 今年のSpringOne全体の所感 Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 4
  5. 5. 今年の傾向 今年のテーマ 「GET CLOUD NATIVE」 傾向 「Spring Boot」、「Microservice」、 「Reactive Programing」に関する セッションが多く、また人気だった。 Springのサブプロジェクトでは、「Spring Cloud」に力を入 れている印象を受けた。 去年は「Spring Bootいいでしょ!」一色だったが、今年は 「Spring Boot」に親和性の高い「Microservice」をいか にして構築するのか、という段階にきている。 Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 5 GET CLOUD NATIVE SPRINGONE2GX WASHINGTON, DC #S2GX こんな フラッグが 至る所に
  6. 6. Springの方向性 Spring Framework自体の利便性は地道に向上  基本的なMVCアプリケーション向け機能は出そろった印象。  細かな便利機能は(多くはアノテーションの形で)随時強化され ていくだろう。Springのサブプロジェクトも同様。  本プレゼンでは、この領域の「セキュリティ、テスト」に関するトピックスを ご紹介します。 Spring Bootは発展し続けていく  特に、Cloud上で動作するアプリケーションを意識してSpring Boot用のモジュールが整備されてきている。 (参照 http://start.spring.io/)  Spring以外の他のOSS (例: NETFLIX OSS)とも連携が進ん できている。  日本でもWeb系のアプリケーション/サービスへの適用は増 えていくと予想される。 Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 6
  7. 7. RESTful APIのSecurity Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 7 情報元となるSpringOneのセッション The State of Securing RESTful APIs with Spring
  8. 8. Spring Securityの概要 RESTful APIの認証 Spring Securityによる認可 Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 8
  9. 9. Spring Securityの概要 Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 9
  10. 10. Spring Securityの概要 アプリケーションに対して主に「認証」、「認可」の機 能を提供 例えば、 ID、Passwordによるログイン ユーザの権限によるアクセス制御 Spring Security 3.2から、XMLでの設定だけでなく、 Java Configでの設定もできるようになった。 Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 10
  11. 11. RESTful APIの認証 Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 11
  12. 12. RESTful APIの認証 RESTful APIの要件: ステートレス → Http認証 Basic認証 ユーザ名、パスワードを結合してBase64でエンコード Digest認証 ユーザ名、パスワードをMD5でハッシュ化 Basic認証より強固だが。。。 Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 12
  13. 13. 【デモ】 MD5クラック 使用ソフト hashcat  http://hashcat.net/wiki/doku.php?id=hashcat 辞書を基にMD5をクラック 恐らく、他の方式も使える。 Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 13
  14. 14. Transport Layer Security (TLS) データを暗号化して送受信するプロトコル 機密性 完全性 Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 14 • オーバーヘッドが大 きいのでは?
  15. 15. “On our production frontend machines, SSL/TLS accounts for less than 1% of the CPU load, less than 10 KB of memory per connection and less than 2% of network overhead. - Adam Langley, Google Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 15 出典: https://www.imperialviolet.org/2010/06/25/overclocking-ssl.html SSL/TLSの CPU負荷は1%未満
  16. 16. “We have found that modern software- based TLS implementations running on commodity CPUs are fast enough to handle heavy HTTPS traffic load without needing to resort to dedicated cryptographic hardware. - Doug Beaver, Facebook Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 16 出典: http://lists.w3.org/Archives/Public/ietf-http-wg/2012JulSep/0251.html CPUはHTTPSトラフィックに 十分耐えれるほど速い
  17. 17. Spring Securityによる認可 Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 17
  18. 18. 基本的な認可設定 Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 18 http .authorizeRequests() .antMatchers("/public/**").permitAll() .antMatchers("/admin/**").hasRole("ADMIN") .anyRequest().authenticated() /public/以下: 誰でもアクセス可 /admin/以下: ADMINのみアクセス可 その他: 認証済ユーザがアクセス可
  19. 19. メソッドに対する認可設定 Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 19 @PreAuthorize("#message?.from?.id == principal.id") <S extends Message> S save(Message message); 引数messageのfromのidが、 認証済ユーザのIDと等しい場合 に認可 @PostAuthorize("returnObject?.to?.id == principal.id") Message findOne(Long id); 返り値のtoのidが、認証済ユーザ のIDと等しい場合に認可
  20. 20. メソッドに対する認可設定 Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 20 @PreAuthorize("hasPermission(#message, 'write')") <S extends Message> S save(Message message); 引数messageに対する'write' 権限を持つ場合に認可 @PostAuthorize("hasPermission(returnObject, 'read')") Message findOne(Long id); 返り値に対する'read'権限を 持つ場合に認可
  21. 21. [参考] PermissionEvaluator Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 21 public interface PermissionEvaluator extends AopInfrastructureBean { boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission); boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission); } org.springframework.security.access.PermissionEvaluator
  22. 22. Spring Framework 4.2でのテストの 強化ポイント Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 22 情報元となるSpringOneのセッション Get the Most out of Testing with Spring 4.2
  23. 23. Spring Framework 4.2の新機能のうちテストに有 用なもの 1. @AliasFor 2. 組み込みDB名の自動設定 3. SpringClassRule / SpringMethodRule Spring Security利用アプリケーションのテスト Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 23
  24. 24. Spring Framework 4.2の新機能の うちテストに有用なもの Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 24
  25. 25. Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 25 @ContextConfiguration @TestPropertySource @Transactional public @interface TransactionalTest { String[] locations() default {}; } locations locations どっちの locations? 1. @AliasFor
  26. 26. 1. @AliasFor @AliasForを使うと、どのアノテーションに値を設定 するかを宣言できる。 Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 26 @ContextConfiguration @TestPropertySource @Transactional public @interface TransactionalTest { @AliasFor(annotation = ContextConfiguration.class, attribute = "locations") String[] xmlFiles() default {}; @AliasFor(annotation = TestPropertySource.class, attribute = "locations") String[] propFiles() default {}; } locations locations
  27. 27. Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 27 • 同じ名前の組み込みDBを起動 できない。。。 • 複数の組み込みDBを起動した ときの名前管理が大変。。。 2. 組み込みDB名の自動設定
  28. 28. 組み込みDBにユニークな名前を自動設定できるよう になった。 <jdbc:embedded-database id="dataSource" generate-name="true"> <jdbc:script location="classpath:/schema.sql" /> <jdbc:script location="classpath:/user_data.sql" /> </jdbc:embedded-database> XML 2. 組み込みDB名の自動設定 Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 28 @Bean public DataSource dataSource() { return new EmbeddedDatabaseBuilder() .generateUniqueName(true) .addScript("schema.sql") .addScript("user_data.sql") .build(); } Java Config
  29. 29. Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 29 • @RunWithに SpringJUnit4ClassRunnerを 指定したら、@Theoryや @Parametersが使えない。。。 3. SpringClassRule / SpringMethodRule
  30. 30. 3. SpringClassRule / SpringMethodRule Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 30 @RunWith(Theories.class) @ContextConfiguration public class TheorySpringRuleTests { @ClassRule public static final SpringClassRule SPRING_CLASS_RULE = new SpringClassRule(); @Rule public final SpringMethodRule springMethodRule = new SpringMethodRule(); @Theory public void theoryTest() { ... } SpringJUnit4ClassRunnerが不要に!
  31. 31. Spring Security利用アプリケーション のテスト Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 31
  32. 32. テスト用アノテーション @WithSecurityContextTestExecutionListener  下記のアノテーションを検出するために必要 @WithMockUser  モックユーザでログインしてテストを実行  ユーザ名、ロール等を指定可能 @WithUserDetails  UserDetailsをモックにしてテストを実行  ユーザ名を指定可能 @WithSecurityContext  SecurityContextをモックにしてテストを実行  WithSecurityContextFactory<WithMockCustomUser>を実装する ことで自由にSecurityContextを指定可能 Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 32
  33. 33. apply(springSecurity()) Spring MVC TestでSpring Securityを利用 Spring MVCテストとSpring Securityの連携 Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 33 mvc = MockMvcBuilders .webAppContextSetup(context) .apply(springSecurity()) .build(); mvc.perform(get("/admin") .with(user("admin").password("pass").roles("USER", "ADMIN"))); with(user(...)) アクセスに指定したユーザを使用
  34. 34. (おまけ) JUnit Lambda JUnitの最新プロジェクト Java 8に対応 恐らく、JUnit 5になる。 Pivotalが出資しているらしく、今後のSpringとの連携・親 和性に関して期待が持てる。  資金調達のクラウドファウンディングをしていたが、無事資金 が集まった模様。 Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 34
  35. 35. Copyright (C) 2015 NS Solutions Corporation, All Rights Reserved. 35 ・ NS Solutions、NS(ロゴ)、NSSOLは、新日鉄住金ソリューションズ株式会社の登録商標です。 ・ Javaは、米国ORACLE Corp.の登録商標です。 ・ その他本文記載の会社名及び製品名は、それぞれ各社の商標又は登録商標です。
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×