SSLメモ


SSLメモ

(Windows) SSLサーバ構築

http://www.aconus.com/~oyaji/www/apache_win_ssl.htm を参考

ハマッタ場所

1.OpenSSL対応のApacheをインストール
2.同じバージョンのOpenSSLをインストール
3.http.conf、ssl.confを修正時、HTTP用のDocumentRootとSSL用のDocumentRootはそれぞれ別であることに注意
4.Apacheを起動する際に「-D SSL」オプションをつける
5.ポート重複がどうこうのエラーが出る場合は、IISとかWebClientのポートを占領しているサービスを殺る

(Windows) サーバの証明書発行

http://www.aconus.com/~oyaji/www/certs_win.htm を参考

主なコマンド (実行する前にOpenSSL\bin以下にPATHを通しておき、CA.plをPerlに関連付けしておくこと)

>CA.pl -newreq-nodes
>openssl x509 -in ./demoCA/cacert.pem -out ./demoCA/cacert.crt
>CA.pl -newreq-nodes
>CA.pl -sign
>openssl x509 -in newcert.pem -out server.crt
>openssl req -new -x509 -nodes -out server.crt -keyout server.key -days 365
>(Apacheのssl.confでSSLCertificateFileに指定している場所にserver.crtをコピー)
>(Apacheのssl.confでSSLCertificateKeyFileに指定している場所にserver.keyをコピー)

ハマッタ場所

1.サーバ証明書の Common Name に「localhost」は指定してはダメ。。。
   (Javaからうまく認証できなかった。。。)

(Linux) サーバ証明書発行

# cd /usr/share/ssl/private
# openssl genrsa -des 1024 > ./server.key
# openssl rsa -in ./server.key -out ./server.key
# chmod 600 ./server.key
# openssl req -new -days 365 -key ./server.key -out ./csr.pem

