Perl与Java的SSL通信示例

用OpenSSL与JAVA(JSSE)通信一文中所生成的CA证书及keystore就可以在JAVA和OpenSSL之间通信了,下面以Perl代码为例:(Perl实际使用了OpenSSL)

下面的CLIENT端可以与前文提到的JAVA服务端通信:

  1. #use strict;
  2. use IO::Socket::SSL(debug4);
  3. my ($v_mode$sock$buf);
  4. if($ARGV[0] eq "DEBUG") { $IO::Socket::SSL::DEBUG = 1; }
  5. # Check to make sure that we were not accidentally run in the wrong
  6. # directory:
  7. unless (-d "certs") {
  8.     if (-d "../certs") {
  9.     chdir "..";
  10.     } else {
  11. #    die "Please run this example from the IO::Socket::SSL distribution directory!/n";
  12.     }
  13. }
  14. if(!($sock = IO::Socket::SSL->new( PeerAddr => '172.19.149.52',
  15.                    PeerPort => '5555',
  16.                    Proto    => 'tcp',
  17.                    SSL_verify_mode => 0x01,
  18.                    SSL_ca_file => 'mycerts/cacert.pem',
  19.                  ))) {
  20.     warn "unable to create socket: ", &IO::Socket::SSL::errstr, "/n";
  21.     exit(0);
  22. else {
  23.     warn "connect ($sock)./n" if ($IO::Socket::SSL::DEBUG);
  24. }
  25. # check server cert.
  26. my ($subject_name$issuer_name$cipher);
  27. if( ref($sock) eq "IO::Socket::SSL") {
  28.     $subject_name = $sock->peer_certificate("subject");
  29.     $issuer_name = $sock->peer_certificate("issuer");
  30.     $cipher = $sock->get_cipher();
  31. }
  32. warn "cipher: $cipher./n""server cert:/n"
  33.     "/t '$subject_name' /n/t '$issuer_name'./n/n";
  34. print $sock "Knock, knock./n";
  35. my ($buf) = $sock->getlines;
  36. $sock->close();
  37. print "read: '$buf'./n";



另外,也给出一个PERL的SVR端示例

  1. #use strict;
  2. use IO::Socket::SSL(debug4);
  3. my ($sock, $s, $v_mode);
  4. if($ARGV[0] eq "DEBUG") { $IO::Socket::SSL::DEBUG = 1; }
  5. # Check to make sure that we were not accidentally run in the wrong
  6. # directory:
  7. unless (-d "certs") {
  8.     if (-d "../certs") {
  9.     chdir "..";
  10.     } else {
  11. #    die "Please run this example from the IO::Socket::SSL distribution directory!/n";
  12.     }
  13. }
  14. if(!($sock = IO::Socket::SSL->new( Listen => 5,
  15.                    LocalAddr => '10.56.28.35',
  16.                    LocalPort => 9000,
  17.                    Proto     => 'tcp',
  18.                    Reuse     => 1,
  19.                    SSL_use_cert => 1,
  20.                    SSL_verify_mode => 0x00,
  21.                    SSL_cert_file => 'mycerts/cert.pem',
  22.                    SSL_key_file => 'mycerts/key.pem'                   
  23.                  )) ) {
  24.     warn "unable to create socket: ", &IO::Socket::SSL::errstr, "/n";
  25.     exit(0);
  26. }
  27. warn "socket created: $sock./n";
  28. while (1) {
  29.   warn "waiting for next connection./n";
  30.   
  31.   while(($s = $sock->accept())) {
  32.       my ($peer_cert, $subject_name, $issuer_name, $date, $str);
  33.       
  34.       if( ! $s ) {
  35.       warn "error: ", $sock->errstr, "/n";
  36.       next;
  37.       }
  38.       
  39.       warn "connection opened ($s)./n";
  40.       
  41.       ifref($sock) eq "IO::Socket::SSL") {
  42.       $subject_name = $s->peer_certificate("subject");
  43.       $issuer_name = $s->peer_certificate("issuer");
  44.       }
  45.       
  46.       warn "/t subject: '$subject_name'./n";
  47.       warn "/t issuer: '$issuer_name'./n";
  48.   
  49.       my $date = localtime();
  50.       print $s "my date command says it's: '$date'";
  51.       close($s);
  52.       warn "/t connection closed./n";
  53.   }
  54. }
  55. $sock->close();
  56. warn "loop exited./n";

在PERL中写SSL的SOCKET,要注意:
SVR端中:
       SSL_use_cert => 1,
       SSL_verify_mode => 0x00,
       SSL_cert_file => 'mycerts/cert.pem',
       SSL_key_file => 'mycerts/key.pem'
CLI端是:
       SSL_verify_mode => 0x01,
       SSL_ca_file => 'mycerts/cacert.pem',
mode是0表示,不认证对端,是1表示要认证对方。

原文:http://www.blogjava.net/alwayscy/archive/2006/12/04/85368.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值