Tokyo Insider Dev Tour という多分 Microsoft のイベントがあって微妙に興味あったんですが、イベントサイトが気に食わなかったために登録しませんでした。
簡単に言うと、サイトの正当性を確認しにくかったからです。
"%ProglamFiles%\Windows Defender\MpCmdRun.exe" -SignatureUpdate
をタスクスケジューラなどで叩けばOKっぽい?
参考:Windowsスマートチューニング (194) Win 7編: 一定時間毎にMicrosoft Security Essentialsの定義 | マイナビニュース
- そのままだと秘密鍵を含められないのでOpenSSLを使ってp12形式にしてみる。
[raw]
openssl pkcs12 -export -inkey server.key -in server.crt -out server.p12
[/raw] - インポート時の秘密鍵のパスワードを求められるので、入力。
- 作成されたp12ファイルをサーバーローカルに持って行ってインポート。証明書スナップインによるリモート接続だとサポートされていないと怒られる。。
参考
- Windows の CA 機能 (AD CS) についてのまとめ | ヘタレな趣味の道
- サード パーティの証明機関が SSL 経由で LDAP を有効にする方法
- How to enable LDAP over SSL with a third-party certification authority
- Event ID 1220 — LDAP over SSL
- LDAP over SSL (LDAPS) Certificate – TechNet Articles – United States (English) – TechNet Wiki
- JenkinsでAD連携できるまでの道のり – Togetter
メモ
- LDAPはport389、LDAPSはport636
- AD DSには特に何もしないでも普通にLDAPアクセスできる
- LDAPSアクセスするには証明書の用意が必要
- DC上にAD CSをインストールすれば自動的に利用できるようになる
- ただし、障害耐性やメンテを考慮すると、DCをCAとするのは推奨されない
- 独自の証明書をインストールする場合は、DC上のローカルコンピュータの個人ストアにインストールすればよい
- 2008以降はNTDSサービスアカウントの個人ストアもサポートされ、そちらが優先される
- 該当する証明書が複数ある場合、期限が長い証明書が自動的に選択される
- しかしながら、ややこしいので1つのみにすることが推奨されている
- 2008以降は証明書の切り替えに再起動は不要となった
- CA証明書は、Windowsストアへの配布はAD DSを利用して配布することが可能だが、Javaのような独自の証明書ストアを持つアプリケーションは参照してくれないという問題がある
※あまり詳しい事は調べてない。
内部httpサーバーが302responseを返した際に、Locationヘッダをhttpsに書き換えてくれないため、httpにリダイレクトされてしまう。
回避策は調べてない。
Squid3では’Front- End-Https: On’で対処可能な模様?
C:\example\>keytool -genkey -alias ssltest -keyalg RSA -keysize 512 -keypass password -validity 3650 -storetype JKS -keystore server_keystore -storepass password
姓名を入力してください。
[Unknown]: hostname
組織単位名を入力してください。
[Unknown]: ou
組織名を入力してください。
[Unknown]: o
都市名または地域名を入力してください。
[Unknown]: Japan
州名または地方名を入力してください。
[Unknown]: Tokyo
この単位に該当する 2 文字の国番号を入力してください。
[Unknown]: JP
CN=hostname, OU=ou, O=o, L=Japan, ST=Tokyo, C=JP でよろしいですか?
[no]: yes
C:\example\>keytool -selfcert -alias ssltest -validity 3650 -keystore server_keystore
[/raw]
JKSキーストアを事前に用意し、JavaオプションにhttpsPort
、httpsKeyStore
、httpsKeyStorePassword
を指定すれば良い。
[/xml]
これでhttps://localhost:8081/
でHTTPSアクセスできる。
RSAの話。
modulusをpublicKey.getModulus().toByteArray()
で取得した際くっついてくる符号ビットが曲者。。
※BigInteger#toByteArrayは符号ビット付き2の補数表現となる
符号ビット1bit + モジュラス本体1024bit(鍵長1024bitの場合) → 129ByteのByte配列
となるため、C#のRSAParameters.Modulus
に突っ込むには先頭の符号ビットに相当する1バイトを削って渡す必要がある。
ヘルプに何にも書いてないので謎だが、符号なしにしないとだめなようで。。
as3cryptoはそのまま突っ込んでも大丈夫なのに・・・
PrivateExponentはJavaでしか処理しないためそのままでも問題なく、PublicExponentについては17bit(65537固定)のデータのため、符号ビット”0″が付加されても無害。
(modulusは1024bit(8bitの倍数)なため符号ビットを付加するとあふれて129Byteになってしまうのが今回の場合問題となる)
キーペア作成@Java
//鍵作る
KeyPairGenerator generator = KeyPairGenerator.getInstance(“RSA”);
generator.initialize(2048);
KeyPair keyPair = generator.generateKeyPair();
RSAPrivateKey privateKey = (RSAPrivateKey)keyPair.getPrivate(); //Javaでとっとく
RSAPublicKey publicKey = (RSAPublicKey)keyPair.getPublic();
//modulusの先頭符号ビットを除去
byte[] modulusBytes = stripLeadingZeros(publicKey.getModulus().toByteArray());
//Bse64エンコードしてC#へわたす
BASE64Encoder encoder = new BASE64Encoder();
String modulus = encoder.encode(modulusBytes); //→C#に渡す
String publicExponent = encoder.encode(publicKey.getPublicExponent().toByteArray()); //→C#に渡す
[/java]
暗号化@C#
//鍵の取り込み
RSAParameters rsaParams = new RSAParameters();
rsaParams.Modulus = Convert.FromBase64String(modulus); //Javaから受け取る
rsaParams.Exponent = Convert.FromBase64String(exponent); //Javaから受け取る
RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();
rsaProvider.ImportParameters(rsaParams);
//暗号化してJavaに渡す
byte[] targetBytes = new UTF8Encoding().GetBytes(target); //target:暗号化対象文字列。UTF-8でバイト配列化
//とりあえずPKCS#1パディング。第二引数をtrueにすればOAEPパディングも使える。
byte[] resultBytes = rsaProvider.Encrypt(targetBytes, false);
string result = Convert.ToBase64String(resultBytes); //Javaに返す
[/csharp]
復号化@Java
BASE64Decoder decoder = new BASE64Decoder();
byte[] src = decoder.decodeBuffer(cryptedData); //cryptedData:C#から受け取る
//ここでパディングや暗号化サービスプロバイダを指定できる。
//”RSA”は”RSA/ECB/PKCS1Padding”と同じ。
Cipher cipher = Cipher.getInstance(“RSA”);
cipher.init(Cipher.DECRYPT_MODE, privateKey); //とっておいた秘密鍵で初期化
byte[] resultBytes = cipher.doFinal(src);
String result = new String(resultBytes, “UTF-8”); //復号結果。UTF-8で復元
[/java]
- 2012 年 7 月のセキュリティ情報
-
ISC Diary | Microsoft July 2012 Black Tuesday Update – Overview
MS12-043, MS12-046の2つがPATCH NOW。Is used according to Microsoft in limited targeted attacks.
-
Gadgets, certificate housekeeping and the July 2012 bulletins – MSRC – Site Home – TechNet Blogs
-
マイクロソフト セキュリティ アドバイザリ (2719662): ガジェットの脆弱性により、リモートでコードが実行される
-
マイクロソフト セキュリティ アドバイザリ (2728973): 承認されていないデジタル証明書により、なりすましが行われる
-
MSXML – 5 steps to stay protected – Security Research & Defense – Site Home – TechNet Blogs
- Archive
- DebugPlayer
- Uninstaller
- 最新版直リンク(Windows)
- http://fpdownload.macromedia.com/pub/flashplayer/latest/help/install_flash_player_ax.exe
- http://fpdownload.macromedia.com/pub/flashplayer/latest/help/install_flash_player.exe
- http://fpdownload.macromedia.com/pub/flashplayer/latest/help/install_flash_player_ppapi.exe
- http://download.macromedia.com/get/flashplayer/current/support/uninstall_flash_player.exe
- Installation problems | Flash Player | Windows