Country Name (2 letter code) [AU]:JP ---> 国名
State or Province Name (full name) [Some-State]:Tokyo ---> 都道府県名
Locality Name (eg, city) []:. ---> 市町村名
Organization Name (eg, company) [Internet Widgits Pty Ltd]:. ---> 会社名
Organizational Unit Name (eg, section) []:. ---> 部門名
Common Name (eg, your name or your server's hostname) []:localhost ---> サーバー名
Email Address []:. ---> Eメールアドレス

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:. ---> パスワード
An optional company name []:. ---> 別会社名

# openssl x509 -in ./csr.pem -out ./server.crt -req -signkey ./server.key

# cp server.crt /usr/local/apache2/conf/
# cp server.key /usr/local/apache2/conf/

JavaでSSL通信

ハマッタ場所

1.Javaは1.4以上
2.keystoreをcacertsに追加
     >keytool -import -trustcacerts -file c:\etc\server.crt -alias localhost
3.KeyStoreを作成する (j2sdk1.4.2_12\bin\keytoolを使用)
      >keytool -import -file c:\etc\server.crt -alias localhost -keystore c:\etc\keystore
      (keystoreを指定しない場合は j2sdk1.4.2_12\jre\lib\security 以下の cacerts に)
4.作ったKeyStoreをSystem.setPropertyで指定もしくはVM引数で指定
    引数の場合「-Djavax.net.ssl.trustStore=c:\etc\keytrust」

ソース

	public static void main(String[] args) throws MalformedURLException,
			ProtocolException, IOException {

		//		System.setProperty("https.proxyHost", "proxy.moke.jp");
		//		System.setProperty("https.proxyPort", "10080");

		System.setProperty("javax.net.ssl.trustStore", "C:\\etc\\keytrust");
		System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

		URL url = new URL("https://mokemoke/a.txt");

		HttpURLConnection urlconn = (HttpURLConnection) url.openConnection();
		urlconn.setRequestMethod("GET");
		urlconn.setInstanceFollowRedirects(false);
		urlconn.setRequestProperty("Accept-Language", "ja;q=0.7,en;q=0.3");

		urlconn.connect();

		Map headers = urlconn.getHeaderFields();
		Iterator it = headers.keySet().iterator();
		System.out.println("レスポンスヘッダ:");
		while (it.hasNext()) {
			String key = (String) it.next();
			System.out.println("  " + key + ": " + headers.get(key));
		}

		System.out.println("レスポンスコード[" + urlconn.getResponseCode() + "] "
				+ "レスポンスメッセージ[" + urlconn.getResponseMessage() + "]");
		System.out.println("\n---- ボディ ----");

		BufferedReader reader = new BufferedReader(new InputStreamReader(
				urlconn.getInputStream()));

		while (true) {
			String line = reader.readLine();
			if (line == null) {
				break;
			}
			System.out.println(line);
		}

		reader.close();
		urlconn.disconnect();
	}

WSSecurityException? が出て動かない・・・

org.apache.ws.security.WSSecurityException: WSHandler: Encryption:
error during message processingorg.apache.ws.security.WSSecurityException:
An unsupported signature or encryption algorithm was used
(unsupported key transport encryption algorithm: no provider:
http://www.w3.org/2001/04/xmlenc#rsa-1_5)

上記エラーが出た場合、おそらく、Bouncy Castle Crypto Library にパスが 通っていない。 Java標準では AFAIK を要求する RSA をサポートしていないので、 上記ライブラリを classpath に入れる必要がある。 (参考:http://bouncycastle.org/http://docs.safehaus.org/display/PENROSE/Installing+Security+Provider

IISのサーバ証明書署名要求にOpenSSLで署名

参考:IIS + OpenSSL
     http://frog.raindrop.jp/knowledge/archives/000090.html
1. certreq.txt (IISで作ったサーバ証明書署名要求) を用意
  - 既定のWebサイト右クリック>プロパティ>ディレクトリセキュリティ>サーバー証明書)
    ※ ここで入力した国名などは、後でopensslを使用して同じ値で入力しなければいけないため
       英語のが便利

2. 認証局(CA)用の秘密鍵作成
  >openssl genrsa -out CA秘密鍵.pem 1024

3. 認証局の公開鍵を含む証明書を作成
  >openssl req -new -x509 -config OpenSSL設定ファイル -key CA秘密鍵.pem -out CA証明書.pem
  (ここでの国名などはIISの署名要求ファイルに合わせる)

4. 作成した証明書をクライアントにインストールできる形(DER)に変換
  >openssl x509 -inform pem -outform der -in CA証明書.pem -out raindrop.der

5. サーバの証明書署名要求に署名
  >openssl ca -config OpenSSL設定ファイル -days 365 -out 署名済み証明書ごみ付.cer -infiles certreq.txt
  >openssl x509 -in 署名済み証明書ごみ付.cer -out 署名済み証明書.cer

6. 署名済み証明書をIISにインストール

無条件でオレオレ証明を信用する

               if (System.Net.ServicePointManager.ServerCertificateValidationCallback == null)
               {
                   // 無条件でオレオレ証明を信用する。危険!(senderのURIとか調べてチェックすべし!)
                   System.Net.ServicePointManager.ServerCertificateValidationCallback +=
                       delegate(
                           Object sender,
                           System.Security.Cryptography.X509Certificates.X509Certificate certificate,
                           System.Security.Cryptography.X509Certificates.X509Chain chain,
                           System.Net.Security.SslPolicyErrors sslPolicyErrors)
                       {
                           return true;
                       };
               }

Menu

Linux

サーバ構築

Windows

Java

Program

 

最新の20件

2008-04-02 2008-03-11 2008-01-28 2008-01-21 2007-11-27 2007-09-19 2007-06-07 2007-04-11 2007-04-06 2007-03-22 2006-12-20 2006-12-05 2006-12-04 2006-10-27 2006-09-22 2006-07-03 2006-05-16