Think Twice

Memorandum

ideaのproxy設定をしようとしたら、man-in-the-middle attackを受けていたでござる。

                        やつを追う前に言っておくッ!
                    おれは今やつのスタンドをほんのちょっぴりだが体験した
                  い…いや…体験したというよりはまったく理解を超えていたのだが……
         ,. -‐'''''""¨¨¨ヽ
         (.___,,,... -ァァフ|          あ…ありのまま 今 起こった事を話すぜ!
          |i i|    }! }} //|
         |l、{   j} /,,ィ//|       『おれは奴の前で階段を登っていたと
        i|:!ヾ、_ノ/ u {:}//ヘ        思ったらいつのまにか降りていた』
        |リ u' }  ,ノ _,!V,ハ |
       /´fト、_{ル{,ィ'eラ , タ人        な… 何を言ってるのか わからねーと思うが
     /'   ヾ|宀| {´,)⌒`/ |<ヽトiゝ        おれも何をされたのかわからなかった…
    ,゙  / )ヽ iLレ  u' | | ヾlトハ〉
     |/_/  ハ !ニ⊇ '/:}  V:::::ヽ        頭がどうにかなりそうだった…
    // 二二二7'T'' /u' __ /:::::::/`ヽ
   /'´r -―一ァ‐゙T´ '"´ /::::/-‐  \    催眠術だとか超スピードだとか
   / //   广¨´  /'   /:::::/´ ̄`ヽ ⌒ヽ    そんなチャチなもんじゃあ 断じてねえ
  ノ ' /  ノ:::::`ー-、___/::::://       ヽ  }
_/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::...       イ  もっと恐ろしいものの片鱗を味わったぜ…

IntelliJ IDEAで社内のproxy経由でgradle使用するとして設定したときに気づいた。

社内はproxyを通してインターネット接続しているので、
まずはproxyの設定
File>Settings でSettings画面を表示。
Appearance & Behavior > System Settings > HTTP proxy

Manual Proxy configurationをこんな感じで設定。(proxy.pacで設定したかったけど、うまくいかず…)
f:id:mix-juice001:20141203222422p:plain

Check connection でhttp://www.google.comへの接続を確認してOK。

gradleをrefreshしようとすると、こんなエラーが発生。

Problem with connection: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

先ほどのproxy setteingの画面でCheck connectionをhttpsで試してみると、同じエラーが。
f:id:mix-juice001:20141203222418p:plain

ググってみるとjavaオレオレ証明書では接続できないとのこと。
オレオレ証明書なんか使ってないのになぁ~と思いながらも確認してみると…

f:id:mix-juice001:20141203222426p:plain

なんと、httpsの通信を横取りするためのオレオレ証明書が知らぬ間にパソコンに入っている!!
うちの会社の環境はナチュラルにman-in-the-middle状態じゃないか!!!

仮にもシステム会社なのに、なんでこんなことになっているんだ。
ホントしょうもないことをする。

気を取り直して、オレオレ証明書でも接続できるようにする。

ここ(http://code.google.com/p/java-use-examples/source/browse/trunk/src/com/aw/ad/util/InstallCert.java
にあるInstallCert.javaコンパイルして実行すれば、OKのはずなのだけれど、
接続がタイムアウトしてできない。

java InstallCert xxx.xxx.xxx.xxx:8080 changeit


気を取り直して、
keytoolでcacertに設定を追加できるようなので、やってみる。
certmgr.mscを起動して、先ほどのオレオレ証明書をエクスポートする。
f:id:mix-juice001:20141203222354p:plain

keytoolにPathを通して、

C:\>keytool -importcert -v -trust
cacerts -file \Users\xxxxxxxx\Desktop\oreore.cer -keystore "\Program Files\JetBrains\IntelliJ IDEA Community Edition 14.0.1\jre\jre\lib\security\cacerts" -alias aliasName

aliasは指定しないとmykeyになる。
私の環境ではC:\の下のファイルを変更するには管理者の権限が必要で、
そのままではkeytoolが失敗するので、
デスクトップにcacertをコピーしてkeytoolを実行後、目的の場所にコピペした。
キーストアのデフォルトのパスワードはchangeit

所有者: CN=ABL-CA, DC=ABL, DC=com
発行者: CN=ABL-CA, DC=ABL, DC=com
シリアル番号: 2bd7ef9c2afac79b470d0acc131eefc4
有効期間の開始日: Fri Mar 08 11:08:25 JST 2013終了日: Wed Mar 08 11:18:23 JST 20
23
証明書のフィンガプリント:
MD5: 63:E5:B1:3C:65:08:7A:2E:92:8F:27:D0:57:68:55:9A
SHA1: 5E:B1:AD:3F:E4:E2:1A:AD:11:EC:B5:E7:DB:C6:35:F7:60:18:15:9A
SHA256: 0C:DF:0E:00:7F:EF:3D:35:D5:06:C7:9D:50:2E:46:97:70:3F:7D:90:F9:
51:F0:04:C3:27:CF:80:E2:99:D8:10
署名アルゴリズム名: SHA256withRSA
バージョン: 3
拡張:
#1: ObjectId: 1.3.6.1.4.1.311.20.2 Criticality=false
0000: 1E 04 00 43 00 41 ...C.A

#2: ObjectId: 1.3.6.1.4.1.311.21.1 Criticality=false
0000: 02 01 00 ...

#3: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
CA:true
PathLen:2147483647
]
#4: ObjectId: 2.5.29.15 Criticality=false
KeyUsage [
DigitalSignature
Key_CertSign
Crl_Sign
]
#5: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 8B EF DE 57 F9 C0 80 B7 45 87 53 13 5D A8 D7 1C ...W....E.S.]...
0010: 99 A0 3F 32 ..?2
]
]
この証明書を信頼しますか。 [いいえ]: y
証明書がキーストアに追加されました
[\Users\takumasetoguchi\Desktop\cacertsを格納中]

これで、javaオレオレ証明書を認識できるようになった!

でもまだ続く。