13、openssl、ssh、脚本信息捕获 学习笔记

PKI:Public Key Infrastucture

openssl: 套件,开源程序

libcrypto通用功能的加密库

libssl用于实现TLS/SSL的功能

openssl多功能命令行工具

openssl可用于:生成密钥、创建数字证书、手动加密解密数据

加密解密技术常用的功能及算法:

对称加密:(用于加密数据)

算法:DES, 3DES, AES, Blowfish, Twofish, RC6, CAST5

工具:gpg, openssl enc

# openssl enc -des3 -a -salt -in /path/to/input_file -out /path/to/cipher_file

# openssl enc -d -des3 -a -salt -in /path/to/cipher_file -out /path/to/clear_file

单向加密:(抽取数据特征码,用于验证数据的完整性)

特性:

One-Way

Collision-free

算法:

md5128bits

sha1160bits

sha512512bits

工具:sha1sum, md5sum, cksum, openssl dgst

# openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] [-out filename] /path/to/somefile

MAC: 消息摘要码,单向加密的延伸应用(在单向加密的基础上再对抽取的数据特征码进行加密)

应用:用于实现在网络通信中保证所传输的数据完整性;

机制:

CBC-MAC

HMAC:使用md5和sha1算法;

用户认证:

工具:passwd, openssl passwd

# openssl passwd -1

公钥加密:公钥加密、私钥解密

密钥对儿:

公钥:pkey

私钥:skey

算法:RSA, EIGamal

工具:gpg, openssl rsautl

数字签名:私钥加密、公钥解密

算法:RSA, EIGamal, DSA

DSA: Digital Signature Algorithm

DSS: Digital Signature Standard

密钥交换:IKE

算法:DH, 公钥加密

Diffie-Hellman

数字证书:

证书格式:x509、pkcs

x509格式:

公钥和有效期限;

持有者的个人合法身份信息;(主机名)

证书的使用方式;

CA的信息;

CA的数字签名;

谁给CA发证:自签署证书

用openssl实现私有CA:

配置文件:/etc/pki/tls/openssl.cnf

[ CA_default ]

dir             = /etc/pki/CA           # Where everything is kept        CA工作目录

certs           = $dir/certs            # Where the issued certs are kept 签署证书存放目录

crl_dir         = $dir/crl              # Where the issued crl are kept   吊销列表存放目录

database        = $dir/index.txt        # database index file.            索引数据库

#unique_subject = no                    # Set to ‘no‘ to allow creation of

# several ctificates with same subject.

new_certs_dir   = $dir/newcerts         # default place for new certs.    新证书存放目录

certificate     = $dir/cacert.pem       # The CA certificate              CA自签署证书

serial          = $dir/serial           # The current serial number       证书的序列号

crlnumber       = $dir/crlnumber        # the current crl number          吊销列表的序列号

# must be commented out to leave a V1 CRL

crl             = $dir/crl.pem          # The current CRL                 正用吊销列表

private_key     = $dir/private/cakey.pem# The private key                 CA自己的私钥

RANDFILE        = $dir/private/.rand    # private random number file      随机数文件

x509_extensions = usr_cert              # The extentions to add to the cert

生成密钥对儿:

# (umask 077; openssl genrsa -out private/cakey.pem 2048)

如果想查看公钥:

# openssl rsa -in private/cakey.pem -pubout -text

生成自签证书:

# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655

创建需要的文件:

# touch index.txt serial crlnumber

用openssl实现证书申请:

在主机上生成密钥,保存至应用此证书的服务的配置文件目录下, 例如:

# mkdir /etc/httpd/ssl

# cd /etc/httpd/ssl

# (umask 077; openssl genrsa -out httpd.key 1024)

生成证书签署请求:

# openssl req -new -key httpd.key -out httpd.csr

将请求文件发往CA;

CA签署证书:

签署:

# openssl ca -in /path/to/somefile.csr -out /path/to/somefile.crt -days DAYS

将证书传回请求者

吊销证书:

# openssl ca -revoke /path/to/somefile.crt

openssl: 多用途的命令行工具

标准命令:enc, dgst, genrsa, rsautl, req, ca, rsa, passwd

speed: 基准性能测试工具

version:版本查看

s_client:SSL/TLS client program

rand: 生成伪随机数

# openssl rand -hex #

ssl:

NetScape 网景

Secure Socket Layer

SSLv2, SSLv3

TLS: Transport Layer Security

TLSv1

http --> https

ldap --> ldaps

ftp --> ftps

smtp --> smtps

pop3 --> pop3s

imap --> imaps

openssl补充材料:

openssl中有如下后缀名的文件

.key格式:私有的密钥

.crt格式:证书文件,certificate的缩写

.csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写

.crl格式:证书吊销列表,Certificate Revocation List的缩写

.pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式

常用证书协议

x509v3: IETF的证书标准

x.500:目录的标准

SCEP:  简单证书申请协议,用http来进行申请,数据有PKCS#7封装,数据其实格式也是PKCS#10的

