如果不去挑战,你永远不知道自己的潜能到底有多大!

发布新日志

  • SSH解释(转载)

    2007-10-12 14:21:14

    SSH:安全外壳协议

    (SSH: Secure Shell Protocol)

    安全外壳协议(SSH)是一种在不安全网络上提供安全远程登录及其它安全网络服务的协议。Secure Shell,又可记为S S H,最初是U N I X系统上的一个程序,后来又迅速扩展到其他操作平台。S S H是一个好的应用程序,在正确使用时,它可以弥补网络中的漏洞。除此以外, S S H之所以酷,还有以下原因:S S H客户端适用于多种平台。几乎所有的U N I X平台—包括H P - U X、L i n u x、A I X、S o l a r i s、Digital UNIX、I r i x、S C O,以及其他平台—都可以运行S S H。而且,已经有一些客户端(其中有些为测试版)可以运行于U N I X操作平台以外,包括O S / 2、V M S、B e O S、J a v a、Wi n d o w s 9 5 / 9 8和Windows NT。这样,你就可以在几乎所有的平台上运行S S H客户端程序了。对非商业用途它是免费的。许多S S H版本可以获得源代码,并且只要不用于商业目的,都可以免费得到。而且,U N I X版本也提供了源代码,这就意味着任何人都可以对它进行修改。但是,如果你选择它用于商业目的,那么无论使用何种版本的S S H,你都得确认已经注册并获得了相应权限。绝大多数S S H的客户端和守护进程都有一些注册限制。惟一的S S H通用公共注册(General Public License,G P L )版本是l s h,它目前还是测试版。通过I n t e r n e t传送密码安全可靠。这是S S H被认可的优点之一。如果你考察一下接入ISP(Internet Service Provider,I n t e r n e t服务供应商)或大学的方法,一般都是采用Te l n e t或P O P邮件客户进程。因此,每当要进入自己的账号时,你输入的密码将会以明码方式发送(即没有保护,直接可读),这就给攻击者一个盗用你账号的机会—最终你将为他的行为负责。对应用的支持。由于S S H的源代码是公开的,所以在U N I X世界里它获得了广泛的认可。L i n u x,其源代码也是公开的,大众可以免费获得,并同时获得了类似的认可。这就使得所有开发者(或任何人)都可以通过补丁程序或b u g修补来提高其性能,甚至还可以增加功能。这也第一部分获得并安装S S H意味着其性能可以不断得到提高而无须得到来自原始创作者的直接技术支持。S S H替代了不安全的远程应用程序。S S H是设计用来替代伯克利版本的r命令集的;它同时继承了类似的语法。其结果是,使用者注意不到使用S S H和r命令集的区别。利用它,你还可以干一些很酷的事。通过使用S S H,你在不安全的网络中发送信息时不必担心会被监听。你也可以使用P O P通道和Te l n e t方式,通过S S H可以利用P P P通道创建一个虚拟个人网络( Virtual Private Network, V P N )。S S H也支持一些其他的身份认证方法,如K e r b e r o s和安全I D卡等。

    但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH。 OpenSSH是SSH的替代软件,而且是免费的,可以预计将来会有越 来越多的人使用它而不是SSH。  

    SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。 用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。

    SSH 主要有三部分组成:

    传输层协议 [SSH-TRANS] 提供了服务器认证,保密性及完整性。此外它有时还提供压缩功能。 SSH-TRANS 通常运行在
    TCP/IP连接上,也可能用于其它可靠数据流上。 SSH-TRANS 提供了强力的加密技术、密码主机认证及完整性保护。该协议中的认证基于主机,并且该协议不执行用户认证。更高层的用户认证协议可以设计为在此协议之上。

    用户认证协议 [SSH-USERAUTH] 用于向服务器提供客户端用户鉴别功能。它运行在
    传输层协议 SSH-TRANS 上面。当 SSH-USERAUTH 开始后,它从低层协议那里接收会话标识符(从第一次密钥交换中的交换哈希 H )。会话标识符唯一标识此会话并且适用于标记以证明私钥的所有权。 SSH-USERAUTH 也需要知道低层协议是否提供保密性保护。

    连接协议 [SSH-CONNECT] 将多个加密隧道分成逻辑通道。它运行在用户认证协议上。它提供了交互式登录话路、远程命令执行、转发 TCP/IP 连接和转发 X11 连接。

    一旦建立一个安全传输层连接,客户机就发送一个服务请求。当用户认证完成之后,会发送第二个服务请求。这样就允许新定义的协议可以与上述协议共存。连接协议提供了用途广泛的各种通道,有标准的方法用于建立安全交互式会话外壳和转发(“
    隧道技术”)专有 TCP/IP 端口和 X11 连接。

    通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替
    Telnet,又可以为FTPPoP、甚至为PPP提供一个安全的"通道"。

    SSH分为两部分:客户端部分和服务端部分。

    服务端是一个
    守护进程(demon),他在后台运行并响应来自客户端的连接请求。服务端一般是sshd进程,提供了对远程连接的处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接。

    客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。

    他们的工作机制大致是本地的客户端发送一个连接请求到远程的服务端,服务端检查申请的包和IP地址再发送密钥给SSH的客户端,本地再将密钥发回给服务端,自此连接建立。刚才所讲的只是SSH连接的大致过程,SSH 1.x和SSH 2.x在连接协议上还有着一些差异。

    SSH被设计成为工作于自己的基础之上而不利用超级服务器(
    inetd),虽然可以通过inetd上的tcpd来运行SSH进程,但是这完全没有必要。启动SSH服务器后,sshd运行起来并在默认的22端口进行监听(你可以用 # ps -waux | grep sshd 来查看sshd是否已经被正确的运行了)如果不是通过inetd启动的SSH,那么SSH就将一直等待连接请求。当请求到来的时候SSH守护进程会产生一个子进程,该子进程进行这次的连接处理。

    “ssh”在英汉词典中的解释(来源:百度词典):
    ssh
    KK: []
    DJ: []
    int.
    1. 嘘!别出声!


     

  • Java的开源项目:简单介绍Log4J的使用【转载】

    2007-07-04 17:39:52

    Java的开源项目:简单介绍Log4J的使用

    一、前言

    Java开源项目太多了,这种遍地开花的局面绝对赶得上中国五代十国时期的“百家争鸣”、“百花争艳”的繁荣。使用java技术,我们的项目几乎不需要购买有关java支撑开发产品,只需把一个一个开源产品经过架构师的手,合理搭配和拼接,就能做出灵活性佳、性能不错的商业产品来。

    无疑, 作为一个流行的日志记录工具,Log4j是java开源项目中最闪亮的环节之一。笔者所见的java项目,十有八九都采用了Log4j,究其原因,我认为有以下几点:

    a)Log4j受大多数web应用服务器的拥护:以我目前所知,tomcat,weblogic,websphere,jboss都支持log4j。

    b)快速,功能强大:Log4J配置文件实现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等全套功能。在速度上,从log4j一开始出现,注重运行的速度就一直放在首位,并且坚持不懈地进行着改进和完善。

    c)使用简单、方便:只需要导入一个简单的log4j-1.2.x.jar,然后在程序类的开头写上下面一句private final static Logger log =Logger.getLogger(ClassName.class);

    这样你就得到了一个日志对象log,可以轻松往特定目标写日志了。

    二、为什么需要Log4j?---项目的调试是log4j产生的内在驱动力

    原始的方法是:把信息输出到屏幕(console),利用JDK提供的System.out.println。但是,这样做的坏处是显而易见的:

    a)信息的输出不够灵活,并且繁琐。比如,要输出执行处的文件名,行数,当前时间等,println显得很原始。

    b)如果要改变输出的内容和格式,需要重新编译源程序。

    c)更严重的是,如果程序中有很多的println,会严重的影响程序的性能。

    三、Log4j使用的几个关键点?

    根记录器(Logger),输出端(appenders)和布局(layouts)

    a)定义根记录器的格式为

    log4j.rootLogger = [ level ], appendName1, appendName2, …appendNameN。同一个记录器可有多个输出端。

    PS:level的级别(此级别可以自定义,系统默认提供了以下级别)

    ◆debug//调试信息

    ◆info//一般信息

    ◆warn//警告信息

    ◆error//错误信息

    ◆fatal//致命错误信息

    上面列出的就是所谓log4j的输出级别,log4j建议只使用4个级别,它们从上到下分别为ERROR、WARN、INFO、DEBUG,假设你定义的级别是info,那么error和warn的日志可以显示而比他低的debug信息就不显示了。

    b)定义一个appender的输出目的地的格式为

    log4j.appender.appenderName = fully.qualified.name.of.appender.class。log4j提供了以下几种常用的输出目的地:

    ◆org.apache.log4j.ConsoleAppender,将日志信息输出到控制台

    ◆org.apache.log4j.FileAppender,将日志信息输出到一个文件

    ◆org.apache.log4j.DailyRollingFileAppender,将日志信息输出到一个,并且每天输出到一个新的日志文件

    ◆org.apache.log4j.RollingFileAppender,将日志信息输出到一个文件,通过指定文件的的尺寸,当文件大小到达指定尺寸的时候会自动把文件改名,如名为example.log的文件会改名为 example.log.1,同时产生一个新的example.log文件。如果新的文件再次达到指定尺寸,又会自动把文件改名为 example.log.2,同时产生一个example.log文件。依此类推,直到example.log. MaxBackupIndex, MaxBackupIndex的值可在配置文件中定义。

    ◆org.apache.log4j.WriterAppender,将日志信息以流格式发送到任意指定的地方。

    ◆org.apache.log4j.jdbc.JDBCAppender,通过JDBC把日志信息输出到数据库中。

    c)输出格式(布局)layout

    Log4j提供了一下几种布局:

    ◆org.apache.log4j.HTMLLayout,以HTML表格形式布局

    ◆org.apache.log4j.PatternLayout,可以灵活地指定布局模式

    ◆org.apache.log4j.SimpleLayout,包含日志信息的级别和信息字符串

    定义一个PatternLayout布局的语句为:

    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

    log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1} - %m%n

    PS:ConversionPattern参数的格式含义

    格式名 含义

    %c 输出日志信息所属的类的全名

    %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28

    %f 输出日志信息所属的类的类名

    %l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行

    %m 输出代码中指定的信息,如log(message)中的message

    %n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”

    %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推

    %r 输出自应用启动到输出该日志信息所耗费的毫秒数

    %t 输出产生该日志事件的线程名

    四、log4j的配置文件:log4j.properties或者log4j.xml

    a)有几种方式可以配置Log4J

    ◆在程序中调用BasicConfigurator.configure()方法;

    ◆配置放在文件里,通过命令行参数传递文件名字,通过

    PropertyConfigurator.configure(args[x])解析并配置;

    ◆配置放在文件里,通过环境变量传递文件名等信息,利用log4j默认的初始化过程解析并配置;

    ◆配置放在文件里,通过应用服务器配置传递文件名等信息,利用一个特殊的servlet来完成配置。

    b)配置文件的初始化:

    通过应用服务器完成初始化

    通过servlet辅助完成初始化

    c)一个log4j.properties文件示例

    log4j.rootLogger=INFO, stdout, logfile
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n
    log4j.appender.logfile=org.apache.log4j.RollingFileAppender
    log4j.appender.logfile.File=/webserver/specialTraining3/wangzj.log
    log4j.appender.logfile.MaxFileSize=51200KB
    log4j.appender.logfile.MaxBackupIndex=3
    log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
    log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - <%m>%n

    五、用log4j来演练一个例子

    Test:

    com.webage.servlets.MyServlet

    Log4j.properties文件:

    log4j.rootLogger=DEBUG,ROOT
    log4j.appender.ROOT=org.apache.log4j.RollingFileAppender
    log4j.appender.ROOT.File=E:\wangzj\myapplication.log
    log4j.appender.ROOT.MaxFileSize=1000KB
    log4j.appender.ROOT.MaxBackupIndex=5
    log4j.appender.ROOT.layout=org.apache.log4j.PatternLayout
    log4j.appender.ROOT.layout.ConversionPattern=[%d]%t%c%-5p-%m%n
    ōotLogger=DEBUG,CONSOLE,A1,im 
    log4j.addivity.org.apach

    MyModel.java文件:

    package com.webage.model;
    import org.apache.log4j.Logger;
    public class MyModel {
    static Logger logger = Logger.getLogger(MyModel.class);;
    public void checkValid(String name, String value) throws Exception {
    logger.debug("ENTRY");
    logger.debug("检查参数: " + name);
    if (value == null) {
    throw new Exception("缺少参数。");
    }
    if (value.trim().length() == 0) {
    throw new Exception("参数空。");
    }
    logger.debug("EXIT");
    }
    }

    MyServlet.java

    package com.webage.servlets;
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.log4j.Logger;
    import com.webage.model.MyModel;
    public class MyServlet extends HttpServlet {
    Logger logger = Logger.getLogger(MyServlet.class);
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {
    logger.debug("ENTRY");
    MyModel model = new MyModel();
    resp.getWriter().println("Log4J测试"); 
    try {
    model.checkValid("firstName", req.getParameter("firstName"));
    } catch (Exception e) {
    logger.error("doGet出现错误.", e);
    }
    logger.debug("EXIT");
    }
    public void init() throws ServletException {
    super.init();
    logger.info("Servlet初始化...");
    }
    }

    需要两个jar包:servlet.jar和log4j-1.2.9.jar。

    准备就绪,运行之于tomcat或者weblogic,笔者暂用weblogic代之。每当运行Logger logger = Logger.getLogger(MyServlet.class);时即生成E:\wangzj\myapplication.log文件。

Open Toolbar