'쓸만한지식'에 해당되는 글 81건

  1. 2014.02.14 java.lang.NoSuchMethodError: javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext; 에러날때
  2. 2013.06.20 Eclipse juno 툴바에 안드로이드 관련 버튼이 없을때 2
  3. 2013.06.20 Windows 8 에서 Android SDK Manager 및 AVD Manager 가 실행이 안될때 5
  4. 2013.04.25 apt-get 으로 Ubuntu 12.04에서 Oracle JDK 설치 & Tomcat 설치 2
  5. 2013.04.23 Mysql ssl 설정 & JDBC 로 SSL 통신 5

java.lang.NoSuchMethodError: javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext; 에러날때



java.lang.NoSuchMethodError: javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext; 


요 에러는 expression language 버전이 맞지 않아서 나는 에러다.



주로 쾌적한 최신의 개발환경에서 개발하다 후진 운영서버에 배포를 했을때 난다.



나의 경우는 운영서버가 JEUS 5.0 에다 무려 JDK는 1.4 를 쓰고 있는, 요즘 시대에 매우 열악한 환경이다.


개발할때 JEUS 로 해볼려고 했으나 도저히 후지고 느리고 답답하고 짜증스럽기 그지 없어서 개발용 WAS는 JETTY 를 쓰면서 개발했다.



살살 개발하고 있는 도중, 잘 돌아가겠지(?) 하는 약간의 걱정으로 개발하던걸 JEUS 에서 살짝 돌려 보았다.



에러 없이 뽕 뜰것을 기대했는데 안타깝게도 에러가 났다.




망할 에러를 해결하기 위해 약간의 시간을 들여 검색후 해결은 했다~




해결방법


만약 후로젝트 라이브러리 중에 jstl-1.2.jar 가 있다면 요것의 버전을 jstl-1.1.2.jar 로 낮추고 추가로 standard-1.1.2.jar 파일을 추가해 주면 된다.





※ Maven Repository

<dependency>
    <groupid>javax.servlet</groupid>
    <artifactid>jstl</artifactid>
    <version>1.1.2</version>
</dependency>
<dependency>
    <groupid>taglibs</groupid>
    <artifactid>standard</artifactid>
    <version>1.1.2</version>
</dependency>


※ Library Downlad

jstl-1.1.2.jar

standard-1.1.2.jar


Eclipse juno 툴바에 안드로이드 관련 버튼이 없을때



뭐 딱히 고 버튼이 없어도 상관은 없지만~ 있다가 없으니까 왠지 쫌 깨름찍한 마음에..~


쥬노를 따운받아서 ADT 훌러그인을 설치하고 이클립스를 폿 다시 실행시켜 보니 요 두개 버튼이 보이질 않았다.






굳이 내는 꼭 보이고 싶다고 한다면 요렇게 하면 된다.


Window - Customize Perspective... 요기에 들어가서 Tool Bar Visibility 에 있는 Android SDK and AVD Manager 를 폿 체크해 주면 된다.


Windows 8 에서 Android SDK Manager 및 AVD Manager 가 실행이 안될때



windows8에서 추가로 platform을 받을려고 SDK Manager 를 실행시켜 보니 커맨드창만 잠깐 떳다가 뽓 꺼지고 SDK Manager 가 실행이 않됬다.



그래서 이것저것 찾아보니 해결방법이 있었다.



일단 실행이 안되는 원인은 꾸리한 java 가 실행이 되서 그렇다.



커맨드 창을 열어서 where java 라고 입력해 보면 java 라고 쳤을때 실행될 java 파일이 어딧는지 찾아주는데 느닷없이 내가 설치한 jdk 에 있는 java.exe가 실행되는것이 아니라 C:\Windows\System32\java.exe 요게 실행이 된다.



그래서 SDK Manager 가 실행이 쪽바로 안되는 것이다.




요것을 해결할려면


시스템속성 - 환경변수 - 시스템변수 중 Path 변수의 제일앞에 JDK 설치경로/bin 디렉토리를 PATH 에다 추가시켜 주면 된다.