PKCS#7:  是封装数据的标准,可以放置证书和一些请求信息

PKCS#10:  用于离线证书申请的证书申请的数据格式,注意数据包是使用PKCS#7封装这个数据

PKCS#12:  用于一个单一文件中交换公共和私有对象,就是公钥,私钥和证书,这些信息进行打包,加密放在存储目录中,CISCO放在NVRAM中,用户可以导出,以防证书服务器挂掉可以进行相应恢复。思科是.p12,微软是.pfx

ssh: Secure SHell

监听tcp协议的22号端口

ssh文本协议:字符通信

sshv1, sshv2

由于sshv1是基于CRC-32做MAC,因此,不安全,建议勿用;

sshv2基于双方主机协商选择最安全的MAC实现机制;

加密机制及MAC机制是双方协商选定;

基于DH实现密钥交换,基于RSA或DSA实现身份认证;

客户通过检查服务端的主机密钥来判定是否与其进一步通信;

OpenSSH (C/S)

Server: 程序(服务)监听tcp:22

Client: 程序

Windows客户端:xmanager(xshell)、SecureCRT、putty、sshshellclient

openssh客户端组件:

ssh:

ssh [email protected] [COMMAND]

ssh -l Username HOST [COMMAND]

-p PORT: 指定要连入端口;

ssh认证机制:

基于口令

基于密钥

客户端在本地生成一对密钥;

客户端将公钥复制到服务端,要登录的用户的家目录下的隐藏目录.ssh中的一个名为authorized_keys或authorized_keys2文件中

配置过程:

1、生成密钥对儿

# ssh-keygen -t rsa

生成的密钥默认保存至当前用户家目录下的.ssh目录的id_rsa文件中,公钥在id_rsa.pub文件中

2、复制密钥至远程主机

# ssh-copy-id [-i /path/to/pubkey_file] [email protected]

scp: 类cp命令,基于ssh协议跨主机复制

scp SRC1 SRC2 ... DEST

分两种情况:

1、源文件在本机,目标为远程

# scp /path/to/somefile ... [email protected]:/path/to/somewhere

2、源文件在远程,目标为本机

# scp [email protected]:/path/to/somefile  /path/to/somewhere

-r: 源文件为目录时使用,以实现递归复制

-p: 保留源文件的复制及修改时间戳,以及权限;

-q: 静默模式

-P PORT:指定服务端端口;

sftp: 是基于ssh的ftp协议

只要OpenSSH的服务器端配置文件中启用了如下项:

Subsystemsftp/usr/libexec/openssh/sftp-server

用法:# sftp [[email protected]]HOST

服务器端:sshd

配置文件:/etc/ssh/sshd_config

服务脚本:/etc/rc.d/init.d/sshd

脚本配置文件:/etc/sysconfig/sshd

各配置参数:# man sshd_config

Port

ListenAddress: IP

Protocol

PermitRootLogin

AllowUsers user1,user2,...: 用户白名单

AllowGroups

DenyUsers : 用户黑名单

使用SSH的最佳实践:

1、Only Use SSH Protocol 2

2、Limit Users‘ SSH Access

AllowUsers root vivek jerry

白名单

DenyUsers saroj anjali foo

黑名单

3、Configure Idle Log Out Timeout Interval

ClientAliveInterval 300

ClientAliveCountMax 0

设定空闲会话超时时长;

4、Firewall SSH Port # 22

使用iptables设置ssh服务安全访问策略;

5、Change SSH Port and Limit IP Binding

Port 300

ListenAddress 192.168.1.5

ListenAddress 202.54.1.5

勿使用默认22端口;

6、Use Strong SSH Passwords and Passphrase

genpasswd() {

local l=$1

[ "$l" == "" ] && l=20

tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs

}

使用足够长、足够复杂的密码,且定期更换;

7、Use Public Key Based Authentication

使用公钥认证

8、Disable Empty Passwords

9、Thwart SSH Crackers (Brute Force Attack)

google: ssh best practice

10、 Rate-limit Incoming Port # 22 Connections

限制ssh访问频度;

11、Use Log Analyzer

记录好日志,经常做日志分析;

用户登录信息获取:

/var/log/wtmp:用户成功登录的日志信息

last

/var/log/btmp: 用户登录尝试失败的日志信息

lastb

lastlog: 每个用户最近一次成功登录的信息;

bash编程的信号捕获:

kill -l

KILL无法捕捉;

trap ‘COMMAND‘ SIGNAL,

信号捕捉用于:在中途中止时做一些清理操作;

使用示例:

#!/bin/bash

#

trap ‘echo "quit"; exit 5‘ INT

for i in {1..254}; do

if ping -w 1 -c 1 172.16.254.$i &> /dev/null; then

echo "172.16.254.$i is up."

else

echo "172.16.254.$i is down."

fi

done

时间: 2024-10-25 03:35:52

13、openssl、ssh、脚本信息捕获 学习笔记的相关文章

Chapter 2. OpenSSL的安装和配置学习笔记

