﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-我爱佳娃-随笔分类-SSL</title><link>http://www.blogjava.net/alwayscy/category/17978.html</link><description>&lt;br&gt;
有兴趣可以访问下我的生活博客：&lt;a href="http://qqmovie.qzone.com"&gt;qqmovie.qzone.com&lt;/a&gt;</description><language>zh-cn</language><lastBuildDate>Tue, 13 Nov 2012 00:41:04 GMT</lastBuildDate><pubDate>Tue, 13 Nov 2012 00:41:04 GMT</pubDate><ttl>60</ttl><item><title>转的:果然是5分钟配成TOMCAT使用SSL(https)</title><link>http://www.blogjava.net/alwayscy/archive/2012/11/12/391235.html</link><dc:creator>我爱佳娃</dc:creator><author>我爱佳娃</author><pubDate>Mon, 12 Nov 2012 15:17:00 GMT</pubDate><guid>http://www.blogjava.net/alwayscy/archive/2012/11/12/391235.html</guid><wfw:comment>http://www.blogjava.net/alwayscy/comments/391235.html</wfw:comment><comments>http://www.blogjava.net/alwayscy/archive/2012/11/12/391235.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alwayscy/comments/commentRss/391235.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alwayscy/services/trackbacks/391235.html</trackback:ping><description><![CDATA[<h1><a href="http://loianegroner.com/2011/06/setting-up-ssl-on-tomcat-in-5-minutes-httpslocalhost8443/" rel="bookmark" title="Permanent Link to Setting Up SSL on Tomcat in 5 minutes (https://localhost:8443)" style="outline: none; text-decoration: none; color: #336699; ">Setting Up SSL on Tomcat in 5 minutes (https://localhost:8443)</a></h1><div style="margin: 0px 0px 20px; padding-bottom: 5px; font-family: 'Yanone Kaffeesatz', arial, helvetica, sans-serif; border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: #dddddd; color: #666666; line-height: 19.200000762939453px; background-color: #f5f5f5; ">June 30, 2011 |&nbsp;By&nbsp;<a href="http://loianegroner.com/author/loiane/" title="Posts by Loiane" rel="author" style="outline: none; text-decoration: none; color: #336699; ">Loiane</a></div><p style="margin-top: 0px; margin-bottom: 15px; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">This tutorial will walk you through how to configure&nbsp;<strong>SSL&nbsp;</strong>(<strong>https://localhost:8443</strong>&nbsp;access) on&nbsp;<strong>Tomcat&nbsp;</strong>in 5 minutes.</p><p style="margin-top: 0px; margin-bottom: 15px; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; "><a href="http://loianegroner.com/wp-content/uploads/2011/06/apache-tomcat.png" style="outline: none; text-decoration: none; color: #336699; "><img size-full=""  wp-image-1001"="" title="apache-tomcat" src="http://loianegroner.com/wp-content/uploads/2011/06/apache-tomcat.png" alt="apache tomcat Setting Up SSL on Tomcat in 5 minutes (https://localhost:8443)" width="208" height="207" style="border: 1px solid #dddddd; display: block; margin: 0px auto 15px; float: none; clear: both; max-width: 97%; padding: 3px; background-color: #ffffff; height: auto; background-position: initial initial; background-repeat: initial initial; " /></a></p><p style="margin-top: 0px; margin-bottom: 15px; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">For this tutorial you will need:</p><ul style="margin-left: 20px; padding: 0px; list-style-type: none; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; "><li style="list-style-type: none; padding: 0px 0px 0px 18px; margin: 0px 0px 2px; background-image: url(http://loianegroner.com/wp-content/themes/wp-responsive/images/bullet.png); background-position: 0px 1px; background-repeat: no-repeat no-repeat; "><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank" style="outline: none; text-decoration: none; color: #336699; ">Java SDK</a>&nbsp;(used version 6 for this tutorial)</li><li style="list-style-type: none; padding: 0px 0px 0px 18px; margin: 0px 0px 2px; background-image: url(http://loianegroner.com/wp-content/themes/wp-responsive/images/bullet.png); background-position: 0px 1px; background-repeat: no-repeat no-repeat; "><a href="http://tomcat.apache.org/" target="_blank" style="outline: none; text-decoration: none; color: #336699; ">Tomcat&nbsp;</a>(used version 7 for this tutorial)</li></ul><p style="margin-top: 0px; margin-bottom: 15px; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">The set up consists in 3 basic steps:</p><ol style="margin-left: 40px; padding: 0px; list-style-type: none; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; "><li style="list-style-type: decimal; margin-left: 0px; padding-left: 0px; ">Create a&nbsp;<strong>keystore&nbsp;</strong>file using Java</li><li style="list-style-type: decimal; margin-left: 0px; padding-left: 0px; ">Configure Tomcat to use the keystore</li><li style="list-style-type: decimal; margin-left: 0px; padding-left: 0px; ">Test it</li><li style="list-style-type: decimal; margin-left: 0px; padding-left: 0px; ">(Bonus ) Configure your app to work with SSL (access through https://localhost:8443/yourApp)</li></ol><h2>1 &#8211; Creating a Keystore file using Java</h2><p style="margin-top: 0px; margin-bottom: 15px; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">Fisrt, open the terminal on your computer and type:</p><p style="margin-top: 0px; margin-bottom: 15px; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; "><strong>Windows</strong>:</p><pre bash;="" collapse:=""  false;="" first-line:=""  1;="" title:=""  ;="" toolbar:=""  true;="" wrap-lines:=""  notranslate"="" title="" style="color: #666666; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">cd %JAVA_HOME%/bin </pre><p style="margin-top: 0px; margin-bottom: 15px; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; "><strong>Linux or Mac OS</strong>:</p><pre bash;="" collapse:=""  false;="" first-line:=""  1;="" title:=""  ;="" toolbar:=""  true;="" wrap-lines:=""  notranslate"="" title="" style="color: #666666; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">cd $JAVA_HOME/bin </pre><p style="margin-top: 0px; margin-bottom: 15px; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">The $JAVA_HOME on Mac is located on &#8220;<strong>/System/Library/Frameworks/JavaVM.framework/Versions/{your java version}/Home/</strong>&#8221;</p><p style="margin-top: 0px; margin-bottom: 15px; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">You will change the current directory to the directory Java is installed on your computer. Inside the Java Home directory, cd to the bin folder. Inside the bin folder there is a file named keytool. This guy is responsible for generating the keystore file for us.</p><p style="margin-top: 0px; margin-bottom: 15px; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">Next, type on the terminal:</p><pre bash;="" collapse:=""  false;="" first-line:=""  1;="" title:=""  ;="" toolbar:=""  true;="" wrap-lines:=""  notranslate"="" title="" style="color: #666666; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">keytool -genkey -alias tomcat -keyalg RSA </pre><p style="margin-top: 0px; margin-bottom: 15px; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">When you type the command above, it will ask you some questions. First, it will ask you to create a password (My password is &#8220;<em>password</em>&#8220;):</p><pre bash;="" collapse:=""  false;="" first-line:=""  1;="" title:=""  ;="" toolbar:=""  true;="" wrap-lines:=""  notranslate"="" title="" style="color: #666666; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">loiane:bin loiane$ keytool -genkey -alias tomcat -keyalg RSA Enter keystore password:  password Re-enter new password: password What is your first and last name?   [Unknown]:  Loiane Groner What is the name of your organizational unit?   [Unknown]:  home What is the name of your organization?   [Unknown]:  home What is the name of your City or Locality?   [Unknown]:  Sao Paulo What is the name of your State or Province?   [Unknown]:  SP What is the two-letter country code for this unit?   [Unknown]:  BR Is CN=Loiane Groner, OU=home, O=home, L=Sao Paulo, ST=SP, C=BR correct?   [no]:  yes  Enter key password for 	(RETURN if same as keystore password):  password Re-enter new password: password </pre><p style="margin-top: 0px; margin-bottom: 15px; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">It will create a .keystore file on your user home directory. On Windows, it will be on:&nbsp;C:\Documents and Settings\[username]; on Mac it will be on&nbsp;/Users/[username] and on Linux will be on&nbsp;/home/[username].</p><h2>2 &#8211; Configuring Tomcat for using the keystore file &#8211; SSL config</h2><p style="margin-top: 0px; margin-bottom: 15px; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">Open your Tomcat installation directory and open the&nbsp;<strong><em>conf&nbsp;</em></strong>folder. Inside this folder, you will find the&nbsp;<em><strong>server.xml</strong></em>&nbsp;file. Open it.</p><p style="margin-top: 0px; margin-bottom: 15px; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">Find the following declaration:</p><pre xml;="" collapse:=""  false;="" first-line:=""  1;="" title:=""  ;="" toolbar:=""  true;="" wrap-lines:=""  notranslate"="" title="" style="color: #666666; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">&lt;!-- &lt;Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"     maxThreads="150" scheme="https" secure="true"     clientAuth="false" sslProtocol="TLS" /&gt; --&gt; </pre><p style="margin-top: 0px; margin-bottom: 15px; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">Uncomment it and modify it to look like the following:</p><pre xml;="" collapse:=""  false;="" first-line:=""  1;="" highlight:=""  [3,4,5];="" title:=""  ;="" toolbar:=""  true;="" wrap-lines:=""  notranslate"="" title="" style="color: #666666; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">Connector SSLEnabled="true" acceptCount="100" clientAuth="false"     disableUploadTimeout="true" enableLookups="false" maxThreads="25"     port="8443" keystoreFile="/Users/loiane/.keystore" keystorePass="password"     protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https"     secure="true" sslProtocol="TLS" /&gt; </pre><p style="margin-top: 0px; margin-bottom: 15px; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">Note we add the&nbsp;<em><strong>keystoreFile</strong></em>,&nbsp;<em><strong>keystorePass&nbsp;</strong></em>and changed the&nbsp;<em><strong>protocol&nbsp;</strong></em>declarations.</p><h2>3 &#8211; Let&#8217;s test it!</h2><p style="margin-top: 0px; margin-bottom: 15px; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">Start tomcat service and try to access&nbsp;<span style="text-decoration: underline; "><strong>https://localhost:8443</strong></span>. You will see Tomcat&#8217;s local home page.</p><p style="margin-top: 0px; margin-bottom: 15px; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">Note if you try to access the default 8080 port it will be working too:&nbsp;<span style="text-decoration: underline; "><strong>http://localhost:8080</strong></span></p><h2>4 &#8211; BONUS -&nbsp;Configuring your app to work with SSL (access through https://localhost:8443/yourApp)</h2><p style="margin-top: 0px; margin-bottom: 15px; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">To force your web application to work with SSL, you simply need to add the following code to your&nbsp;<strong>web.xml</strong>&nbsp;file (before&nbsp;<em>web-app</em>&nbsp;tag ends):</p><pre xml;="" collapse:=""  false;="" first-line:=""  1;="" title:=""  ;="" toolbar:=""  true;="" wrap-lines:=""  notranslate"="" title="" style="color: #666666; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">&lt;security-constraint&gt; 	&lt;web-resource-collection&gt; 		&lt;web-resource-name&gt;securedapp&lt;/web-resource-name&gt; 		&lt;url-pattern&gt;/*&lt;/url-pattern&gt; 	&lt;/web-resource-collection&gt; 	&lt;user-data-constraint&gt; 		&lt;transport-guarantee&gt;CONFIDENTIAL&lt;/transport-guarantee&gt; 	&lt;/user-data-constraint&gt; &lt;/security-constraint&gt; </pre><p style="margin-top: 0px; margin-bottom: 15px; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">The&nbsp;<em><strong>url pattern</strong></em>&nbsp;is set to&nbsp;<strong>/*</strong>&nbsp;so any page/resource from your application is secure (it can be only accessed with&nbsp;<strong>https</strong>). The&nbsp;<em><strong>transport-guarantee</strong></em>&nbsp;tag is set to&nbsp;<strong>CONFIDENTIAL&nbsp;</strong>to make sure your app will work on&nbsp;<strong>SSL</strong>.</p><p style="margin-top: 0px; margin-bottom: 15px; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">If you want to turn off the SSL, you don&#8217;t need to delete the code above from web.xml, simply change<strong>CONFIDENTIAL</strong>&nbsp;to&nbsp;<strong>NONE</strong>.</p><p style="margin-top: 0px; margin-bottom: 15px; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; "><em><strong>Reference</strong></em>:&nbsp;<a href="http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html" style="outline: none; text-decoration: none; color: #336699; ">http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html</a>&nbsp;(this tutorial is a little confusing, that is why I decided to write another one my own).</p><p style="margin-top: 0px; margin-bottom: 15px; color: #666666; font-family: arial, helvetica, sans-serif; font-size: 12px; line-height: 19.200000762939453px; background-color: #f5f5f5; ">Happy Coding!</p><img src ="http://www.blogjava.net/alwayscy/aggbug/391235.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alwayscy/" target="_blank">我爱佳娃</a> 2012-11-12 23:17 <a href="http://www.blogjava.net/alwayscy/archive/2012/11/12/391235.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Perl与Java的SSL通信示例</title><link>http://www.blogjava.net/alwayscy/archive/2006/12/04/85368.html</link><dc:creator>我爱佳娃</dc:creator><author>我爱佳娃</author><pubDate>Mon, 04 Dec 2006 07:20:00 GMT</pubDate><guid>http://www.blogjava.net/alwayscy/archive/2006/12/04/85368.html</guid><wfw:comment>http://www.blogjava.net/alwayscy/comments/85368.html</wfw:comment><comments>http://www.blogjava.net/alwayscy/archive/2006/12/04/85368.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/alwayscy/comments/commentRss/85368.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alwayscy/services/trackbacks/85368.html</trackback:ping><description><![CDATA[用<a class="postTitle2" id="viewpost1_TitleUrl" href="/alwayscy/archive/2006/12/03/85161.html"><font color="#1a8bc8">用OpenSSL与JAVA(JSSE)通信</font></a>一文中所生成的CA证书及keystore就可以在JAVA和OpenSSL之间通信了，下面以Perl代码为例：（Perl实际使用了OpenSSL)<br /><br />下面的CLIENT端可以与前文提到的JAVA服务端通信：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #008000">#</span><span style="COLOR: #008000">use strict;</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">use</span><span style="COLOR: #000000"> IO</span><span style="COLOR: #000000">::</span><span style="COLOR: #0000ff">Socket</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">SSL(debug4);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">my</span><span style="COLOR: #000000"> (</span><span style="COLOR: #800080">$v_mode</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$sock</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$buf</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #800080">$ARGV</span><span style="COLOR: #000000">[</span><span style="COLOR: #800000">0</span><span style="COLOR: #000000">] eq </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">DEBUG</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">) { </span><span style="COLOR: #800080">$IO</span><span style="COLOR: #000000">::</span><span style="COLOR: #0000ff">Socket</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">SSL</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">DEBUG </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800000">1</span><span style="COLOR: #000000">; }<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">#</span><span style="COLOR: #008000"> Check to make sure that we were not accidentally run in the wrong<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /># directory:</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">unless</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">d </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">certs</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">) {<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">d </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">../certs</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">) {<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">chdir</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">..</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    } </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"> {<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">#</span><span style="COLOR: #008000">    die "Please run this example from the IO::Socket::SSL distribution directory!\n";</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">    }<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />}<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">(</span><span style="COLOR: #800080">$sock</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> IO</span><span style="COLOR: #000000">::</span><span style="COLOR: #0000ff">Socket</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">SSL</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">new( PeerAddr </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">'</span><span style="FONT-WEIGHT: bold; COLOR: #000000">172.19.149.52</span><span style="FONT-WEIGHT: bold; COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                   PeerPort </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">'</span><span style="FONT-WEIGHT: bold; COLOR: #000000">5555</span><span style="FONT-WEIGHT: bold; COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                   Proto    </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">'</span><span style="FONT-WEIGHT: bold; COLOR: #000000">tcp</span><span style="FONT-WEIGHT: bold; COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                   SSL_verify_mode </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #800000">0x01</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                   SSL_ca_file </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">'</span><span style="FONT-WEIGHT: bold; COLOR: #000000">mycerts/cacert.pem</span><span style="FONT-WEIGHT: bold; COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                 ))) {<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">warn</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">unable to create socket: </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">IO</span><span style="COLOR: #000000">::</span><span style="COLOR: #0000ff">Socket</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">SSL</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">errstr</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">\n</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">exit</span><span style="COLOR: #000000">(</span><span style="COLOR: #800000">0</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />} </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"> {<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">warn</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">connect ($sock).\n</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (</span><span style="COLOR: #800080">$IO</span><span style="COLOR: #000000">::</span><span style="COLOR: #0000ff">Socket</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">SSL</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">DEBUG);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />}<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">#</span><span style="COLOR: #008000"> check server cert.</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">my</span><span style="COLOR: #000000"> (</span><span style="COLOR: #800080">$subject_name</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$issuer_name</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$cipher</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">( </span><span style="COLOR: #0000ff">ref</span><span style="COLOR: #000000">(</span><span style="COLOR: #800080">$sock</span><span style="COLOR: #000000">) eq </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">IO::Socket::SSL</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">) {<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #800080">$subject_name</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$sock</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">peer_certificate(</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">subject</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #800080">$issuer_name</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$sock</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">peer_certificate(</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">issuer</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #800080">$cipher</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$sock</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">get_cipher();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />}<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">warn</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">cipher: $cipher.\n</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">server cert:\n</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">\t '$subject_name' \n\t '$issuer_name'.\n\n</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">print</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$sock</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">Knock, knock.\n</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">my</span><span style="COLOR: #000000"> (</span><span style="COLOR: #800080">$buf</span><span style="COLOR: #000000">) </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$sock</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">getlines;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #800080">$sock</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #0000ff">close</span><span style="COLOR: #000000">();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">print</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">read: '$buf'.\n</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br /><br />另外，也给出一个PERL的SVR端示例：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #008000">#</span><span style="COLOR: #008000">use strict;</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">use</span><span style="COLOR: #000000"> IO</span><span style="COLOR: #000000">::</span><span style="COLOR: #0000ff">Socket</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">SSL(debug4);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">my</span><span style="COLOR: #000000"> (</span><span style="COLOR: #800080">$sock</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$s</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$v_mode</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #800080">$ARGV</span><span style="COLOR: #000000">[</span><span style="COLOR: #800000">0</span><span style="COLOR: #000000">] eq </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">DEBUG</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">) { </span><span style="COLOR: #800080">$IO</span><span style="COLOR: #000000">::</span><span style="COLOR: #0000ff">Socket</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">SSL</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">DEBUG </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800000">1</span><span style="COLOR: #000000">; }<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">#</span><span style="COLOR: #008000"> Check to make sure that we were not accidentally run in the wrong<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /># directory:</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">unless</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">d </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">certs</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">) {<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">d </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">../certs</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">) {<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">chdir</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">..</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    } </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"> {<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">#</span><span style="COLOR: #008000">    die "Please run this example from the IO::Socket::SSL distribution directory!\n";</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">    }<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />}<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">(</span><span style="COLOR: #800080">$sock</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> IO</span><span style="COLOR: #000000">::</span><span style="COLOR: #0000ff">Socket</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">SSL</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">new( </span><span style="COLOR: #0000ff">Listen</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #800000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                   LocalAddr </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">'</span><span style="FONT-WEIGHT: bold; COLOR: #000000">10.56.28.35</span><span style="FONT-WEIGHT: bold; COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                   LocalPort </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #800000">9000</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                   Proto     </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">'</span><span style="FONT-WEIGHT: bold; COLOR: #000000">tcp</span><span style="FONT-WEIGHT: bold; COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                   Reuse     </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #800000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                   SSL_use_cert </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #800000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                   SSL_verify_mode </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #800000">0x00</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                   SSL_cert_file </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">'</span><span style="FONT-WEIGHT: bold; COLOR: #000000">mycerts/cert.pem</span><span style="FONT-WEIGHT: bold; COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                   SSL_key_file </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">'</span><span style="FONT-WEIGHT: bold; COLOR: #000000">mycerts/key.pem</span><span style="FONT-WEIGHT: bold; COLOR: #000000">'</span><span style="COLOR: #000000">                   <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                 )) ) {<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">warn</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">unable to create socket: </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">IO</span><span style="COLOR: #000000">::</span><span style="COLOR: #0000ff">Socket</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">SSL</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">errstr</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">\n</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">exit</span><span style="COLOR: #000000">(</span><span style="COLOR: #800000">0</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />}<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">warn</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">socket created: $sock.\n</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000"> (</span><span style="COLOR: #800000">1</span><span style="COLOR: #000000">) {<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">warn</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">waiting for next connection.\n</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">((</span><span style="COLOR: #800080">$s</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$sock</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #0000ff">accept</span><span style="COLOR: #000000">())) {<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">my</span><span style="COLOR: #000000"> (</span><span style="COLOR: #800080">$peer_cert</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$subject_name</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$issuer_name</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$date</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$str</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">( </span><span style="COLOR: #000000">!</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$s</span><span style="COLOR: #000000"> ) {<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">warn</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">error: </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$sock</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">errstr</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">\n</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">next</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      }<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">warn</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">connection opened ($s).\n</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">( </span><span style="COLOR: #0000ff">ref</span><span style="COLOR: #000000">(</span><span style="COLOR: #800080">$sock</span><span style="COLOR: #000000">) eq </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">IO::Socket::SSL</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">) {<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #800080">$subject_name</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$s</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">peer_certificate(</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">subject</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #800080">$issuer_name</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$s</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">peer_certificate(</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">issuer</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      }<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">warn</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">\t subject: '$subject_name'.\n</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">warn</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">\t issuer: '$issuer_name'.\n</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">my</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$date</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">localtime</span><span style="COLOR: #000000">();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">print</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$s</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">my date command says it's: '$date'</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">close</span><span style="COLOR: #000000">(</span><span style="COLOR: #800080">$s</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">warn</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">\t connection closed.\n</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  }<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />}<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #800080">$sock</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #0000ff">close</span><span style="COLOR: #000000">();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">warn</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">loop exited.\n</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">;</span></div><br /><br />在PERL中写SSL的SOCKET，要注意：<br />SVR端中：<br />       SSL_use_cert =&gt; 1,<br />       SSL_verify_mode =&gt; 0x00,<br />       SSL_cert_file =&gt; 'mycerts/cert.pem',<br />       SSL_key_file =&gt; 'mycerts/key.pem'<br />CLI端是：<br />       SSL_verify_mode =&gt; 0x01,<br />       SSL_ca_file =&gt; 'mycerts/cacert.pem',<br />mode是0表示，不认证对端，是1表示要认证对方。<img src ="http://www.blogjava.net/alwayscy/aggbug/85368.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alwayscy/" target="_blank">我爱佳娃</a> 2006-12-04 15:20 <a href="http://www.blogjava.net/alwayscy/archive/2006/12/04/85368.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用OpenSSL与JAVA(JSSE)通信</title><link>http://www.blogjava.net/alwayscy/archive/2006/12/03/85161.html</link><dc:creator>我爱佳娃</dc:creator><author>我爱佳娃</author><pubDate>Sun, 03 Dec 2006 04:36:00 GMT</pubDate><guid>http://www.blogjava.net/alwayscy/archive/2006/12/03/85161.html</guid><wfw:comment>http://www.blogjava.net/alwayscy/comments/85161.html</wfw:comment><comments>http://www.blogjava.net/alwayscy/archive/2006/12/03/85161.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/alwayscy/comments/commentRss/85161.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alwayscy/services/trackbacks/85161.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 概念				JAVA使用keystore文件来存储所有KEY，keystore文件可以存放多个KEY，访问它需要密码。下面我介绍下如何将用OpenSSL做自签名的证书一文中介绍的OpenSSL产生的KEY与JAVA的KEY转换后使用，从而达到JAVA与OpenSSL通信的目的。用OpenSSL生成CA根证书，即(P1,V1)此步骤参见用OpenSSL做自签名的证书一文在JAVA环境下生成自己的...&nbsp;&nbsp;<a href='http://www.blogjava.net/alwayscy/archive/2006/12/03/85161.html'>阅读全文</a><img src ="http://www.blogjava.net/alwayscy/aggbug/85161.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alwayscy/" target="_blank">我爱佳娃</a> 2006-12-03 12:36 <a href="http://www.blogjava.net/alwayscy/archive/2006/12/03/85161.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用OpenSSL做自签名的证书</title><link>http://www.blogjava.net/alwayscy/archive/2006/12/01/84852.html</link><dc:creator>我爱佳娃</dc:creator><author>我爱佳娃</author><pubDate>Fri, 01 Dec 2006 07:20:00 GMT</pubDate><guid>http://www.blogjava.net/alwayscy/archive/2006/12/01/84852.html</guid><wfw:comment>http://www.blogjava.net/alwayscy/comments/84852.html</wfw:comment><comments>http://www.blogjava.net/alwayscy/archive/2006/12/01/84852.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.blogjava.net/alwayscy/comments/commentRss/84852.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alwayscy/services/trackbacks/84852.html</trackback:ping><description><![CDATA[这里抄录<a class="postTitle2" id="viewpost1_TitleUrl" href="/alwayscy/archive/2006/11/28/83737.html"><font color="#1a8bc8">LDAP+OpenSSL集中认证配置</font></a>一文的一部分：<br />
公私钥：公钥可以唯一解密私钥加密过的数据，反之亦然。以下用P指代公钥，V指代私钥。<br />
SSL过程：需要两对公私钥(P1,V1),(P2,V2)，假设通信双方是A和B，B是服务器，A要确认和它通信的是B：<br />
A-&gt;B: hello<br />
B-&gt;A: 用V2加密过的P1（即用户证书，A就用P2解密出P1）<br />
A-&gt;B: ok<br />
B-&gt;A: 用V1加密的一段信息<br />
A-&gt;B: 用P1加密一个自动生成的K（用之前的P1解密成功这段信息则认为B是可信的了）<br />
B-&gt;A: 用K加密的数据（之后两对密钥功能结束，由K来加解密数据）<br />
这里，P2就是第3方的CA证书，由于非对称加密很慢，所以公私钥只是用来保证K的传送安全，之后通信是用K的对称加密算法来保证。<br />
<br />
为什么通过以上过程A就能够确定肯定是B，而不是某个C在假装B了呢？因为这个过程中，B用V1加密过一段信息发给A，A也成功解开了。我们开头谈到公钥（P1）只可以唯一解密私钥（V1）加密过的信息，这样A就可以完全相信B是拥有V1的，而V1是严格保密，只被服务提供公司拥有，所以保证了通信的服务方正确性。<br />
<br />
这里(P2,V2)就是certificate authority (CA)用来给客户签名用的公私钥。<br />
(P1,V1)是客户自己的公私钥，提交给CA，CA所做的事情就是用(P2,V2)来给客户的(P1,V1)签名，简单吧？<br />
V2是CA公司要保密的，而P2就是公用CA证书。用V2加密过（签名过）的P1，称为用户证书，一般被安装在服务器端。<br />
<br />
下面我们OpenSSL来做这一整件事情。<br />
<br />
<strong>先生成CA的公私钥(Root Certificate )<br />
</strong>准备工作<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #000000;">mkdir&nbsp;CA&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />cd&nbsp;CA&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />mkdir&nbsp;newcerts&nbsp;private&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />echo&nbsp;'</span><span style="color: #000000;">01</span><span style="color: #000000;">'&nbsp;&gt;&nbsp;serial&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />touch&nbsp;index.txt&nbsp;</span></div>
<br />
生成配置文件。由于openssl命令行参数太多，所以就用文件来组织各种选项。<br />
其中,req_distinguished_name 节表示需要提示用户输入的信息。<br />
v3_ca是有关CA公私钥生成的，v3_req是有关用户证书生成的。<br />
ca_default是用CA公私钥签名的时候，用户证书的默认信息。<br />
<br />
vi ./openssl.cnf<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #000000;">dir&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;.<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="font-weight: bold; color: #800000;">[</span><span style="color: #800000;">&nbsp;req&nbsp;</span><span style="font-weight: bold; color: #800000;">]</span><span style="color: #000000;">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />default_bits&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1024</span><span style="color: #000000;">&nbsp;#&nbsp;Size&nbsp;of&nbsp;keys&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />default_keyfile&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;key.pem&nbsp;#&nbsp;name&nbsp;of&nbsp;generated&nbsp;keys&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />default_md&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;md5&nbsp;#&nbsp;message&nbsp;digest&nbsp;algorithm&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />string_mask&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nombstr&nbsp;#&nbsp;permitted&nbsp;characters&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />distinguished_name&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;req_distinguished_name&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />req_extensions&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;v3_req&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="font-weight: bold; color: #800000;">[</span><span style="color: #800000;">&nbsp;req_distinguished_name&nbsp;</span><span style="font-weight: bold; color: #800000;">]</span><span style="color: #000000;">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />#&nbsp;Variable&nbsp;name&nbsp;&nbsp;&nbsp;Prompt&nbsp;string&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />#----------------------&nbsp;&nbsp;&nbsp;----------------------------------&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: #000000;">0</span><span style="color: #000000;">.organizationName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Organization&nbsp;Name&nbsp;(company)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />organizationalUnitName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Organizational&nbsp;Unit&nbsp;Name&nbsp;(department</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;division)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />emailAddress&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Email&nbsp;Address&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />emailAddress_max&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">40</span><span style="color: #000000;">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />localityName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Locality&nbsp;Name&nbsp;(city</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;district)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />stateOrProvinceName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;State&nbsp;or&nbsp;Province&nbsp;Name&nbsp;(full&nbsp;name)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />countryName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Country&nbsp;Name&nbsp;(</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;letter&nbsp;code)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />countryName_min&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />countryName_max&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />commonName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Common&nbsp;Name&nbsp;(hostname</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;IP</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;or&nbsp;your&nbsp;name)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />commonName_max&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">64</span><span style="color: #000000;">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />#&nbsp;Default&nbsp;values&nbsp;for&nbsp;the&nbsp;above</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;for&nbsp;consistency&nbsp;and&nbsp;less&nbsp;typing.&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />#&nbsp;Variable&nbsp;name&nbsp;&nbsp;&nbsp;Value&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />#------------------------------&nbsp;&nbsp;&nbsp;------------------------------&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: #000000;">0</span><span style="color: #000000;">.organizationName_default&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;EB&nbsp;Company&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />localityName_default&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Shen&nbsp;Zhen&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />stateOrProvinceName_default&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Guan&nbsp;Dong<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />countryName_default&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CN<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="font-weight: bold; color: #800000;">[</span><span style="color: #800000;">&nbsp;v3_ca&nbsp;</span><span style="font-weight: bold; color: #800000;">]</span><span style="color: #000000;">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />basicConstraints&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CA:TRUE&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />subjectKeyIdentifier&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;hash&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />authorityKeyIdentifier&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;keyid:always</span><span style="color: #000000;">,</span><span style="color: #000000;">issuer:always&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="font-weight: bold; color: #800000;">[</span><span style="color: #800000;">&nbsp;v3_req&nbsp;</span><span style="font-weight: bold; color: #800000;">]</span><span style="color: #000000;">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />basicConstraints&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CA:FALSE&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />subjectKeyIdentifier&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;hash&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="font-weight: bold; color: #800000;">[</span><span style="color: #800000;">&nbsp;ca&nbsp;</span><span style="font-weight: bold; color: #800000;">]</span><span style="color: #000000;">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />default_ca&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CA_default&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="font-weight: bold; color: #800000;">[</span><span style="color: #800000;">&nbsp;CA_default&nbsp;</span><span style="font-weight: bold; color: #800000;">]</span><span style="color: #000000;">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />serial&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;$dir/serial&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />database&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;$dir/index.txt&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />new_certs_dir&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;$dir/newcerts&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />certificate&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;$dir/cacert.pem&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />private_key&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;$dir/private/cakey.pem&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />default_days&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">365</span><span style="color: #000000;">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />default_md&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;md5&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />preserve&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;no&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />email_in_dn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;no&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />nameopt&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;default_ca&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />certopt&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;default_ca&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />policy&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;policy_match&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="font-weight: bold; color: #800000;">[</span><span style="color: #800000;">&nbsp;policy_match&nbsp;</span><span style="font-weight: bold; color: #800000;">]</span><span style="color: #000000;">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />countryName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;match&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />stateOrProvinceName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;match&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />organizationName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;match&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />organizationalUnitName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;optional&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />commonName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;supplied&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />emailAddress&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;optional&nbsp;</span></div>
<br />
<br />
生成CA公私钥：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #000000;">openssl&nbsp;req&nbsp;-new&nbsp;-x509&nbsp;-extensions&nbsp;v3_ca&nbsp;-keyout&nbsp;private/cakey.pem&nbsp;-out&nbsp;cacert.pem&nbsp;-days&nbsp;</span><span style="color: #000000;">3650</span><span style="color: #000000;">&nbsp;-config&nbsp;./openssl.cnf&nbsp;</span></div>
<br />
会提示输入密码，当用它给用户证书签名时需要输入，以避免其它人用它随意产生用户证书。<br />
-days表示有效期，因为它是根证书，所以时间一定要很长，否则由它生成的用户证书容易过期。<br />
<br />
这时就生成了：<br />
P1<br />
<font face="Courier New">cacert.pem</font><br />
V1<br />
<font face="Courier New">private/cakey.pem<br />
<br />
查看信息用：<br />
openssl x509 -in cacert.pem -noout -text<br />
<br />
<br />
<strong>生成P2,V2，即</strong><font face="Times New Roman"><strong>Certificate Signing Request (CSR) <br />
</strong>执行：<br />
openssl req -new -nodes -out req.pem -config ./openssl.cnf <br />
这样就生成了：<br />
P2<br />
req.pem<br />
V2<br />
key.pem<br />
<br />
用此命令查看：<br />
openssl req -in req.pem -text -verify -noout <br />
<br />
<br />
<strong>用CA的私钥V1为P2签名，即生成用户证书</strong><br />
执行：<br />
openssl ca -out cert.pem -config ./openssl.cnf -infiles req.pem <br />
生成用户证书：<br />
<font face="Courier New">cert.pem</font><br />
此时，会拷贝一份到newcerts目录下。并会更新数据库文件：index.txt以及serail文件<br />
用命令查看：<br />
openssl x509 -in cert.pem -noout -text -purpose | more <br />
<br />
如果要去除可读信息部分，执行：<br />
mv cert.pem tmp.pem <br />
openssl x509 -in tmp.pem -out cert.pem <br />
<br />
<br />
<strong>安装证书<br />
</strong>key.pem(V2)和cert.pem(用V1加密过的P2）安装到服务端<br />
有的服务器需要把这两个文件连为一个，可以执行：<br />
cat key.pem cert.pem &gt;key-cert.pem <br />
<br />
cacert.pem安装到客户端<br />
<br />
Apache的配置：<br />
File&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Comment <br />
/home/httpd/html Apache DocumentRoot <br />
/home/httpd/ssl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SSL-related files <br />
/home/httpd/ssl/cert.pem Site certificate <br />
/home/httpd/ssl/key.pem Site private key <br />
<br />
Stunnel的配置<br />
stunnel -p /etc/ssl/certs/key-cert.pem&nbsp; <br />
<br />
<br />
编辑于08.4.26，另有两个例子：<br />
<a class="entrylistItemTitle" id="CategoryEntryList1_EntryStoryList_Entries_ctl02_TitleUrl" href="http://www.blogjava.net/alwayscy/archive/2006/12/03/85161.html">用OpenSSL与JAVA(JSSE)通信</a> <br />
<a class="entrylistItemTitle" id="CategoryEntryList1_EntryStoryList_Entries_ctl00_TitleUrl" href="http://www.blogjava.net/alwayscy/archive/2006/12/04/85368.html">Perl与Java的SSL通信示例</a> <br />
</font></font>
<img src ="http://www.blogjava.net/alwayscy/aggbug/84852.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alwayscy/" target="_blank">我爱佳娃</a> 2006-12-01 15:20 <a href="http://www.blogjava.net/alwayscy/archive/2006/12/01/84852.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在windows下编译openssl</title><link>http://www.blogjava.net/alwayscy/archive/2006/11/26/83575.html</link><dc:creator>我爱佳娃</dc:creator><author>我爱佳娃</author><pubDate>Sun, 26 Nov 2006 03:32:00 GMT</pubDate><guid>http://www.blogjava.net/alwayscy/archive/2006/11/26/83575.html</guid><wfw:comment>http://www.blogjava.net/alwayscy/comments/83575.html</wfw:comment><comments>http://www.blogjava.net/alwayscy/archive/2006/11/26/83575.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alwayscy/comments/commentRss/83575.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alwayscy/services/trackbacks/83575.html</trackback:ping><description><![CDATA[
		<p>编译环境：<br />VS2005 Express Edition<br />SDK WIN SVR 2003 SP1<br />MASM 8.0</p>
		<p>进入打开sdk的2000编译命令行，再运行：<br />%comspec% /k ""C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat"" x86</p>
		<p>去到解压目录：<br />cd /d "E:\Prj2\ForMe\RefExe\perl+ssl\openssl-0.9.8d"</p>
		<p>再编译：<br />perl Configure VC-WIN32 --prefix=dist<br />ms\do_ms<br />nmake -f ms\ntdll.mak<br />nmake -f ms\ntdll.mak test<br />nmake -f ms\ntdll.mak install</p>
		<p>完成后，dist目录就是安装好的东西，可以拷贝到别处使用</p>
<img src ="http://www.blogjava.net/alwayscy/aggbug/83575.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alwayscy/" target="_blank">我爱佳娃</a> 2006-11-26 11:32 <a href="http://www.blogjava.net/alwayscy/archive/2006/11/26/83575.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>