letsencrypt ssl인증서 만료 갱신 오류 해결 - webroot 관련

ssl인증서는 최근 웹서비스에서는 필요불가결한 서비스이다.

여러 웹서비스를 운영할 경우 상당히 많은 부분에 ssl 인증서가 필요하다 보니 비용 문제에 직면하게 된다.

 

그래서, 무료로 사용이 가능한 letsencrypt 인증서를 많이들 사용하는데....

잘만 관리해주면 상당히 괞찮은 ssl 적용 방법이라고 생각된다.

 

다만, 가끔씩 갱신이 잘 안된다거나, 갱신 오류가 발생하기도 하는데...

오늘은 아래와 같은 오류에 대해서 해결하는 방법을 공유해 본다.

 

 

letsencrypt ssl 인증서 갱신하기

 

우선, 인증서를 적용하는 도메인을 aaaa.bbbb.kr 이라고 가정하고..

 

리눅스 크론탭(crontab)에 통해 매달 2일정도 갱신을 시도하도록 스케줄링을 적용해 놓았다.

# letsencrypt renew
00 5 10,16 * * root /root/letsencrypt/certbot-auto renew >> /var/log/letsencrypt/renew.log

 

그런데, 확인을 해보니, 인증서 만료일이 갱신되지 못하고 실패가 나고 있었다.

그래서, 직접 갱신 시도를 해보았다.

 

#cd /root/letsencrypt

#./certbot-auto renew

 

갱신을 실행해 보니, 아래와 같은 메세지가 출력되었다.

 

Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/aaaa.bbbb.kr.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert is due for renewal, auto-renewing...
Plugins selected: Authenticator webroot, Installer None
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for aaaa.bbbb.kr
Cleaning up challenges
Attempting to renew cert (aaaa.bbbb.kr) from /etc/letsencrypt/renewal/aaaa.bbbb.kr.conf produced an unexpected error: Missing command line flag or config entry for this setting:
Input the webroot for aaaa.bbbb.kr:. Skipping.
All renewal attempts failed. The following certs could not be renewed:
  /etc/letsencrypt/live/aaaa.bbbb.kr/fullchain.pem (failure)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

All renewal attempts failed. The following certs could not be renewed:
  /etc/letsencrypt/live/aaaa.bbbb.kr/fullchain.pem (failure)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1 renew failure(s), 0 parse failure(s)

 

내용을 보니, 뭔가 수정을 하라는거 같은데....

오류 내용에 뭔가 빠져 있다고 하는거 같고... 그게 webroot 와 관련되는거 같고...

그래서 구글링을 통해 확인을 해보니...

