2015년 6월 30일 화요일

Maven 3rd party jar deploy 방법

netty-all-4.0.26.Final.jar 파일을 레파지토리에 디플로이한다고 해보자.

우선 아래와 같은 dummy pom.xml 파일이 있어야 한다.


















같은 디렉토리에 리눅스라면 다음과 같은 내용이 있는 .sh 파일을 만든다.

mvn deploy:deploy-file -DgroupId=io.netty         \
                       -DartifactId=netty-all   \
                       -Dversion=4.0.26.Final          \
                       -Dfile=~/netty-all-4.0.26.Final.jar        \
                       -Dpackaging=jar              \
                       -DrepositoryId=myrepo   \
                       -Durl=scp://myrepo:2222/

윈도우라면 다음과 같은 내용이 있는 .bat 파일을 만든다.

mvn deploy:deploy-file -DgroupId=io.netty -DartifactId=netty-all -Dversion=4.0.26.Final -Dpackaging=jar -Dfile=C:\netty-all-4.0.26.Final.jar -DrepositoryId=myrepo -Durl=scp://myrepo

그 후, sh 또는 bat 파일을 실행하면 파일이 레파지토리에 디플로이된다.

공인인증서 본인식별 java 코드

다음과 같은 코드를 사용하여 vid 값을 계산한 후 인증서에서 읽어온 vid 값과 비교하여 본인 식별을 할 수 있다.

인자 vid, r, hashType은 인증서에서 읽어온 정보이고 idn은 사용자로 부터 입력받은 값이다.


public static boolean checkVidIntegrity(byte[] vid, String idn, byte[] r, String hashType ) {
            try {
                    DERSequence derSequence = new DERSequence(new ASN1Encodable[] {new DERPrintableString(idn.getBytes()), new DERBitString(r)});

                    byte[] content = derSequence.getDEREncoded();

                    MessageDigest md2 = MessageDigest.getInstance(hashType);
                    md2.update(content);
                    byte[] h2 = md2.digest();
                    md2.reset();
                    md2.update(h2);
                    byte[] vidp2 = md2.digest();

                    System.out.println("frodo core: idn = "+ idn);
                    System.out.println("frodo core: compare vid = " + toHex(vid) + " with vid' = " + toHex(vidp2));

                    return Arrays.equals(vid, vidp2);
            } catch (NoSuchAlgorithmException e) {
                    e.printStackTrace();
                    return false;
            }
}

java hex string <-> byte array 변환

1. hex string -> byte array
byte[] bytes = new java.math.BigInteger(hexText, 16).toByteArray();

2. byte array -> hex string
String hexText = new java.math.BigInteger(bytes).toString(16);

아래처럼 머리 아픈 코드를 안봐도 되니 편하네요. thanks BigInteger! ^^

    public static String toHexString(byte buf[]){
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < buf.length; i++) {
            sb.append(Integer.toHexString(0x0100 + (buf[i] & 0x00FF)).substring(1));
        }
        return sb.toString();
    }

참조: http://ecogeo.tistory.com/129


그러나 BigInteger를 사용하여 hex string을 byte array로 변환시킬 경우, 변환된 byte array의 앞 부분에 값이 0인 바이트가 들어갈 수 있다. 이 점 주의해야 한다.

2015년 6월 24일 수요일

공인인증서의 본인 식별확인 방법 (주민등록번호 또는 사업자 등록 번호를 사용한)

- KISA 문서(1.5-Subscriber Identification Based on Virtual ID.pdf )에서 사용하는 기호의 의미는 다음과 같다.

1) h( ) : 해쉬 함수
2) R : 비트열 난수
3) E( ) : 암호화 함수
4) IDN : 식별번호
5) pk : 전자서명검증키
6) sk : 전자서명생성키
7) VID : 가상식별번호
8) EVID : 암호화된 가상식별번호


- VID 생성방법은 다음과 같다.

VID = h(h(IDN, R))



VID를 검증하기 위해서는 인증서에서 받은 VID 값과  서버에서 위의 식대로 VID' 값을 계산하고 결과가 같은 지를 비교하면 된다.

maven 패스워드 암호화 설정.

아래 url에 메이븐 패스워드 암호화 설정 관련 내용이 있다.

http://maven.apache.org/guides/mini/guide-encryption.html


정리하면 다음과 같다.



maven 2.1.0 부터 지원.

먼저 settings-security.xml을 <settingsSecurity></settingsSecurity>
넣어서 .m2 밑에 만든다.

cmd 창에서 다음 명령행을 실행한다.
  > mvn --encrypt-master-password
그러면 마스터 패스워드가 만들어 진다. 만들어진 패스워드를 settings-security.xml 파일의 settingsSecurity 태그에 넣는다.

그리고 다음 명령을 실행한다.
  > mvn --encrypt-password
그러면 암호화된 패스워드가 만들져 진다.

이를 다음과 같이 정리해 볼 수 있다.



(1) mvn --encrypt-master-password <password>
(2) mvn --encrypt-password <password>


- (유저디렉터리)/.m2/settings-security.xml


<settingsSecurity>
<master>(1)</master>
</settingsSecurity>

- (유저디렉터리)/.m2/settings.xml


<settings>
<servers>
<server>
<id>franken</id>
<username>user</username>
<password>(2)</password>
</server>
</servers>
</settings>

위와 같이 xml 파일을 만들면 됨.