ラベル java の投稿を表示しています。 すべての投稿を表示
ラベル java の投稿を表示しています。 すべての投稿を表示

2015年6月20日土曜日

Javaでクライアント認証の読込み 


Javaでクライアント認証を読込み PKCS#12

証明書は以下を見て作るとよい
http://server-setting.info/centos/apache-ssl-auth-setting.html

下記は、だいたいこんな感じぐらいで
環境を忘れて確認できなくなったので間違っているかも。。。。。

import java.io.FileInputStream;
import java.security.KeyStore;
import java.util.ArrayList;
import java.util.List;

import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;

import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicHeader;
import org.apache.http.util.EntityUtils;


public class App
{

    static final String P12FILE = "cert.p12";
    static final char[] PASSWORD = "pass".toCharArray();

    private static SSLContext getSslContext() {
        // PKCS12ファイル読み込み
        KeyManagerFactory keyManagerFactory;
        try (FileInputStream inputStream = new FileInputStream(P12FILE)) {
            KeyStore keyStore = KeyStore.getInstance("PKCS12");
            keyStore.load(inputStream, PASSWORD);

            keyManagerFactory = KeyManagerFactory.getInstance("SunX509");
            keyManagerFactory.init(keyStore, PASSWORD);

            SSLContext sslContext = SSLContext.getInstance("TLS");
            sslContext.init(keyManagerFactory.getKeyManagers(), null, null);
            return sslContext;

        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) throws Exception {
        int socketTimeout = 60000;
        int connectionTimeout = 60000;
        String userAgent = "My Http Client 0.1";
        // request configuration
        RequestConfig requestConfig = RequestConfig.custom()
                .setConnectTimeout(connectionTimeout)
                .setSocketTimeout(socketTimeout)
                .build();
        // headers
        List<Header> headers = new ArrayList<Header>();
        headers.add(new BasicHeader("Accept-Charset", "utf-8"));
        headers.add(new BasicHeader("Accept-Language", "ja, en;q=0.8"));
        headers.add(new BasicHeader("User-Agent", userAgent));
        // create client
        HttpClient httpClient = HttpClientBuilder.create()
                .setDefaultRequestConfig(requestConfig)
                .setDefaultHeaders(headers).setSSLContext(getSslContext())
                .build();

        HttpGet httpGet = new HttpGet("https://mixi.jp/");
        HttpResponse response = httpClient.execute(httpGet);
        int responseStatus = response.getStatusLine().getStatusCode();
        String body = EntityUtils.toString(response.getEntity(), "UTF-8");
        System.out.println(body);
    }
}

2014年11月3日月曜日

ganymed-ssh2を使ってコマンド実行

ganymed-ssh2を使ってコマンド実行 一回ごとに実行していか確認

引数 host port username password コマンドファイル
コマンドファイル1行を1コマンドとして実行

POM
 
  ch.ethz.ganymed
  ganymed-ssh2
  262
 
Java
package jp.tuyoyun.metatrader.sshclient;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.Scanner;

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;

public class App
{
 private static Scanner scan;

 public static void main(String[] args) throws Exception
 {
  Connection con = new Connection(args[0], Integer.parseInt(args[1]));
  con.connect();
  con.authenticateWithPassword(args[2], args[3]);
  File file = new File(args[4]);
  InputStream stream = new FileInputStream(file);
  BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "UTF8"));
  String line = reader.readLine();
  while (line != null) {
   System.out.println("\ncommand----------------------------------------------------\n");
   System.out.println(line);
   System.out.println("-----------------------------------------------------------\n");
   boolean confirm = confirm();
   if (!confirm) {
    scan.close();
    reader.close();
    stream.close();
    con.close();
    return;
   }
   exec(con, line);
   line = reader.readLine();
  }
  scan.close();
  reader.close();
  stream.close();
  con.close();
 }

 private static boolean confirm() {
  System.out.println("execute command? y/n");
  scan = new Scanner(System.in);
  String confirm = scan.next();
  if ("y".equals(confirm)) {
   return true;
  }
  else if ("n".equals(confirm)) {
   return false;
  } else {
   return confirm();
  }
 }

 private static void exec(Connection con, String cmd) throws IOException, InterruptedException {
  Session session = con.openSession();
  session.execCommand(cmd);
  InputStream inputStream = session.getStdout();
  readResult(inputStream);
  inputStream = session.getStderr();
  readResult(inputStream);
  session.close();
 }

 private static void readResult(InputStream inputStream) throws UnsupportedEncodingException, IOException {
  BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF8"));
  String line = reader.readLine();
  while (line != null) {
   System.out.println(line);
   line = reader.readLine();
  }
  reader.close();
  inputStream.close();
 }
}

2013年7月13日土曜日

java スタックなど

java 問題解析に

jstack でスレッドダンプを取る
http://aoking.hatenablog.jp/entry/20120629/1340965676


サーバから応答がない!そんな時はスレッドダンプです
http://advpro.co.jp/Devlop/?p=365


あなたの知らないJDKの便利ツールたち
http://www.atmarkit.co.jp/fjava/column/andoh/andoh43.html


JavaVMのメモリ領域について
http://d.hatena.ne.jp/tanakakns/20120508/1336467306

2013年6月25日火曜日

InstallCertでJREに証明書インポート

InstallCertの使い方がわかったのでちょっと書いておく

InstallCert.java

http://code.google.com/p/java-use-examples/source/browse/trunk/src/com/aw/ad/util/InstallCert.java

<使い方>

java InstallCert [ホスト]:[ポート]


実行すると%JAVA_HOME%/lib/security/jssecacerts を読み込む
なければcacertsを読み込み 

ホストに接続して、必要な証明書を追加したものを実行ディレクトリにjssecacertsというファイル名で
出力してくれる

なので、jssecacertsを%JAVA_HOME%/lib/security/cacertsというファイルと置き換えるとよい

これは色々使えるかも?