1. 문제의 시작


잘 운용되고 있던 통계 로그 서버가 갑자기 먹통이 되었다. 

사실 전부 인수인계 되어있던 건데.... 갑자기 안된다는 메일이 한통 딱 날라왔다. 


뭔가 작업을 했으면 작업을 했었다... 그래서 안된다. 이런식으로 메일을 써 주면 좋으련만, 자기들 원하는 대로만 메일을 쓰지.....


일단 2월부터 통계 데이터가 없다고 하니, 해당 날짜부터 무슨 일이 있었는지 확인을 해보자..


2. 처음 보는 에러 로그

해당 로그는 다음과 같았다. 

sendBatchLog|HTTP Send error|sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target


흐음.. 느낌상으로는 https 로 통신하는데 문제가 있는것으로 보인다. 


3. https 통신 여부 확인하기. 


일단 os level에서 정상적으로 해당 데이터를 가지고 올 수 있는지 확인해 보았다. 

하지만 결과는 참담했다. 


1) 해당 장비에는 curl 이 깔려 있지 않았고, 

2) wget으로 페이지를 다운로드를 받으니, dns에서 해당 url을 찾을 수 없댄다. 

3) 게다가 apt-get으로 curl 같은 것을 다운로드 받을 수도 없다. 


일단 하나씩 해결해 보자. 


문제의 장비 정보

$ cat /etc/issue

Ubuntu 12.04.5 LTS \n \l


일단 apt-get을 사용할 수 있도록 해보자. 

기존에는 /etc/apt/source.list 에 ubuntu repository 주소가 다음과 같이 되어 있었다. 

http://kr.archive.ubuntu.com/ubuntu/

적절하게 백업뜨고 다음과 같이 변경해 주자. 


# cp /etc/apt/sources.list /etc/apt/sources.list.bak

# cat /etc/apt/sources.list | sed -e 's/http:\/\/kr.archive.ubuntu.com\/ubuntu\//http:\/\/ftp.daumkakao.com\/ubuntu\//g' > /etc/apt/sources.list


하지만 이게 잘 되면 얼마나 좋으련만....

dns 서버 문제가 있는것 같다. 

ftp.daumkakao.com을 못찾는다....


일단 static 으로 구성된 network환경을 확인해 보자


# vi /etc/network/interfaces

~

dns-nameservers 192.168.0.1

역시나 dns-nameservers 가 없다. 추가한 뒤에 파일을 수정해 준다. 

해주는 김에 /etc/resolv.conf 도 추가해 준다. 

# vi /etc/resolv.conf

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)

#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN

nameserver 192.168.0.1

그 다음엔 깔끔하게 장비 reboot를 해 주자 

# reboot

reboot가 끝이 나고, 정상적으로 dns 서버가 동작하는 것을 확인했다. 

하는 김에 apt-get update 도 진행해줌

$ sudo apt-get update

잘 된다....


4. 문제의 서버에는 역시 접근이 안된다. 

https로 된 문제의 서버에는 self signed certificate 라는 이유의 에러 메시지를 뱉어내며 정상 동작을 하지 않는다... 

google 신의 도움으로 다음과 같이 업데이트를 진행해 준다. 

# update-ca-certificates -f

ref. http://manpages.ubuntu.com/manpages/cosmic/en/man1/c_rehash.1ssl.html


일단 wget, curl로 발생하던 에러는 드디어 사라졌다. 


5. java에서는 아직도 동일한 에러가 발생한다. 


이거가 뭔 일이냥? 

다시 또 검색을 해 보았다. 


ref. https://www.lesstif.com/pages/viewpage.action?pageId=12451848


상기 사이트에서 나온 결론은 다음과 같다. 

1) java keystore 상에 해당 CA 인증서 정보가 없다. 

2) 그렇기 때문에 https 사이트에 대해서 PKIX 에러가 발생되는 것이다. 

3) java default path에 있는 cacert에 문제의 인증서를 추가해 주자.


잘 정리하신 분이 계시길래.... 일단 따라해 보도록 한다. 


6. 변경 작업 시작


혹시라도 저 파일이 없어질 수도 있으니.. 다운을 받아봄..

InstallCert.java


$ curl -O https://gist.githubusercontent.com/lesstif/cd26f57b7cfd2cd55241b20e05b5cd93/raw/InstallCert.java

$ javac InstallCert.java

-bash: javac: command not found


아나... javac 이 없다고 합니다 그렇다면... 

심볼릭 링크를 걸어서 javac을 쓰도록 하자...

$ java -version

java version "1.8.0_161"

