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のポートを占領しているサービスを殺る
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からうまく認証できなかった。。。)
# 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/
ハマッタ場所
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(); }
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 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; }; }
Linux
サーバ構築
Windows
Java
Program