Skip to main content

SSL 인증서를 발급 받아보자 – CSR 만들기

또 오랜만에 글을 적어보는군요

오늘은 HTTPS 프로토콜을 사용하기 위한 SSL 인증서를 발급 받아 봅시다 generic viagra paypal.

우선은 인증서 업체 혹은 대행업체에 신청하기 전에 진행해야 하는 부분까지만 적어 보겠습니다.

CSR 이라고 하는데요. 인증서에 포함될 인증서의 정보를 입력하여 업체에 인증서를 요청한다는 개념으로 이해 하시면 될 것 같습니다.

CSR은 다음과 같은 절차로 진행됩니다.

(덧붙임) 혹시 서버에 openssl이 없는 경우가 있는데요. 가능하면 패키지로 설치하시거나 그래도 없거나 잘 안되면 www.openssl.org에서 다운로드 받아 압축 해제후 빌드하시면 됩니다. (README를 읽어보시기 바랍니다.)

1. 랜덤키 생성

$ openssl md5 * > random.key

random.key파일이 생성되게 됩니다.

2. 개인키 생성

$ openssl genrsa -rand random.key -out 1024 mykey.pem

추가적으로 -des3 옵션을 사용하면, 인증서에 암호를 사용 할 수 있습니다. 이 비밀번호는 웹서버를 구동할 때 입력해야지만 웹서버를 구동할 수 있습니다. (저는 자동으로 하는거 좋아해서 안넣었습니다.)

3. CSR 생성

$ openssl req -new -key mykey.pem > mykey.csr