Java(TM) SE Runtime Environment (build 1.8.0_161-b12)

Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)

$ which java

/usr/bin/java

$ ll /usr/bin/java

lrwxrwxrwx 1 root root 26 Feb 19  2018 /usr/bin/java -> /opt/jdk1.8.0_161/bin/java

$ sudo ln -s /opt/jdk1.8.0_161/bin/javac /usr/bin/javac

$ javac InstallCert.java

음... 이제 돌아가는구만... 

그렇다면.. 문제의 사이트에서 인증서를 가져오도록 합니다. 


$ java -cp ./ InstallCert sample.kkus.com

Loading KeyStore /opt/jdk1.8.0_161/jre/lib/security/cacerts...

Opening connection to sample.kkus.com:443...

Starting SSL handshake...


javax.net.ssl.SSLException: java.lang.UnsupportedOperationException

        at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)

        at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1959)

        at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1916)

        at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1899)

        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1420)

        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1397)

        at InstallCert.main(InstallCert.java:116)

Caused by: java.lang.UnsupportedOperationException

        at InstallCert$SavingTrustManager.getAcceptedIssuers(InstallCert.java:187)

        at sun.security.ssl.AbstractTrustManagerWrapper.checkAlgorithmConstraints(SSLContextImpl.java:1098)

        at sun.security.ssl.AbstractTrustManagerWrapper.checkAdditionalTrust(SSLContextImpl.java:1044)

        at sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(SSLContextImpl.java:986)

        at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1596)

        at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)

        at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1052)

        at sun.security.ssl.Handshaker.process_record(Handshaker.java:987)

        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1072)

        at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1385)

        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413)

        ... 2 more


Server sent 3 certificate(s):


 1 Subject CN=sample.kkus.com, OU=InstantSSL, OU="Hosted by Korea Information Certificate Authority, Inc.", OU=IT, O=kkus Corporation, L="Bundang-gu, Seongnam-si", ST=Gyeonggi-do, C=KR

   Issuer  CN=COMODO RSA Organization Validation Secure Server CA, O=COMODO CA Limited, L=Salford, ST=Greater Manchester, C=GB

   sha1    72 54 e2 76 7e 5d 8a 64 92 48 81 b6 68 f1 14 ef 8b 95 6c 9a

   md5     ce 0a dd e9 20 c0 ea 57 07 5c 09 a8 64 8e 8f bb


 2 Subject CN=COMODO RSA Organization Validation Secure Server CA, O=COMODO CA Limited, L=Salford, ST=Greater Manchester, C=GB

   Issuer  CN=COMODO RSA Certification Authority, O=COMODO CA Limited, L=Salford, ST=Greater Manchester, C=GB

   sha1    10 4c 63 d2 54 6b 80 21 dd 10 5e 9f ba 5a 8d 78 16 9f 6b 32

   md5     91 29 73 32 12 d5 f5 65 18 64 d8 6b 7b ae 0b 98


 3 Subject CN=COMODO RSA Certification Authority, O=COMODO CA Limited, L=Salford, ST=Greater Manchester, C=GB

   Issuer  CN=COMODO RSA Certification Authority, O=COMODO CA Limited, L=Salford, ST=Greater Manchester, C=GB

   sha1    af e5 d2 44 a8 d1 19 42 30 ff 47 9f e2 f8 97 bb cd 7a 8c b4

   md5     1b 31 b0 71 40 36 cc 14 36 91 ad c4 3e fd ec 18


Enter certificate to add to trusted keystore or 'q' to quit: [1]

2

여기서 2를 선택한 이유는 문제의 사이트에서 CA 인증서만 필요하기 때문입니다. 

root 인증서를 집어 넣어도 되지만... 난 그냥.. 되기만 하면 되니깐, CA 인증서만.... 