configuration 파일(/etc/letsencrypt//renewal/aaaa.bbbb.kr.conf)에 webroot 정보가 빠져서 그렇다고 한다.

 

설정파일을 열어 확인해보니, 해당 부분이 없서 추가 해주었다.

 

#vi /etc/letsencrypt/renewal/aaaa.bbbb.kr.conf

# renew_before_expiry = 30 days
version = 0.38.0
archive_dir = /etc/letsencrypt/archive/aaaa.bbbb.kr
cert = /etc/letsencrypt/live/aaaa.bbbb.kr/cert.pem
privkey = /etc/letsencrypt/live/aaaa.bbbb.kr/privkey.pem
chain = /etc/letsencrypt/live/aaaa.bbbb.kr/chain.pem
fullchain = /etc/letsencrypt/live/aaaa.bbbb.kr/fullchain.pem

# Options used in the renewal process
[renewalparams]
server = https://acme-v02.api.letsencrypt.org/directory
authenticator = webroot
account = asdfasfasfasfdasfdasfdasfdasdfa

 

설정 파일 내용을 보면, webroot에 대한 정보가 없다.

그래서, aaaa.bbbb.kr 에 대한 웹루트(/webroot/aaaa.bbbb.kr) 정보를 설정 파일 하단에 추가 주었다.

 

[[webroot_map]]
aaaa.bbbb.kr = /webroot/aaaa.bbbb.kr

 

 

이렇게 수정을 마치고, 다시 갱신 시도를 해보니 오류 없이 잘 되었다.

 

#./certbot-auto renew

 

Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/aaaa.bbbb.kr.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert is due for renewal, auto-renewing...
Plugins selected: Authenticator webroot, Installer None
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for aaaa.bbbb.kr
Waiting for verification...
Cleaning up challenges

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/aaaa.bbbb.kr/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/aaaa.bbbb.kr/fullchain.pem (success)

 

 

 

 

notepad++ 이용중에 sftp 인증 오류 날때

notepad++ 이용중에 sftp 인증 오류 날때.

 

잘 사용하던 notepad++ 에서 sftp로그인중 갑자기 접근 인증 오류가 발생해 난감할때가 있다.

이는 어떤 이유에선지 모르겠지만, 호스트키(host key)정보가 잘못 저장되어 일어나는 경우로 보인다.

 

해결하는 방법은

C:\Users\사용자계정\AppData\Roaming\Notepad++\plugins\config\NppFTP

부분으로 이동해서

known_hosts 파일을 찾아 에디터로 열어서 sftp 접속 문제가 발생하는 서버의 호스트(IP)를 찾아 지운 후 저장하고,

notepad++을 다시 접속해서 사용하면 된다.

 

 

난감할때가 있긴한데, 알고 보면 간단하다.

 

또한, notepad++의 sftp정보의 백업도 간단하다.

위 디렉토리에 있는 NppFTP.xml 파일만 백업하면, sftp에 설정한 접속정보를 백업할 수 있다.

 

 

 

영문 Putty 설치후 한글이 깨져서 보일때

영문 Putty 설치후 한글이 깨져서 보일때가 있다.
이때, Putty 설정에서 character set을 변경해주면 되는데...여기에 cp949가 없을 경우가 있다.

cp949가 Putty "Window > Translation"에서 보이지 않을경우 레지스트리를 수정해주면 되는데.
"[HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\저장된세션이름"에서 LineCodePageFontCharSet 을 변경해주면 된다.
1. FontCharset을 클릭하여 16진수 선택하고 81 을 입력해준다.
2. LineCodePage 클릭후 cp949를 입력해준다.

위와 같이 레지스트리 변경후 EUC-KR 서버에 SSH로 원격 접속을 해보면 한글 입출력이 잘된다.
참고로 저장된 세션이 여러개이면, 개별적으로 모두 해주어야 모든 세션에서 한글을 사용할수 있다.

참조 url : http://blog.pincoin.co.kr/2013/01/08/euc-kr-%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%84%9C%EB%B2%84%EC%97%90-putty-ssh-%EC%A0%91%EC%86%8D/


[리눅스 명령어] 폴더별 사용량보기

du

특정 디렉토리에서 하부디렉토리까지 포함한 디스크의 사용량을 보여준다.


[사용법]


du [Option] [Files]

* Option
-a  : 디렉토리에 있는 파일 하나하나의 크기를 출력한다.
-s  : 총 사용량만 표시한다. (간단하게 전체 용량을 확인할 때는 단순하게 이 옵션을 쓰자.)

 

du -s


-k  : KiloByte 단위로 표시한다.
-h  : 용량을 사람이 보기 가장 좋게 표시한다.

[예제]
'du -a' : 현재 디렉토리의 디스크 사용량을 파일단위로 모두 출력한다.
'du -s *' : 현재 디렉토리의 첫번째 단계까지만 디스크의 사용량을 출력한다.
              'du -h --max-depth=0 *' 와 동일
'du -h --max-depth=1 '

--max-depth=1 에서 마지막의 숫자는 폴더의 깊이이다.  

[리눅스] 서버 명령어 모음

<사용자 관련>

 adduser [계정이름] : 계정생성
 passwd [계정이름] : 해당계정의 비번변경
 userdel -r [계정이름] : 계정삭제 및 계정의 파일폴더 모두 삭제(-r)
 w : 현재 사용중인 사용자
 last : 최근 이용한 접속자

 

<파일/디렉토리>

 ll : 전체폴더구조 보기
 ls : 폴더구조 간단히 보기
 ls -al : 숨긴파일 까지 다 보기
 ls [디렉토리명] : 해당 디렉토리보기
 ls [파일명 또는 일부] : 해당되는 파일만 보여주기
 
 cd : 디렉토리 이동
 chmod 755 [디렉토리] : 파일권한변경 (내꺼, 같은그룹, 전체) 


 mkdir [디렉토리] : 디렉토리생성
 mkdir -p a/b : a디렉토리 생성후 하위에 b디렉토리 생성


 rm [파일명] : 파일삭제
 rmdir [디렉토리명] : 디렉토리삭제 (파일존재시 삭제 불가)
 rm -rf [디렉토리명] : 하위 디렉토리 및 파일 까지 모두 삭제 


 touch [파일명] : 해당파일의 수정일을 현재시각으로 변경(파일없을시 빈파일 생성) 


 cp [파일1] [파일2] : 파일1을 파일2로 복사
 cp -r [디렉토리1] [디렉토리2] : 디렉토리1을 디렉토리2로 하위폴더와 파일까지 복사
 cp -a [파일1] [파일2] : 소유권을 유지하면서 복사


 move [파일/디렉토리] [디렉토리] : 파일 및 디렉토리 이동
 
 cat [파일명] : 파일내용 출력
 cat /dev/cdrom > linux.iso : CD롬에 있는 내용을 CD 이미지 파일로 만듦
 cat a.txt >> b.txt : b.txt 파일 하단에 a.txt 파일의 내용 추가
 
 more [파일명] : 파일내용을 페이지단위로 출력 (space:다음페이지, b:이전페이지)
 
 ln [해당디렉토리 또는 파일] [링크이름] : 하드링크
 ls -s [해당디렉토리 또는 파일] [링크이름] : 심볼릭링크
 
 | : 파이프로 두개의 명령을 연결시켜줌
 (예: ls -l /usr/bin | more : ls에서 검색된 파일 폴더를 페이지별로 보여줌)
 
 파일권한 (자신/그룹/나머지: 4:읽기, 2:쓰기, 1:실행)
 chown -R ohhappy.wheel /home/ohhappy/* : /home/ohhappy하위의 모든 파일 디렉토리의 소유자를 ohhappy로 그룹을 wheel로 변경
 
 mount -t iso9660 /dev/cdrom /mnt/cdrom : cdrom 마운트
 mount -t vfat /dev/fd0 /mnt/floppy : floppy 마운트
 umount /dev/cdrom 또는 umount /mnt/cdrom


  
<검색>

 find [경로] -name [파일명] : 하위경로의 파일찾기
 /[찾을 문서명] : 문서나 메뉴얼안에서 문자찾기
 which [명령어] : 명령어의 절대경로를 알려줌
 whereis [명령어] : 명령어의 바이너리, 소스, 맨페이지위치 알려줌
 
  
<시스템/프로세스 관련>

 top : 시스템 프로세스 및 메모리 및 CPU 사용량
 uname -a : 운영체제,호스트명,커널버전,시스템부팅시간,아키텍쳐 보여줌
 uname -m : cpu 보여줌
 free -m : 메모리 보여줌(-m 메가단위, -k kb단위)
 df -h : 마운트되어있는 디스크 사용량
 du --max-depth=1 -h /home : 각 계정별로 이용량 확인
 lsdev : 현재 사용중인 장치정보
 w : 현재 사용중인 사용자
 last : 최근 이용한 접속자
 date : 현재 설정된 시간
 clock : Cmos에 설정된 시간
 rdate -s soback.kornet.nm.kr : soback.kornet.nm.kr에서 시간을 전송받아 시간 수정
 clock -w : cmos 시간으로 수정
 netstat -tu : 시스템에 연결된 소켓정보 
 ifconfig : 네트웍 장치설정 정보
  
 ps -[옵션]: 현재 시스템에서 구동중인 프로세스 상태확인
 (-a:전체사용자, -l:자세히보기, -x:제어터미널이 없는 프로세스, -f:pstree명령어와 같은 프리구조로 출력)
 (상태값: D:구동일시중지중, R:구동중, S:쉬는중, T:구동정지중, Z:좀비프로세스, W:메모리를 안쓰는 스와핑상태)
 ps auxfw -width=300 : 프로세스의 사용자 확인 (주로 | more 필요)
 pstree : 구동중인 프로세스를 투리구조로 보여줌
 
 kill -9 [프로세스번호] : 프로세스 강제종료
 killall -9 [프로세스이름] : 프로세스 강제종료
 
<시스템 종료>

 init0 : 시스템 종료
 halt : 시스템 종료
 reboot : 시스템 재부팅
 
 <압축>

 tar cvf [생성될 파일명:예 httpd.tar] [묶을 디렉토리] : 설정한 디렉토리를 포함한 하위 디렉토리 및 파일을 묶음
 tar xvf [묶인파일:예 httpd.tar] : tar파일을 현재 디렉토리에 품
 tar tvf [묶인파일:예 httpd.tar] : tar파일을 풀지 않고, 파일리스트만 출력
 tar cvfz [압축파일명 :예 httpd.tar.gz] [압축할 디렉토리] : 파일을 묶어서 압축함
 tar xvfz httpd.tar.gz : tar.gz 압축해제
 tar xvfj httpd.tar.bz2 : tar.bz2 압축해제
 
<ftp>

 quit : ftp 종료
 get : 다운로드 명령
 mget : 현재폴더내 모든 파일 다운로드
 mget -R * : 현재폴더 및 하위 폴더 파일 다운로드

[linux 명령어]여러 파일 권한 한번에 바꾸기


여러파일 권한 바꾸기
 find ./ -type f -name 파일명 -exec chmod 777 {} \;
find 디렉토리시작위치 -type 타입구분(f=팡일 ,d=directory) -name 파일명 -exec chmod 권한 {} \;

위 명령을 이용하면, 디렉토리시작위치에서 하위에 있는 모든 디렉토리에 포함된 파일을 한번에 권한 설정을 해줄수 있다.

SSL 인증서를 도메인 별로 신청해야 하나요?


SSL인증서는 SSL서버가 돌아가는 웹사이트 주소별로 받는 것이 원칙입니다. 예를들어, www.a.com, secure.a.com 두 사이트에 SSL 서버를 설치하면 두개의 인증서를 신청해야 합니다.

그러나, 인증서의 신청은 여러분 회사의 SSL서비스 정책에 따라 달라집니다. 실제 SSL통신이 필요한 부분은 회원가입, 로그인, 정보수정, 전자상거래, 금융거래 개인정보 열람 등의 중요한 정보가 노출되는 부분이라고 할 수 있습니다.

일반적인 웹사이트 전체에 SSL 암호통신을 하다보면, 암호화된 데이터의 암호 복호화 시에 많은 서버부하를 주게 됩니다. 따라서, 일반적으로 특정 서버에 위의 중요한 데이터 통신 부분에 대한 웹서버에만 SSL통신(https)을 서비스하고, 그 이후는 일반 웹통신(http)을 하도록 하는 것이 관례적입니다.

출처 : http://www.certkorea.co.kr/cs.asp?faq_ssl

트랜잭션 복제중에 'sp_replcmds'을 실행할 수 없습니다. 라는 오류 발생할때.

트랜잭션 복제중에 'sp_replcmds'를 실행할수 없다는 오류가 발생해다. (오류 번호 : 18759)
일단 뭔 내용인지 몰라서, help를 뒤져 sp_replcmds가 뭔지 부터 확인했다.

sp_replcmds 설명 내용중에 보면,
"텍스트 포인터가 같은 트랜잭션에서 검색되지 않아 sp_replcmds가 텍스트 명령을 복제할 수 없는 경우에는 경고 메시지 18759번이 Microsoft® SQL Server™ 오류 로그 및 Microsoft Windows® 응용 프로그램 로그에 모두 추가됩니다." 라는 오류 18759에 대한 내용이 있다.

이것을 참고로 해서 텍스트 포인터를 확인해 주는 textvalid()함수를 이용해서 , 복제중에 오류를 발생시키고 있는 table의 text, ntext, image 필드에 대한 텍스트 포인터 유효성을 확인 해보았다.
일부 데이타중에 텍스트 포인터가 유효하지 않은것이 있어 해당 필드들에 대해서 초기화(update시킴)를 시켜주고,
다시 복제를 초기화를 진행해 주었다.

계속 모니터링을 해봐야 하겠지만, 현재로서는 복제가 잘되고 있다.

복제 - 복제필드중 text, ntext, varchar(max), image 등에 대한 복제 문제 해결

복제를 구성하다보면,
text, image 필드 같이 큰값을 게시 해야 하는 경우가 있는데, 이경우 insert, update, writetext 또는 updatetext작업이 구성된 제한값을 초과해서 아래와 같은 오류를 발생시키기도 한다.

해결 방법은
서버 구성 정보 중에 "max text repl size" 매개 변수를 재설정해주면된다.

1. sp_configure 로 서버 구성확인

2. "max text repl size" 수정.

EXEC sp_configure 'max text repl size', 2147483647
Go
RECONFIGURE WITH OVERRIDE
Go

터미널서버 클라이언트 액세스 라이센스 문제.

서버 셋팅후 특별한 조정이 없었다면, 서버 운영도중 터미널서버 접속시 아래와 같은 경고문구를 만나기도 한다.

"이 컴퓨터에 대해 사용 가능한 터미널 서버 클라이언트 액세스 라이센스가 없으므로 원격 연결이 끊어졌습니다."

이럴 경우,
아래와 같이 해주면, 해결된다.

관리도구 > 터미널서버 구성 > 서버설정 > 라이센스 의 값을 "사용자단위"로 변경을 해주면된다.

[웹서버 - IIS6]application pool 재시작하기

iis6에 있는 응용프로그램 관리에서도 재시작에 대한 옵션을 사용할수 있다.
그러나, 가끔씩은 그 작업이 재대로 수행되지 않아서, 어플리게이션풀이 죽어 싸이트가 죽어있는경우가 있다. 이때, 윈도우스케줄에 아래 스크립트를 이용해서 스케줄을 해주는 방법을 추가로 할수 있다.


' Start an Application Pool
strComputer = "."
Set objWMIService = GetObject _
    ("winmgmts:{authenticationLevel=pktPrivacy}\\" _
        & strComputer & "\root\microsoftiisv2")

Set colItems = objWMIService.ExecQuery _
    ("Select * From IIsApplicationPool Where Name = " & _
        "'W3SVC/AppPools/[어플리케이션풀이름]'")

wscript.echo("응용프로그램풀 재시작 - "& Now())
For Each objItem in colItems
    objItem.Stop
    objItem.Start
Next
wscript.echo("응용프로그램풀 재시작 완료 - "& Now())

mssql 스키마 속성에 걸려 있는 규칙(rule) 수정하기.

스키마 속성에 규칙(rule)을 적용한 경우가 있다. 이경우 규칙을 수정해야 하는 경우 해당 룰을 먼저 바인딩 된 속성에서 바인딩 해제를 해준후 규칙을 수정하고, 다시 바인딩 시켜주어야 한다.

먼저, 바인딩된 스카마 속성에서 바인딩 해제후
--> exec sp_unbind [tbl_good].[goodType_code]
rule 수정,
--> DROP RULE [dbo].[chkGoodType]
--> CREATE RULE [dbo].[chkGoodType]
      AS @chkGoodType in (1, 2, 3, 4, 5, 6)
재바인딩.
--> EXEC dbo.sp_bindrule @rulename=N'[dbo].[chkGoodType]', @objname=N'[dbo].tbl_good].[goodType_code]' , @futureonly='futureonly'
GO

이렇게 하면된다.

MS-SQL 복제에서 distribution cleanup이 지연될때


복제 서버를 운영하다 보면, 복제 데이타베이스 정리가 지연되어 데이타베이스 사이즈가 계속 증가하는 경우가 생긴다.

이때, 복제의 모니터의 기타에이전트 에서 "배포 정리:distribution" 이 잘 실행되고 있는지 확인을 하여 제대로 실행되지 않거나, 지연되고 있다면, 아래 처럼 수동으로 처리를 해준다.

1. msrepl_transactions, MSrepl_commands 테이블의 row수를 확인한다.

2. distribution cleanup job의 최근 실행시간을 확인해본다.

 

만약 row수가 많이 늘어나있고, job의 실행시간도 많이 지연되어 있다면

log reader agent를 일단 중지시키고 복제 트랜잭션의 max retention 시간을 줄여본다.

 

EXEC dbo.sp_MSdistribution_cleanup @min_distretention = 0, @max_distretention = ??

위 명령의 ? 부분이 보통 기본값(120??)으로 되어있을텐데 용도에 따라서 줄여본다.

나의 경우에는 처음에는 10으로 그 다음에는 2로 실행했다.

외국 뉴스그룹 같은 경우에는 0으로 하던데 그럴때는 아직 반영되지 않은 트랜잭션이

삭제될 수 있으므로 주의해야한다.

distribution cleanup job의 실행주기를 짧게(분 단위로..) 조정하고 기다리면 실행될 것이다.

 

만약 delete 작업이 오래 걸리는 것 같으면 DB의 복구모델이 simple인지 반드시 확인~!!



mssql2005에서 로그인 계정에 대한 암호만료정책 해제 하기

mssql2005 계정생성후 사용중에 암호 만료 정책에 의해서 암호를 바꾸라는 메세지가 나올때, 아래와 같이 해주면, 정책부분을 변경할수 있다.

SQL2005 MUST_CHANGE=Off 
처리하기.

ALTER LOGIN X WITH PASSWORD = 'Y' UNLOCK
(X 와 Y 는 사용하고 있는 계정과 계정패스워드 이다.)

터미널서비스 관리


터미널 서비스 관련 명령어.

동일 네트워크에 있는 다른 서버에서
1. 터미널서비스가 세션 초과로 접속 안될때.
--> tsdiscon 세션id /server:[해당서버IP(서버호스트명)]

2. 터미널서비스 사용자 및 세션ID값 확인하기
--> query user /server:[해당 서버IP]

3. 원격에서 컴퓨터 재부팅하는 명령
--> tsshutdn 1 /server:[해당서버IP주소] /reboot /v

mssql single mode 접속하기

mssql 관리자 싱글모드 접속 명령
command 창에서

==> net start mssqlserver /m