여기서는 인증서 정보를 입력하게 됩니다.

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:KR  (나라코드를 입력)
State or Province Name (full name) []:Seoul  (도시 혹은 도를 입력)
Locality Name (eg, city) [Default City]:Gangnam-gu  (구를 입력)
Organization Name (eg, company) [Default Company Ltd]:Jusun Laboratory (회사명)
Organizational Unit Name (eg, section) []:R&D Division (부서)
Common Name (eg, your name or your server's hostname) []:www.jusun.org (회사 도메인)
Email Address []:my@email.com (이메일)

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

추가적으로 입력해야 하는 부분들은 그냥 넘어가도 되덥니다.

그럼 생성된 mykey.csr 을 cat mykey.csr 하여 살펴보면 다음과 같이 나타납니다.

-----BEGIN CERTIFICATE REQUEST-----
MIIB2jCCAUMCAQAwgZkxCzAJBgNVBAYTAktSMQ4wDAYDVQQIDAVTZW91bDETMBEG
A1UEBwwKR2FuZ25hbS1ndTEZMBcGA1UECgwQSnVzdW4gTGFib3JhdG9yeTEVMBMG
A1UECwwMUiZEIERpdmlzaW9uMRYwFAYDVQQDDA13d3cuanVzdW4ub3JnMRswGQYJ
~~~~ 중략 ~~~~~
9H7+2Hb8xzywrTCbg1W1RtE2bLhXMCQGvVA0h9YoK1qEnsduASNpELDfIIDJrM3U
iOEx5eNYvkZU4FSBpHHSm9irX/bmixT+Dx9Z/bn/1nYZm+7cUyQyLYybnk6iKg==
-----END CERTIFICATE REQUEST-----

자 이제 이정보를 복사하여 인증서 신청시 사용하시면 되겠습니다.
반드시 주석까지 포함하여 전달하여야 합니다.

저도 일단 구매부터 하고나서 그 다음 글을 적어야죠..

apache에 하는 방법은 여기저기 많으니 AWS의 Load-Balencer에 인증서를 걸어볼까 합니다.

그럼 인증서 신청후 계속 할께욥…

Android Build를 위한 Local Repository를 만들자 (2/2)

이번 포스트에서는 sonatype Nexus를 세팅해봅시다.

기존의 프로세스는 jcenter -> 개발PC에 다운로드 -> 빌드시에 사용 입니다..

우리가 할려는 대략적인 구조는 다음과 같습니다.
jcenter -> Local Repository -> 개발PC에 다운로드 -> 빌드시에 사용.

( 패키지를 찾아서 일일이 Local에 등록시켜 놓는것도 보통일이 아니기에… -_- )

우선 Nexus에 로그인합니다. 그러면 다음과 같이 메뉴가 나타납니다. Repositores를 클릭합니다.

nexus_repos2

그런다음 Add를 클릭하여 Proxy Repository를 클릭합니다.
nexus_repos3

이름은 마음에드는 “아무거나”로 하시고 다음과 같이 세팅합니다.
nexus_repos4

그럼 세팅이 완료 되었습니다.

여기서 중요한 것은 생성된 repository의 주소입니다. 나중에 이 주소가 Android 빌드시에 사용되게 됩니다.
nexus_repos5

다시 Android 프로젝트로 돌아와서….
Build.gradle(Project:아무거나) 파일을 열어주세요. 그리고 앞에서 생성한 repository 주소를
다음과 같이 편집해주세요.

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    /*
    repositories {
        jcenter()
    }
    */
    repositories {
        maven {
            url "http://repo.teracle.com:8081/nexus/content/repositories/trproxy/"
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
        classpath 'com.google.gms:google-services:1.3.0-beta1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    /*
    repositories {
        jcenter()
    }
    */
    repositories {
        maven {
            url "http://repo.teracle.com:8081/nexus/content/repositories/trproxy/"
        }
    }

}

이 파일을 편집하게 되면 편집툴 상단에 Sync Now 라는 링크가 표시됩니다. 수정이 완료되면
클릭해주세요.

그리고 다시 nexus로 돌아가보면….
nexus_repos6

빌드시에 사용했던 패키지들이 Local Repository에 넘어와 있는 것을 확인할 수 있어요!

끗 -ㅅ-)

Android Build를 위한 Local Repository를 만들자 (1/2)

오늘 따라 자주 글을 적는군요…

삘 받았을 때 적어야합니다.

최근에…. 아니 요..전에 eclipse를 사용해서 안드로이드 어플리케이션을 제작했던 적을 생각해봅시다.

각종 필요한 라이브러리들을 다운로드 받아서 프로젝트의 lib폴더에 넣어두고 프로젝트 세팅에서
Class Path를 걸어주고 lib가 참조가 되면 그때부터 해당 lib를 포함한 빌드를 할 수 있었었죠.

최근에 Android 개발툴이 Android Studio로 변경되었습니다. 아니 바꿔야만 했습니다. (쿨럭..)

InteliJ기반의 Gradle을 사용한 빌드로 바뀌었습니다. (InteliJ너무 좋아요 좋아죠 좋아요 좋아요)

너무 좋아졌어요…

그런데 약간의 부담이 있습니다. 사용 방법이 전혀 달라졌어요..

Build.gradle(Mobile:app) 파일을 편집하여 빌드에 대한 세팅을 하며, 사용하고 싶은 lib를 추가하여 사용하게 되었습니다.
물론.. 다음 파일을 보시면 아시겠지만 기존의 lib폴더의 파일들도 추가하여 빌드 할 수 있습니다.
dependency라고 부르더군요 .. 의존성..(전 영어를 잘 못..)

android {
    compileSdkVersion 22
    buildToolsVersion '22.0.1'
} 
//중략... 
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'com.google.android.gms:play-services-analytics:7.3.0'
    compile files('libs/commons-io-2.1.jar')
    compile files('libs/android-support-v4.jar')
    compile 'com.google.guava:guava:18.0'
}

문제는 여기에 있습니다. 패키지로 빌드에 추가되는 lib들인데요.
일일히 찾아서 다니지 않아도 패키지명:버전만 적어주면 얼마나 편리합니까 ㅠ_ㅠ)
다만, 네트워크를 통해서 jcenter라는 곳에서 받아오기 때문에 속도도 느리고,
jcenter가 접속 되지 않으면, 빌드가 망하게 되지 않을까요.. ㅠ_ㅠ)

