스프링

HTTPS  기능 

https 는 http 에 SSL 기능을 추가한것인데 ,  HTTP 는 문자를 가지고 누가 엿보기가 쉽다. 따라서 

통신하는데 해당 문자를 암호화해주며, 암호화 하기위한 키에 대해 안전성을 보장해주는 기술이 들어가있다. 

 

SSL : https://wiki.kldp.org/HOWTO/html/SSL-Certificates-HOWTO/x70.html



출처: http://hamait.tistory.com/330 [HAMA 블로그]

 

1. security-context.xml 파일에 설정 추가 

 

<?xml version="1.0" encoding="UTF-8"?>

<beans:beans xmlns="http://www.springframework.org/schema/security"

  xmlns:beans="http://www.springframework.org/schema/beans"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://www.springframework.org/schema/beans

           http://www.springframework.org/schema/beans/spring-beans-3.2.xsd

           http://www.springframework.org/schema/security

           http://www.springframework.org/schema/security/spring-security-3.2.xsd">

            

	<http auto-config='true'  use-expressions="true">      

		<intercept-url pattern="/login" access="permitAll" />   

		<intercept-url pattern="/resources/**" access="permitAll" />  

		<intercept-url pattern="/**" access="hasRole('ROLE_USER')"  requires-channel="https" />  

		

			<form-login login-page="/login"                    

				default-target-url="/monitering"          

				username-parameter="username"        

				password-parameter="password"          

				authentication-failure-url="/login?error" 

				always-use-default-target='true'           

			/> 

	

		<logout invalidate-session="true"   

     delete-cookies="JSESSIONID,SPRING_SECURITY_REMEMBER_ME_COOKIE"  

logout-success-url="/login?logout" /> 

		<remember-me key="wmoskey" token-validity-seconds="2419200"/> <!-- 4 weeks -->

		<!-- enable csrf protection -->

		<csrf/> 

	</http> 



        <authentication-manager>

		    <authentication-provider user-service-ref="memberService"/> 

	</authentication-manager>	

		

	<beans:bean id="memberService" class="com.starkoff.wmos.auth.MemberService"> 

   	</beans:bean>

   

</beans:beans>



 

 

설명)

requires-channel 를 추가하였다. (한줄이면됨)

설정은 위에 한줄이면 되며 , 톰캣에 HTTPS 설정을 하면되는데 아래 싸이트를 참고하자



 

http://visu4l.tistory.com/419


싸이트 내용중에 참고로 국가코드는 KR 을 넣어주면 되며, 
아래에서 명령에서 trustcscerts  들은 모두 오타이다. trustcacerts 로 바꿔주자.

keytool -import -alias Root -trustcscerts -file TrialRoot.pem -keystore testserver

keytool -import -alias Intermediate -trustcscerts -file TrialIntermediate.pem -keystore testserver

keytool -import -alias testserver -trustcscerts -file cert.pem -keystore testserver


 

 

HTTPS 설정을 위한 다른 방법  ( 번역글 ) 

http://www.javacodegeeks.com/2012/12/securing-your-tomcat-app-with-ssl-and-spring-security.html\

 

 

SSL 과 Spring Security 를 가지고 톰캣 웹어플리케이션을 보호해보자.

 
 
만약 나의 마지막 블로그를 읽었다면 ten things that you can do with Spring Security.  를 알게되었을것이다.
그러나 스프링 시큐리티를 시작하기 전에 해야할것은 웹어플리케이션이 HTTPS 를 지원해야한다는것인데, 그것은
비밀번호같은것을 평문으로 인터넷상에 돌아다니는것을 막아줄것이다.  
 
자 HTTPS 설정을 시작해볼까? 
 

1.Key Store 만들기

 

처음으로 할것은 인증서를 포함한 사설 키스토어 를 만들것것이다.  그것을 생성할 가장 간단한 방법은 

자바 keytool 유틸리티를 사용하는것이다. 자바SDK 설치했으면 /bin 디렉토리안에 있을것이다.



 

keytool -genkey -alias MyKeyAlias -keyalg RSA -keystore /Users/Roger/tmp/roger.keystore

 

위의 명령어에서 

  • -alias 키에 대한 유니크한 ID
  • -keyalg   'RSA',  'DSA' , 'DES' 같은 키를 만들기위한 알고리즘 . 
  • -keystore  키스토어가 저장될 위치 
 
실행하면 다음과 같은것들을 물을것이다. 적절히 써넣자. (대한민국 국가코드는 KR) 



 

Roger$ keytool -genkey -alias MyKeyAlias -keyalg RSA -keystore /Users/Roger/tmp/roger.keystore
Enter keystore password: 
Re-enter new password:
What is your first and last name?
  [Unknown]:  localhost
What is the name of your organizational unit?
  [Unknown]:  MyDepartmentName
What is the name of your organization?
  [Unknown]:  MyCompanyName
What is the name of your City or Locality?
  [Unknown]:  Stafford
What is the name of your State or Province?
  [Unknown]:  NA
What is the two-letter country code for this unit?
  [Unknown]:  UK
Is CN=localhost, OU=MyDepartmentName, O=MyCompanyName, L=Stafford, ST=UK, C=UK correct?
  [no]:  Y

Enter key password for 
     (RETURN if same as keystore password): 


 

2. Tomcat 설정 변경 

톰캣이 SSL connector 를 가져야하는데 /conf 디렉토리에 보통 위치한 server.xml 파일에 아래를 추가한다.



 

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />


…and making it look something like this:
 

<Connector SSLEnabled="true" keystoreFile="/Users/Roger/tmp/roger.keystore" keystorePass="password" port="8443" scheme="https" secure="true" sslProtocol="TLS"/> 

 

위에서 password에 평문을 넣는것은 보안에 좋지 않다. 여러 방법이 있는데 이 포스트를 넘어서는것이다.



3. security-context.xml  설정 

 

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
	xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">
	<http auto-config='true'>
	<intercept-url pattern="/**" requires-channel="https" />
	</http>
	<authentication-manager>
	</authentication-manager>
</beans:beans>

 

requires-channel="https" 를 추가하고 톰캣을 이용해서 시작하면  HTTPS 을 사용해서 접근할수있다. 

https://localhost:8443/my-app 요렇게 입력하면 작동할것이다. 
http://localhost:8080/my-app  요렇게 입력하면 자동으로 https 로 바뀔것이다.


 

 

 

 

 

 

spring

 

about author

PHRASE

Level 60  머나먼나라

두 개의 갈대 다발은 서로 의지해야 설 수 있다. -상응부경전

댓글 ( 4)

댓글 남기기

작성