기존 PATH 변수를 보면 %SystemRoot%\system32 요런게 있을껀데 요거보다 앞에 추가시켜 줘야 JDK 에 있는 java.exe가 실행이 되서 SDK Manager가 쪽바로 실행된다.













요렇게 바꿔준뒤 커맨드 창을 다시 껏다 키고 where java 라고 입력해 보면 설치된 jdk 에 포함된 java.exe 가 먼저 실행되게 설정된다.





고러면 다시 SDK Manager 를 실행해 보면 잘된다~ AVD Manager 도 실행이 잘된다.



※ 요래 이것저것 설정하기 귀찮으면 그냥 android sdk 설치디렉토리/tools/android.bat 파일을 실행해도 SDK Manager 는 실행이 잘된다~





apt-get 으로 Ubuntu 12.04에서 Oracle JDK 설치 & Tomcat 설치



저번에는 jdk 랑 tomcat을 그냥 쌩으로 다운로드 받아서 설치하는 방법 에 대해서 글을 작성했었는데


요번에는 apt-get 으로 쉽고 간지나게 설치해 보자.


아무것도 안깔려 있다고 가정하고 먼저 Oracle JDK 를 설치해 보자.



먼저 apt-add-repository 명령으로 Oracle JDK 가 있는 repository를 추가시켜 줘야 되는데, 만약 이 명령어를 입력했는데 요런 명령어가 없다고 그라면 요렇게 해서 설치를 할 수 있다.

sudo apt-get install python-software-properties



apt-add-repository 가 설치됬다면 요렇게 해서 Oracle JDK 를 설치한다. JDK를 설치하면서 뭐 물어보는데 대충 예예~ 하고 넘어가면 된다.

sudo apt-add-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-jdk7-installer



쪽바로 설치됬는지 확인할려면

java -version






JDK를 설치했으니 톰캣을 설치해보자.

sudo apt-get install tomcat6


요렇게 설치를 하면 설치가 완료되자 마자 톰캣 서비스를 실행시켜주는데 


 * no JDK found - please set JAVA_HOME


요런 메시지가 뜨면서 톰캣이 실행이 되지 않는다.




/etc/profile, /etc/environment 요런데다 JAVA_HOME을 설정해 주라고 해서 해봤는데 잘 안됐다.


고럴땐 /etc/default/tomcat6 파일을 vi 편집기로 열어 JAVA_HOME=/usr/lib/jvm/java-7-oracle 요렇게 JAVA_HOME을 설정해 주니 잘됬다.

sudo vi /etc/default/tomcat6

# 대충 위쪽 부분에 JAVA_HOME=/usr/lib/jvm/java-7-oracle 요거 추가



다시 톰캣 스타트

sudo service tomcat6 start



웹브라우져로 확인



※ 각종 파일 위치들

server.xml : /etc/tomcat6/server.xml

로그파일 : /var/log/tomcat6/catalina.out,  /var/log/tomcat6/localhost.xxxx-xx-xx.log



Mysql ssl 설정 & JDBC 로 SSL 통신




그냥 쌩으로 쿼리 날리고 데이터 받으면 되지 왜 귀찮게시리 SSL 로 통신을 해야 되느냐..?


바로 요 이유 때문이다.


TCP 패킷 캡쳐프로그램으로 보면 select * from user where user='root' 라는 쿼리문장이 고대로 노출이 된다. 

요렇게 되면 로그인할때 비밀번호가 들어간 쿼리도 노출이 된다는 뜻이다.


윈도우용 TCP 패킷 캡쳐 프로그램 : SmartSniff

32bit용 다운로드


64bit용 다운로드





자~~ 요것을 해결해 보자!


먼저 mysql 서버쪽에서 ssl 접속을 허용하도록 설정을 해주야 된다.


그러기 위해선 인증서를 맹글어야 된다. 인증서에 대해선 자세히 나도 잘 모르기 때문에 대충~~ 개인키랑 공개키를 맨들어야 한다쯤으로 이해하고 넘어갔다.



아무튼 인증서를 맹글기 위해서는 openssl 이라는 프로그램을 설치해야 한다.


다 설치가 됬으면 커맨드 창을 열어 명령어를 입력해 인증서를 맹글면 된다.


