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发证:自签署证书


配置文件:/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


用openssl实现私有CA:


生成密钥对儿:

# (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 Username@HOST [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] Username@HOST


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

scp SRC1 SRC2 ... DEST


分两种情况:

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

# scp /path/to/somefile ... Username@HOST:/path/to/somewhere

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

# scp Username@HOST:/path/to/somefile  /path/to/somewhere


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

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

-q: 静默模式

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


sftp: 是基于ssh的ftp协议

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

Subsystemsftp/usr/libexec/openssh/sftp-server


用法:# sftp [username@]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







      本文转自开源殿堂 51CTO博客,原文链接:http://blog.51cto.com/kaiyuandiantang/1961104,如需转载请自行联系原作者


相关文章
|
7天前
|
Linux 网络安全
CentOS7服务器SSH登陆时自动显示服务器基础信息
CentOS7服务器SSH登陆时自动显示服务器基础信息
59 0
|
7天前
|
分布式计算 Hadoop Shell
使用shell脚本实现自动SSH互信功能
使用shell脚本实现自动SSH互信功能
18 1
|
5月前
|
网络安全
设定开机脚本自动链接ssh
设定开机脚本自动链接ssh
34 0
|
6月前
|
Shell Linux 网络安全
ssh 主机之间免密配置脚本
ssh 主机之间免密配置脚本
52 0
|
6月前
|
Linux 网络安全
今天你花里胡哨了吗 --- 定制属于自己的linux ssh迎宾信息
今天你花里胡哨了吗 --- 定制属于自己的linux ssh迎宾信息
37 0
|
7月前
|
jenkins Linux 网络安全
使用Jenkins通过Publish Over SSH插件远程控制主机执行脚本
使用Jenkins通过Publish Over SSH插件远程控制主机执行脚本
104 0
|
7月前
|
jenkins Linux 网络安全
使用Jenkins通过SSH插件远程控制主机执行脚本
使用Jenkins通过SSH插件远程控制主机执行脚本
183 1
|
9月前
|
算法 Shell Linux
linux实现SSH免密登录设置,以及shell脚本实现
linux实现SSH免密登录设置,以及shell脚本实现
377 0
|
9月前
|
安全 网络协议 Shell
iOS 逆向编程(六) SSH、OpenSSH、SSL、OpenSSL 简介与关系
iOS 逆向编程(六) SSH、OpenSSH、SSL、OpenSSL 简介与关系
192 0
|
Shell 网络安全 开发工具
配置Git作者相关信息,以及SSH,全网最简单!
配置Git作者相关信息,以及SSH,全网最简单!
177 0
配置Git作者相关信息,以及SSH,全网最简单!