Chrome 브라우저 최신 버전으로 업데이트 이후 예전에 적용했던 WoSign SSL 인증서를 신뢰하지 않는 문제가 발생했다.



관련 내용은 아래 주소를 참고:


https://www.xetown.com/square/416332



그래서 이번에는 Apache2 서버에 Chrome이 후원하고 있는 Lets' Encrypt 무료 인증서를 적용해 보도록 한다.


우분투 Ubuntu 16.04.2 LTS 에서는 고맙게도 설치 프로그램을 제공하고 있다.

$ sudo apt-get install letsencrypt


설치가 정상적으로 완료되면 아래 명령어를 이용해 인증서를 서버에 설치한다.

$ sudo letsencrypt certonly --webroot --webroot-path=웹루트_풀경로명 -d 대상_도메인명

 - Congratulations! Your certificate and chain have been saved .... 이라는 메시지가 나오면 성공이다.

(도메인이 여러개일 경우 -d 옵션을 여러개 지정하면 된다.)


아래 명령어를 통해 인증서 파일 목록을 볼 수 있다.

$ sudo ls  -l /etc/letsencrypt/live/


아파치 서버에 적용해보자.

아래 구문을 대상 conf 파일에 넣어주자. (기존에 설정한 게 있다면 주석 처리한다.)

SSLEngine on

SSLProtocol all -SSLv2 -SSLv3

SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA


SSLHonorCipherOrder on


SSLCertificateFile "/etc/letsencrypt/live/도메인명/cert.pem"
SSLCertificateKeyFile "/etc/letsencrypt/live/도메인명/privkey.pem"
SSLCertificateChainFile "/etc/letsencrypt/live/도메인명/chain.pem"

아파치를 재기동하면 이제 정상적으로 인증서가 적용된 모습을 볼 수 있다.


Lets' Encrypt 인증서는 인증기간이 90일로 짧다. 따라서 주기적으로 인증서를 갱신해야 한다.

$ sudo crontab -e

----- 생 략 ----

# For more information see the manual pages of crontab(5) and cron(8)

# m h  dom mon dow   command

10 5 * * 1 /usr/bin/letsencrypt renew >> /var/log/le-renew.log

15 5 * * 1 /usr/sbin/apache2ctl restart

이제 매주 월요일 5시 10분과 15분에 인증서를 갱신하고 아파치를 재기동 할 수 있다.


현상

eclipse에서 변경파일을 커밋하려고 하는데 locked 관련 오류가 나면서 커밋이 안된다.


원인

이전에 커밋할려다 시간이 오래걸려서 eclipse를 강제로 재시작한 경우가 있다. 이때 커밋대상 파일에 대해 lock이 걸렸을 것으로 추정함


해결

1. 프로젝트 우클릭 > team > cleanup

=> 실패 : 아무런 반응 없음


2. 대상 파일 삭제후 서버에서 다시 업데이트 받음

=> 실패 : lock이 걸려서 파일 삭제 불가


3. sqlite 클라이언트 다운로드

http://sqlitebrowser.org/ : 다운로드 속도가 안될 경우 아래 주소에서 다운로드

https://sourceforge.net/projects/sqlitedbrowser/ : 위 주소보다 버전은 낮지만 작업하는데 문제는 없다.


- 로컬 PC에 설치(압축해제)한 후 프로그램 실행

- File > Open Database > 대상 프로젝트 루트 경로의 .svn 폴더 아래에 있는 wc.db 파일을 선택

- Execute SQL 탭을 선택 후 아래 SQL 실행


DELETE FROM WORK_QUEUE;


=> 실패 : 대상 자료가 없음


4. 아래 SQL 실행


DELETE FROM WC_LOCK;


=> 성공 : 1개 데이타 삭제함


※ 혹시 그래도 안되면 4번까지 실행 후 1번 재실행




언제인지 모르겠지만 지난 9월 이후 크롬 개발자도구(F12)가 느려져서 디버깅하는데 애를 먹고 있었다.


이 문제와 관련해 크롬 업데이트 이후 발생하는 문제이니 구글에서 곧 패치해 주겠지라고 생각하고 무시하고 있었다.


그러나 역시 구글 문제가 아니었다.


해결책 : Ahnlab safe transaction 프로그램을 삭제하면 다시 빨라진다.




지난번 [Tomcat8 : SSL 인증서 적용하기 (WoSign 무료 인증서)] 글에 이어 이번에는 Apache2에 SSL 인증서를 적용하는 절차를 알아본다.


1. 개인키 파일 생성

# openssl genrsa -des3 -out private.key 2048


Generating RSA private key, 2048 bit long modulus

..................+++