개인키 맹글기

openssl genrsa -out key.pem 2048


공개키 맹글기

openssl req -new -x509 -key key.pem -out cert.pem -days 0


요렇게 하면 개인키 파일(key.pem)이랑 공개키 파일(cert.pem) 두개가 생성된다.


요 파일을 리눅스 서버일 경우 my.cnf 파일을, 윈도우서버에 깔린 mysql 일 경우 my.ini 파일을 편집해 설정을 추가해 주면 된다.


※ 우분투일 경우 일반적인 경로는 /etc/mysql/my.cnf

※ 윈도우일 경우 일반적인 경로는 C:\Program Files\MySQL\MySQL Server\my.ini


설정파일을 보면 [mysqld] 요런 섹션이 있을껀데 요 섹션 안에다 위에서 만든 인증서 파일을에 대해 아래와 같이 설정을 추가해 준다.


※ 위에서 생성한 key.pem 파일과 cert.pem 파일은 C 드라이브 cert 폴더에 있다고 가정.

ssl-ca=C:\\cert\\cert.pem
ssl-cert=C:\\cert\\cert.pem
ssl-key=C:\\cert\\key.pem


요런 설정을 해주고 mysql 서버를 리스탓트 하면 mysql을 SSL 로 접속할 수 있게 된다.


확실하게 적용이 쪽바로 됐나 확인 할려면 아무툴이나 mysql 로 접속해서 요런 쿼리를 날려보면 간단하게 확인할 수 있다.

show variables like '%ssl%';



죠 두항목이 YES 이면 설정이 쪽바로 적용된 것이다.





※ 인증서를 가지고 SSL 로 접속할려면 요런 옵션으로 접속하면 된다.

mysql -u root -p --ssl --ssl-ca=c:\cert\cert.pem



※ Toad for MySQL 에서 SSL 로 접속하기



커넥션 타입중에 보면 SSL 이라고 있는데 고걸 선택하고 계정정보를 입력하면된다, 인증서 파일을 선택하라고 하는데 굳이 선택하지 않아도 접속이 잘된다.





자~~~ 이제 마지막으로 JDBC로 SSL 접속을 하는 방법을 알아보자.


검색을 해 보니 이것저것 나오던데 방법이 쓸데없이 쫌 복잡해서~~~ 


간단 of 간단한 방법을 재수좋게 검색을 해서 찾아냈다. 아래와 같은 코드를 쓰면 된다.




키뽀인트는 JDBC URL 에 verifyServerCertificate=false 를 추가해 주는것이다. 


저 옵션을 추가해주지 않으면 keytool 로 자바용 keystore 도 맹글어야 하고, 맹글어진 keystore를 시스템 프로퍼티에 추가해 줘야 되는 귀찮은걸 해야 한다.


저 옵션은 말그대로 서버 인증서를 verify 하지 않겠다는 옵션이다.


그리고 당연히 useSSL=true 옵션을 줘야 SSL 로 접속을 한다.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Test {
	public static void main(String[] args) throws SQLException {
		Connection con = null;
		try {
			String url = "jdbc:mysql://127.0.0.1:3306/mysql?useSSL=true&verifyServerCertificate=false";

			Class.forName("com.mysql.jdbc.Driver");
			con = DriverManager.getConnection(url, "user_name", "user_password");

			Statement st = con.createStatement();
			ResultSet rs = st.executeQuery("select * from user where user='root'");

			while (rs.next()) {
				System.out.println(String.format("%-20s %-20s", rs.getString(1), rs.getString(2)));
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			if (con != null)
				con.close();
		}
	}
}


요걸 실행시키고 TCP 패킷 캡쳐 프로그램으로 보면 요렇게 암호화가 잘되 있다~~



결론 : 

MySQL 서버에 SSL 설정만 해주고, 기존 프로젝트 JDBC URL 에 useSSL=true&verifyServerCertificate=false 요것만 추가해 주면 간단하게 SSL 로 암호화 할 수 있다.

MySQL 서버에 접속하던 다른 서비스가 있어도 다른 서비스에는 영향이 없다.


prev 1 ··· 3 4 5 6 7 8 9 ··· 17 next