그래서 Local Repository를 만들어 보기로 했습니다.

같은 프로젝트를 동시에 진행하는 동료가 있다면! 강추 드립니다.
Local Repository를 사용하여 서로 같은 패키지 버전을 사용 할 수 있도록도 해준다고 합니다.

이미 알아체신 분도 계셨겠지만.. 서버를 설치할겁니다. Repository서버를…

sonatype Nexus Community Edition을 설치할겁니다.

다음 사이트에 접속합니다.

http://www.sonatype.org/nexus/go/

윈도우를 사용하며 개인적으로 혼자 사용하실 분은 zip 버전을
다른분과 같이 사용하시고 싶다면 (로컬)리눅스 서버에 설치하실려면 tar.gz버전을 다운로드 합니다.

“적당한곳”에 압축을 해제합니다.

“적당한곳\bin” 폴더에 가보시면 nexus.bat(윈도우용)와 nexus(리눅스용) 가 있습니다.
윈도우용은 nexus.bat install로 서비스에 등록하고 nexus.bat start로 시작하셔서 사용하실 수 있습니다.
(프롬프트에서 입력하셔야 합니다.)
리눅스용은 컨피그 파일을 조금 만져주셔야 합니다. 실행하는 유저를 지정해야 했던것 같습니다.(가물…)

정상적으로 실행되면 브라우저를 실행하여 다음 주소를 입력해봅니다.

http://localhost:8081/nexus

그럼 다음과 같은 사이트가 실행됩니다.

nexus_repos

로그인은 admin / admin123

입니다.

일단 설치하셨으면 절반은 끝났습니다. ㅠ_ㅠ)

자자 글이 너무 길어졌으니 다음 포스트로 넘기렵니다.

Log.e, Log.w…. Console를 제어 해보자

안드로이드 앱, 혹은 Java Application을 디버깅하기 위해서는 로그가 필수입니다.

잘 모르면 로그를 찍어보는게 가장 좋습니다.

보통은 다음과 같이 코드 사이에 쭉… 적어두었는데….

Log.e(MY_APP,"출력테스트"+aaa);

제품을 릴리즈 하거나, 배포 해야할 때는 불필요한 정보는 최대한 노출 시키지 않는게 좋겠죠… ?

public class myLog {
    // true 는 로그 노출 상태 , false는 로그를 출력하지 않음... 
    static final Boolean is_debug_log = true;


    /** Log Error **/
    public static final void e(String tag, String message) {
        if(is_debug_log) Log.e(tag, buildLogMsg(message));
    }

    /** Log Warning **/
    public static final void w(String tag, String message) {
        if(is_debug_log)Log.w(tag, buildLogMsg(message));
    }

    /** Log Information **/
    public static final void i(String tag, String message) {
        if(is_debug_log)Log.i(tag, buildLogMsg(message));
    }

    /** Log Debug **/
    public static final void d(String tag, String message) {
        if(is_debug_log)Log.d(tag, buildLogMsg(message));
    }

    /** Log Verbose **/
    public static final void v(String tag, String message) {
        if(is_debug_log)Log.v(tag, buildLogMsg(message));
    }

    //현제 클래스 스텍을 추적함
    public static String buildLogMsg(String message) {
        StackTraceElement ste = Thread.currentThread().getStackTrace()[4];
        StringBuilder sb = new StringBuilder();
        sb.append(ste.getFileName().replace(".java", ""));
        sb.append(".");
        sb.append(ste.getMethodName());
        sb.append(message);
        return sb generique de viagra.toString();
    }
}

is_debug_log 변수에 대해서는 BuildConfig.DEBUG를 이용하여 Android Studio에서 빌드를 선택하여

로그 출력 여부를 조정 할 수도 있습니다.

사용 방법은 어짜피 Static이기 때문에 다음 처럼 사용 할 수 있습니다.

myLog.i(TAG,"나는 로그로그");

더 좋은 아이디어 있으신분은 공유해주세엽… 뿅 -ㅅ-)/