[

[

  Version: V3

  Subject: CN=COMODO RSA Organization Validation Secure Server CA, O=COMODO CA Limited, L=Salford, ST=Greater Manchester, C=GB

  Signature Algorithm: SHA384withRSA, OID = 1.2.840.113549.1.1.12


  Key:  Sun RSA public key, 2048 bits

  modulus: ....

  public exponent: 65537

  Validity: [From: Wed Feb 12 09:00:00 KST 2014,

               To: Mon Feb 12 08:59:59 KST 2029]

  Issuer: CN=COMODO RSA Certification Authority, O=COMODO CA Limited, L=Salford, ST=Greater Manchester, C=GB

  SerialNumber: [    36825e7f b5a48193 7ef6d173 6bb93ca6]


Certificate Extensions: 8

[1]: ObjectId: 1.3.6.1.5.5.7.1.1 Criticality=false

AuthorityInfoAccess [

  [

   accessMethod: caIssuers

   accessLocation: URIName: http://crt.comodoca.com/COMODORSAAddTrustCA.crt

,

   accessMethod: ocsp

   accessLocation: URIName: http://ocsp.comodoca.com

]

]


[2]: ObjectId: 2.5.29.35 Criticality=false

AuthorityKeyIdentifier [

KeyIdentifier [

....

]

]


[3]: ObjectId: 2.5.29.19 Criticality=true

BasicConstraints:[

  CA:true

  PathLen:0

]


[4]: ObjectId: 2.5.29.31 Criticality=false

CRLDistributionPoints [

  [DistributionPoint:

     [URIName: http://crl.comodoca.com/COMODORSACertificationAuthority.crl]

]]


[5]: ObjectId: 2.5.29.32 Criticality=false

CertificatePolicies [

  [CertificatePolicyId: [2.5.29.32.0]

[]  ]

  [CertificatePolicyId: [2.23.140.1.2.2]

[]  ]

]


[6]: ObjectId: 2.5.29.37 Criticality=false

ExtendedKeyUsages [

  serverAuth

  clientAuth

]


[7]: ObjectId: 2.5.29.15 Criticality=true

KeyUsage [

  DigitalSignature

  Key_CertSign

  Crl_Sign

]


[8]: ObjectId: 2.5.29.14 Criticality=false

SubjectKeyIdentifier [

KeyIdentifier [

....

]

]


]

  Algorithm: [SHA384withRSA]

  Signature:

....


]


Added certificate to keystore 'jssecacerts' using alias 'sample.kkus.com-2'

좀 은밀한 것은 가렸음... 


이제 추출 작업은 끝났으니.... 파일이 제대로 있는지 확인


$ ls

InstallCert.class  InstallCert.java  InstallCert$SavingTrustManager.class  jssecacerts

일단 추출을 해 봅니다. 


$ keytool -exportcert -keystore jssecacerts -storepass changeit -file output.cert -alias sample.kkus.com-2

-bash: keytool: command not found

오 지쟈스... 

우울하구만... 또 symbolic link다 

$ sudo ln -s /opt/jdk1.8.0_161/bin/keytool /usr/bin/keytool

$ keytool -exportcert -keystore jssecacerts -storepass changeit -file output.cert -alias sample.kkus.com-2

Certificate stored in file <output.cert>


이 다음은 추출한 인증서를 java_root에 있는 인증서에 삽입

$ JAVA_HOME=/opt/jdk1.8.0_161

$ keytool -importcert -keystore ${JAVA_HOME}/jre/lib/security/cacerts -storepass changeit -file output.cert -alias sample.kkus.com-2

Certificate was added to keystore


이렇게 작업 후에 문제를 해결했음...

 ㅁ client side


#1. gen key


ssh-keygen -t rsa -C "comment_server_name"

Enter file in which to save the key (/home/user/.ssh/id_rsa): /home/user/.ssh/my_ssh_key # 키이름을 넣음

Enter passphrase (empty for no passphrase): ********** # 최초 등록시 사용할 비밀문구를 입력함


-t : 키타입 [ rsa | dsa ]

-C : 코멘트. 없어도 상관없음


/home/user/.ssh/id_rsa

/home/user/.ssh/id_rsa.pub

키파일이 생김. 생성된 키파일중 pub 키 파일을 서버에 등록하면 됨. 


#2. pubkey 파일 전송


scp /home/user/.ssh/id_rsa.pub user@{host}:/home/user/.ssh/t_id_rsa.pub


 ㅁ server side

#3. authorized_keys생성

cd /home/user/.ssh

cat t_id_rsa.pub >> ~/.ssh/authorized_keys


만약 authorized_keys 파일이 없다면 생성되겠지만, 바로 적용 안됨. 

chmod 644 ~/.ssh/authoized-keys


java path 설정 바꾸려다가 c:\ProgramData\Oracle\Java\javapath 디렉토리의 심볼릭 링크를 날려먹음

cygwin을 설치해서 사용중인 관계로 ln -s "hear" "target"을 했으나 안됨. 


해결 방안. 

> ni java.exe -i SymbolicLink -ta "C:\Java\jre8\bin\java.exe"


'IT > WINDOW' 카테고리의 다른 글

Window update uninstall  (0) 2014.08.20
WINDOW7 부트로더 이름 바꾸기  (0) 2012.09.17

갑자기 외우고 싶어졌다. 이유는 모르겠지만, 어렸을 적에 외운척 한거 말고, 진짜로 천자의 한자를 외워 보고 싶어졌다. 


어떻게 암기를 해야 할지를 모르겠기 땜쉬롱, 바보처럼 한번 외워보자. 


天地玄黃 宇宙洪荒 日月盈昃 辰宿列張 寒來暑往 秋收冬藏 閏餘成歲 律呂調陽

천지현황 우주홍황 일월영측 진숙열장 한래서왕 추수동장 윤여성세 율려조양


雲騰致雨 露結爲霜 金生麗水 玉出崑岡 劍號巨闕 珠稱夜光 果珍李柰 菜重芥薑

운등치우 노결위상 금생여수 옥출곤강 검호거궐 주칭야광 과진이내 채중개강


海鹹河淡 鱗潛羽翔 龍師火帝 鳥官人皇 始制文字 乃服衣裳 推位讓國 有虞陶唐

해함하담 인잠우상 용사화제 조관인황 시제문자 내복의상 추위양국 유우도당


弔民伐罪 周發殷湯 坐朝問道 垂拱平章 愛育黎首 臣伏戎羌 遐邇壹體 率賓歸王

조민벌죄 주발은탕 좌조문도 수공평장 애육여수 신복융강 하이일체 솔빈귀왕


鳴鳳在樹 白駒食場 化被草木 賴及萬方 蓋此身髮 四大五常 恭惟鞠養 豈敢毁傷

명봉재수 백구식장 화피초목 뇌급만방 개차신발 사대오상 공유국양 기감훼상


女慕貞烈 男效才良 知過必改 得能莫忘 罔談彼短 靡恃己長 信使可覆 器欲難量

여모정열 남효재량 지과필개 득능막망 망담피단 미시기장 신사가복 기욕난량


墨悲絲染 詩讚羔羊 景行維賢 克念作聖 德建名立 形端表正 空谷傳聲 虛堂習聽

묵비사염 시찬고양 경행유현 극념작성 덕건명립 형단표정 공곡전성 허당습청


禍因惡積 福緣善慶 尺璧非寶 寸陰是競 資父事君 曰嚴與敬 孝當竭力 忠則盡命

화인악적 복연선경 척벽비보 촌음시경 자부사군 왈엄여경 효당갈력 충즉진명


臨深履薄 夙興溫凊 似蘭斯馨 如松之盛 川流不息 淵澄取暎 容止若思 言辭安定

임심리박 숙흥온청 사난사형 여송지성 천류불식 연징취영 용지약사 언사안정


篤初誠美 愼終宜令 榮業所基 籍甚無竟 學優登仕 攝職從政 存以甘棠 去而益詠

독초성미 신종의령 영업소기 적심무경 학우등사 섭직종정 존이감당 거이익영


樂殊貴賤 禮別尊卑 上和下睦 夫唱婦隨 外受傅訓 入奉母儀 諸姑伯叔 猶子比兒

악수귀천 예별존비 상화하목 부창부수 외수부훈 입봉모의 제고백숙 유자비아


孔懷兄弟 同氣連枝 交友投分 切磨箴規 仁慈隱惻 造次弗離 節義廉退 顚沛匪虧

공회형제 동기연지 교우투분 절마잠규 인자은측 조차불리 절의염퇴 전패비휴


性靜情逸 心動神疲 守眞志滿 逐物意移 堅持雅操 好爵自縻 都邑華夏 東西二京

성정정일 심동신피 수진지만 축물의이 견지아조 호작자미 도읍화하 동서이경


背邙面洛 浮渭據涇 宮殿盤鬱 樓觀飛驚 圖寫禽獸 畵綵仙靈 丙舍傍啓 甲帳對楹

배망면낙 부위거경 궁전반울 누관비경 도사금수 화채선령 병사방계 갑장대영


肆筵設席 鼓瑟吹笙 陞階納陛 弁轉疑星 右通廣內 左達承明 旣集墳典 亦聚群英

사연설석 고슬취생 승계납폐 변전의성 우통광내 좌달승명 기집분전 역취군영


杜藁鍾隸 漆書壁經 府羅將相 路俠槐卿 戶封八縣 家給千兵 高冠陪輦 驅轂振纓

두고종례 칠서벽경 부라장상 노협괴경 호봉팔현 가급천병 고관배련 구곡진영


世祿侈富 車駕肥輕 策功茂實 勒碑刻銘 磻溪伊尹 佐時阿衡 奄宅曲阜 微旦孰營

세록치부 거가비경 책공무실 늑비각명 반계이윤 좌시아형 엄택곡부 미단숙영


桓公匡合 濟弱扶傾 綺回漢惠 說感武丁 俊乂密勿 多士寔寧 晋楚更覇 趙魏困橫

환공광합 제약부경 기회한혜 열감무정 준예밀물 다사식녕 진초갱패 조위곤횡


假途滅虢 踐土會盟 何遵約法 韓弊煩刑 起翦頗牧 用軍最精 宣威沙漠 馳譽丹靑

가도멸괵 천토회맹 하준약법 한폐번형 기전파목 용군최정 선위사막 치예단청


九州禹跡 百郡秦幷 嶽宗恒岱 禪主云亭 雁門紫塞 鷄田赤城 昆池碣石 鉅野洞庭

구주우적 백군진병 악종항대 선주운정 안문자새 계전적성 곤지갈석 거야동정


曠遠綿邈 巖峀杳冥 治本於農 務玆稼穡 俶載南畝 我藝黍稷 稅熟貢新 勸賞黜陟

광원면막 암수묘명 치본어농 무자가색 숙재남묘 아예서직 세숙공신 권상출척


孟軻敦素 史魚秉直 庶幾中庸 勞謙謹勅 聆音察理 鑑貌辨色 貽厥嘉猷 勉其祗植

맹가돈소 사어병직 서기중용 노겸근칙 영음찰리 감모변색 이궐가유 면기지식


省躬譏誡 寵增抗極 殆辱近恥 林皐幸卽 兩疏見機 解組誰逼 索居閑處 沈默寂寥

생궁기계 총증항극 태욕근치 임고행즉 양소견기 해조수핍 삭거한처 침묵적요


求古尋論 散慮逍遙 欣奏累遣 慼謝歡招 渠荷的歷 園莽抽條 枇杷晩翠 梧桐早凋

구고심론 산려소요 흔주누견 척사환초 거하적력 원망추조 비파만취 오동조조


陳根委翳 落葉飄颻 遊鵾獨運 凌摩絳霄 耽讀翫市 寓目囊箱 易輶攸畏 屬耳垣牆

진근위예 낙엽표요 유곤독운 능마강소 탐독완시 우목낭상 이유유외 속이원장


具膳飱飯 適口充腸 飽飫烹宰 饑厭糟糠 親戚故舊 老少異糧 妾御績紡 侍巾帷房

구선손반 적구충장 포어팽재 기염조강 친척고구 노소이량 첩어적방 시건유방


紈扇圓潔 銀燭煒煌 晝眠夕寐 藍筍象床 絃歌酒讌 接杯擧觴 矯手頓足 悅豫且康

환선원결 은촉위황 주면석매 남순상상 현가주연 접배거상 교수돈족 열예차강


嫡後嗣續 祭祀蒸嘗 稽顙再拜 悚懼恐惶 牋牒簡要 顧答審詳 骸垢想浴 執熱願凉

적후사속 제사증상 계상재배 송구공황 전첩간요 고답심상 해구상욕 집열원량


驢騾犢特 駭躍超驤 誅斬賊盜 捕獲叛亡 布射僚丸 嵇琴阮嘯 恬筆倫紙 鈞巧任釣

여라독특 해약초양 주참적도 포획반망 포사료환 혜금완소 염필륜지 균교임조


釋紛利俗 竝皆佳妙 毛施淑姿 工嚬姸笑 年矢每催 曦暉朗耀 璇璣懸斡 晦魄環照

석분리속 병개가묘 모시숙자 공빈연소 연시매최 희휘낭요 선기현알 회백환조


指薪修祐 永綏吉邵 矩步引領 俯仰廊廟 束帶矜莊 徘徊瞻眺 孤陋寡聞 愚蒙等誚

지신수우 영수길소 구보인령 부앙낭묘 속대긍장 배회첨조 고루과문 우몽등초


謂語助者 焉哉乎也

위어조자 언재호야

몇개씩 어떻게 외울지는.. 한번 생각해 보고...


3일차


4일차


5일차



notepad

wusa /uninstall /kb:2982791 
wusa /uninstall /kb:2970228
wusa /uninstall /kb:2975719
wusa /uninstall /kb:2975331

save uninstall.bat


uninstall.bat 실행


'IT > WINDOW' 카테고리의 다른 글

[Windows 10] 심볼릭 링크 만들기  (0) 2018.01.16
WINDOW7 부트로더 이름 바꾸기  (0) 2012.09.17

+ Recent posts