................+++

e is 65537 (0x10001)

Enter pass phrase for private.key: (개인키 패스워드 입력)

Verifying - Enter pass phrase for private.key: (개인키 패스워드 입력)

2. CSR 생성

# openssl req -new -key private.key -out out.csr


Enter pass phrase for pri.kery: (개인키 패스워드 입력)

Loading 'screen' into random state - done 

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) [AU]:KR (국가코드 C)

State or Province Name (full name) [Some-State]:Seoul (시,도 ST)

Locality Name (eg, city) []:Gu-ro (구,군 L)

Organization Name (eg, company) [Internet Widgits Pty Ltd]:Finkle (기관명 O)

Organizational Unit Name (eg, section) []:RnD (조직명 OU)

Common Name (eg, YOUR name) []:mydomain.co.kr (도메인명 CN)

Email Address []:my@email.com (이메일)


Please enter the following 'extra' attributes 

to be sent with your certificate request 

A challenge password []: enter

An optional company name []: enter


3. https://buy.wosign.com/free/ 접속 후 위에서 생성한 CSR 파일 내용 붙여넣기


4. zip 파일 다운로드

mydomain.co.kr_sha256_en.zip


5. 압축 파일 내 [for Apache.zip] 파일의 내용 추출 후 적용대상 서버에 업로드

1_root_bundle.crt

2_mydomain.co.kr.crt


6. 아파치 설정파일 변경


<VirtualHost *:443>

    SSLEngine on

    SSLCertificateKeyFile  /my/path/ssl/private.key

    SSLCertificateFile       /my/path/ssl/2_mydomain.co.kr.crt

    SSLCACertificateFile   /my/path/ssl/1_root_bundle.crt

</VirtualHost>


7. 아파치 재기동


1개의 Tomcat에서 2개의 instance를 띄우고자 하는 시나리오를 가정한다. (Tomcat 8.0 기준)


1. Tomcat 설치 폴더 : 

/home/finkle/tomcat8


2. 인스탄스 1번 폴더 : 

/home/finkle/instance/svc01


3. 인스탄스 2번 폴더 : 

/home/finkle/instance/svc02



1. 톰캣 설치 폴더에서 1번 instance로 파일 복사

$ cd /home/finkle/instance/svc01

$ cp -R /home/finkle/tomcat8/* .

$ rm -rf bin lib LICENSE NOTICE RELEASE-NOTES RUNNING.txt

$ ls

conf logs temp webapps work


※ 2번 instance도 위와 같은 과정을 따라한다.


3. conf/server.xml 수정 : 서비스를 위한 포트번호가 중복되지 않도록 설정한다.


1번 instance의 server.xml


<Server port="8005" shutdown="SHUTDOWN">

....

    <Connector port="80" protocol="HTTP/1.1" Server="WAS-NAME"

               connectionTimeout="20000"

               redirectPort="443" URIEncoding="utf-8" />

....


2번 instance의 server.xml


<Server port="8015" shutdown="SHUTDOWN">

....

    <Connector port="8010" protocol="HTTP/1.1" Server="WAS-NAME"

               connectionTimeout="20000"

               redirectPort="8443" URIEncoding="utf-8" />

....


4. 1번 instance의 Tomcat 구동 스크립트 작성


$ cd /home/finkle/instance/svc01

$ mkdir bin

$ cd bin

$ touch startup.sh

$ touch shutdown.sh

$ chmod +x *.sh



startup.sh


#!/bin/sh


CATALINA_BASE=/home/finkle/instance/svc01

CATALINA_OPTS="-Denv.servername=svc01"

CATALINA_PID=/home/finkle/instance/svc01/svc01.pid

JAVA_OPTS="-Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -server -Xms512m -Xmx512m"


export CATALINA_BASE CATALINA_OPTS CATALINA_PID JAVA_OPTS


/bin/su -p -s /bin/sh finkle $CATALINA_HOME/bin/startup.sh



shutdown.sh


#!/bin/sh


CATALINA_BASE=/home/finkle/instance/svc01

CATALINA_PID=/home/finkle/instance/svc01/svc01.pid


export CATALINA_BASE CATALINA_PID


/bin/su -p -s /bin/sh finkle $CATALINA_HOME/bin/shutdown.sh


※ 2번 instance도 위와 같은 과정을 따라한다.



도움받은 곳 : 

http://linux.systemv.pe.kr/tomcat-multi-instance-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0/


https://beyondj2ee.wordpress.com/2012/07/03/%EB%A9%80%ED%8B%B0-%ED%86%B0%EC%BA%A3-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%EB%A1%9C-%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0-multiple-tomcat-instances/


+ Recent posts