Chapter 2. OpenSSL的安装和配置学习笔记 2.1 在linux上面安装OpenSSL我还是做点No paper事情比较在行,正好和老师的课程接轨一下.以前尝试过在Windows上面安装过openSSL,这次正好在Linux上面实现一下. 希望各位园友门纠错,征求意见中. 2.1.1 安装OpenSSL的系统环境和编译环境 测试环境:Linux MINT 16 Petra ? 1 2 3 4 5 6 $ lsb_release -a #查看linux发行版本系统信息 No LSB

Js脚本之jQuery学习笔记(1)

Js脚本之jQuery学习笔记(1) 一.javascript基础 单行注释 多行注释 /* */ 数据类型 数值型 字符串型 布尔型 空值 未定义值 转义字符 函数定义:1234567891011121314<head><script language="javascript"function test(m){var xixi="嘻嘻"alert("这是javascript")document.write(xixi + m)}

&lt;&lt;linux命令行与shell脚本编程大全&gt;&gt;学习笔记(1)

一章初识linux shell 一.什么是linux 1.linux系统可大致划分为四部分: l Linux内核 l GNU工具组件 l 图形化桌面环境 l 应用软件 在linux系统里,这四部分中的每一部分都扮演着一个特别的角色,但如果将他们分开,每一部分都没太大的作用. 1)探究linux内核 Linux系统的核心是内核,内核控制着计算机系统上的所有硬件和软件,必要时分配硬件,有时需要执行软件. 内核基本负责以下四项主要功能: l 系统内存管理 l 软件程序管理 l 硬件设备管理 l 文件系

SHELL脚本攻略(学习笔记)--1.6 数学运算和bc命令

本文目录: 1.6.1 基本整数运算 1.6.2 bc命令高级算术运算 使用let.$(())或$[]进行基本的整数运算,使用bc进行高级的运算,包括小数运算.其中expr命令也能进行整数运算,还能判断参数是否为整数,具体用法见expr命令全解. 1.6.1 基本整数运算 [[email protected] tmp]# str=10 [[email protected] tmp]# let str=str+6 # 等价于let str+=6 [[email protected] tmp]# l

Js脚本之jQuery学习笔记(2)

CSS简介 Html 4.0之后推出css,采用div布局.使用css来实现页面的外观. CSS使用三种方式给页面或页面元素应用样式 类,修饰页面中特定区域 标签,将页面中的XHTML标签重定义 高级 CSS规则 选择符 {属性:值} 选择符:css样式所针对的对象 属性:包括颜色.大小.定位.浮动和位置等 值:属性与值为一组,组之间用(;)隔开 如: h1 {font-family:"Microsoft sans serif 黑体"}#left-column h3 , .subMen

Js脚本之jQuery学习笔记(4)

CSS之框模型和定位篇 框模型 在排版Html的时候,除了对元素的显示外观进行美化,还会涉及到页面元素的布局,于是引入了框的概念, 即我们对HTML里面的元素排版以一个个框为基本单位. 元素div与span的异同 首先我们先来了解两个元素 div:属于对内容分组使用的元素,没有任何预定语义的通用元素 span:属于文本元素,没有任何预定语义的通用元素 通俗的来说,没有预定义即不同与 代表段落.代表超链接已经有了自己含义.这两个元素的区别在于,使用div修饰时,它有一个区域的概念,会另起一行,与上

信息抽取学习笔记

MCU评测任务已经增加到5个:①场景模板填充(scenariotemplate,ST):定义了描述场景的模板及槽填充规范:②命名实体(namedentity,NE)识别:识别出文本中出现的专有名称和有意义的数量短语,并加以归类:③共指(co-reference,CR)关系确定:识别出给定文本中的参照表达(referringexpressions),并确定这些表达之间的共指关系:④模板元素(templateelement,TE)填充:类似于人名和组织机构名识别,但是,要求系统必须识别出实体的描述和

SHELL脚本攻略(学习笔记)--1.7 expr命令全解

expr命令可以实现数值运算.数值或字符串比较.字符串匹配.字符串提取.字符串长度计算等功能.它还具有几个特殊功能,判断变量或参数是否为整数.是否为空.是否为0等. 先看expr命令的info文档info coreutils 'expr invocation'的翻译. 16.4.1 字符串表达式 ------------------------- 'expr'支持模式匹配和字符串操作.字符串表达式的优先级高于数值表达式和 逻辑关系表达式. 'STRING : REGEX' 执行模式匹配.两端参数

windows下scrapy框架学习笔记—&#39;scrapy&#39; 不是内部或外部命令

最近几天在深入的学习scrapy框架,但是装完各种需要的基础包之后却发现scrapy命令在别的路径下都用不了,我一开始是把python安装在F:\Python路径下的,安装了scrapy后它默认都会安装在这个路径下,scrapy在路径F:\Python\Scripts路径下,我的scrapy命令只能在此路径下用,因此创建什么工程也都只能在此文件下. 想了一下它的工作原理:它在F:\Python\Scripts路径下,就会在Scripts文件下存在一个scrapy批处理文件,那么在DOS下想要命令