요즘 공개된 자바 애플릿 코드 중에 하나가 재밋는 것이 있어서 이걸 사이트에 적용해보는 것을 시도 중이다.
첨에는 *.java파일을 작동시키니 먹통..
고수님들께 물어봤더니 묵묵부답..
여기 저기 구글링… 어찌…어찌해보니
“컴파일을 통해 *.class파일로 변환해야 한다”는 걸 알게 되었다.
당장에 오라클로 달려가서 JDK를 다운받아 설치하고
커맨드 창에서 javac *.java 라고 치니 *.class파일을 얻을수있었다.
이번엔 run *.class 라고치니 화면에 내가 기대하던 문구가 뜬다.
당장에 그걸(*class 파일) 사이트에 올렸다.
하지만 이번엔 내가 바라던 문구는 나타나지 않는다.
뭘까? 또다시 구글링…
*.class파일을 *.jar파일로 압축해야한단다.
이번엔 이클립스를 이용해서 컴파일부터 *.jar파일로 압축까지 원클릭으로 실행..
내가 바라던 컴파일문구는 나타나지만 뭔지 모르는 오류메시지가 있다.
또 다시 구글링….인증서가 필요하단다.
인증서를 구하려니 yessign은 trial 버전이라도 사업자 등록증 필요하고
thawte.com에서는 (SSL 인증서만 trial 버전을 발행) 돈(거금 300불)을 내야하고 ……
일단은 인증서 없이 jar파일을 만들어보기로 결정
여기 저기 뒤적뒤적…한 가지 단서를 찾았다.
C:\Program Files\Java\jre1.8.0_45\lib\security
여기 있는 java.policy 파일에 아래코드를 넣는 것이다.
permission java.io.FilePermission “<>”, “execute”;
permission java.security.AllPermission;
permission java.lang.RuntimePermission “stopThread”;
( 하지만 이상하게도 첨에는 구글 크롬은 정상작동하는데 파이어폭스는 말을 잘 듣지 않는다.
나중에 알게된 사실은 브라우져의 캐시파일을 지우지않아서 생긴일이었다. ㅋ)
java.policy는 파일명에서도 짐작할 수 있듯이 클라이언트 측의 보안 정책을 결정하는 역할을 한다고 되어있다..
하지만 코드를 대략봐도 저건 완전 무장해제하자는 내용인데..
테스트 중인 상태에서라도 다른 사이트를 접속할 때 혹시 내 컴의 보안이 완전무장해제 되는일은 없어야겠기에
꼭 필요한 내용 만을 허락하자는 의미에서 .. 저내용을 대체하면서 불필요한 내용을 포함하지않는 그런 코드를 찾아야한다.
‘java security policy’라는 검색어를 이용해 여기 저기 뒤져보니 저 내용은
=============================================================================================
permission java.util.PropertyPermission “*”, “read, write”;
permission java.lang.RuntimePermission “getProtectionDomain”;
permission java.io.FilePermission “<>”, “read, write, delete, execute”;
permission java.io.SerializablePermission “enableSubstitution”;
permission java.lang.reflect.ReflectPermission “suppressAccessChecks”;
permission java.lang.RuntimePermission “accessClassInPackage.org.apache.*”;
permission java.lang.RuntimePermission “accessClassInPackage.sun.*”;
permission java.lang.RuntimePermission “accessDeclaredMembers”;
permission java.lang.RuntimePermission “createClassLoader”;
permission java.lang.RuntimePermission “getClassLoader”;
permission java.lang.RuntimePermission “loadLibrary.libtcnative-1”;
permission java.lang.RuntimePermission “loadLibrary.management”;
permission java.lang.RuntimePermission “loadLibrary.net”;
permission java.lang.RuntimePermission “loadLibrary.tcnative-1”;
permission java.lang.RuntimePermission “modifyThread”;
permission java.lang.RuntimePermission “modifyThreadGroup”;
permission java.lang.RuntimePermission “org.jboss.security.SecurityAssociation.setServer”;
permission java.lang.RuntimePermission “setContextClassLoader”;
permission java.lang.RuntimePermission “createSecurityManager”;
permission java.lang.RuntimePermission “setFactory”;
permission java.lang.RuntimePermission “setIO”;
permission java.lang.RuntimePermission “shutdownHooks”;
permission java.net.NetPermission “specifyStreamHandler”;
permission java.net.SocketPermission “*”, “listen, resolve, connect, accept”;
permission java.security.SecurityPermission “createAccessControlContext”;
permission java.security.SecurityPermission “getDomainCombiner”;
permission java.security.SecurityPermission “getPolicy”;
permission java.security.SecurityPermission “getProperty.*”;
permission java.security.SecurityPermission “insertProvider.SUN”;
permission java.security.SecurityPermission “putProviderProperty.SUN”;
permission java.security.SecurityPermission “setPolicy”;
permission java.security.SecurityPermission “setProperty.package.access”;
permission java.security.SecurityPermission “setProperty.package.definition”;
permission net.jini.security.GrantPermission “java.security.AllPermission”;
permission com.sun.jini.discovery.internal.EndpointInternalsPermission “set”;
permission com.sun.jini.discovery.internal.EndpointInternalsPermission “get”;
permission java.util.logging.LoggingPermission “control”;
permission net.jini.discovery.DiscoveryPermission “*”;
permission javax.security.auth.AuthPermission “refreshLoginConfiguration”;
permission javax.security.auth.AuthPermission “setLoginConfiguration”;
permission javax.management.MBeanServerPermission “createMBeanServer”;
permission javax.management.MBeanServerPermission “findMBeanServer”;
permission javax.management.MBeanServerPermission “newMBeanServer”;
permission javax.management.MBeanTrustPermission “register”;
permission javax.management.MBeanPermission “*”, “*”;
permission java.lang.RuntimePermission “org.jboss.security.SecurityAssociation.setRunAsRole”;
permission javax.security.auth.AuthPermission “doAsPrivileged”;
permission java.lang.RuntimePermission “org.jboss.security.SecurityAssociation.getPrincipalInfo”;
permission javax.security.auth.AuthPermission “createLoginContext.HsqlDbRealm”;
permission javax.security.auth.AuthPermission “getLoginConfiguration”;
permission java.lang.RuntimePermission “org.jboss.security.SecurityAssociation.accessContextInfo”;
permission javax.security.auth.PrivateCredentialPermission “javax.resource.spi.security.PasswordCredential * \”*\””, “read”;
permission javax.security.auth.AuthPermission “*”;
permission java.lang.RuntimePermission “org.jboss.security.SecurityAssociation.setPrincipalInfo”;
permission net.jini.security.GrantPermission “java.security.AllPermission \”\”, \”\””;
permission net.jini.export.ExportPermission “exportRemoteInterface.com.sun.jini.reggie.Registrar”;
permission com.sun.jini.thread.ThreadPoolPermission “getSystemThreadPool”;
permission javax.management.MBeanServerPermission “releaseMBeanServer”;
permission java.lang.RuntimePermission “exitVM”;
==============================================================================================
이런 걸로 대체 될 수 있단다.
이제 저걸 하나씩 지워가면서 테스트….
결국
permission java.net.SocketPermission “*”, “listen, resolve, connect, accept”;
이것 하나만 남았다.
자! 이젠 인증서 테스트에 도전해 볼 차례다.
소셜댓글