Linux 第51,52天 openssl,ssh

Linux 第51,52天 openssl,ssh

时间:20180912

时间:20180913


目录

对称加密解密工具

实现公钥私钥加密

openssl 一个强大的工具,可以调用多样的加密算法来加密解密

base64编码原理

建立CA和申请授权证书(脚本完成)

实现ssh基于密钥认证,并实现批量化将公钥传输至指定的目标主机上(脚本完成)

ssh私钥加密

本文总结



对称加密解密工具

gpg (注意选项顺序)

-c 使用对称密钥加密

-o 指定输出文件名

-d 解密文件

加密文件 gpg -c file1 会提示输出密码,然后就会生成与名字相同的gpg后缀文件

解密文件 gpg -d file.sec -o file1 (注意是在不同的机器哦,cent7同机器

不需要输入密码,具体原因未知)


实现公钥私钥加密

gpg 

--gen-key 生成非对称密钥

--list-key 列出已经生成的密钥

--delete-keys 删除非对称密钥

-a 使用ASCII格式输出加密的文件

--export

--import

-e 使用非对称密钥加密

-r 指定使用哪个密钥加密


openssl 一个强大的工具,可以调用多样的加密算法来加密解密

单向加密

工具 md5sum, sha1sum, sha224sum, sha256sum... 

openssl dgst

如 openssl dgst -sha512 file...

生成用户密码

openssl passwd -1 -salt SALT(最多8位)


生成随机数

openssl rand [-base64|-hex] NUM

NUM 表示字节数; -hex时每个字符为十六进制,相当于4位二进制,出现的字符数为

NUM数*2


生成密钥对

生成私钥

openssl genrsa -out /path/name.key NUM

如(umask 077;openssl genrsa -out test.key -des 2048)

opelssl rsa in test.key -out test2.key 将加密的key解密

从私钥提取出公钥

openssl rsa in privvatekey -pubout -out /path/pub.key


base64编码原理

是一种编码,可以将所给的数据采用二进制方式读取,每六位为一个字符将其编码,所采用的字符

是a-z,A-Z,0-9,+/64个字符来表示,如所给的数据不足六位二进制数时,会自动补0,但其结果

会显示为=号


建立CA和申请授权证书(脚本完成)

实现脚本创建CA(还未完全自动需要手工输入创建CA时需要添写的资料)

删除CA,生成私钥和证书请求,签署证书请求 (用时3小时,时间有点长)

脚本不足:未添加查看功能待完善哈哈(函数已经建好了就等高人添加内容了)

#!/bin/bash

# config PKI

# version 2.0

# auth Winthcloud


# Build the Private CA

dir='/etc/pki/CA'

database="$dir/index.txt"

serial="$dir/serial"

certificate="$dir/cacert.pem"

private_key="$dir/private/cakey.pem"

crlnumber="$dir/crlnumber"

new_certs_dir="$dir/newcerts"

crl="$dir/crl.pem"


configPki(){

[ ! -f "$database" ] && touch $database &>/devnull

[ ! -f "$serial" ] && echo 01 > $serial

[ ! -f "$private_key" ] && (umask 077;openssl genrsa -out 

$private_key 2048&>/dev/null)   #此处和上一行为一行内容

[ ! -f "$certificate" ] && openssl req -new -x509 -key 

$private_key -days 3650 -out $certificate #此处和上一行为一行内容

echo 01 > $crlnumber

}

# Delete the Private CA

delPki(){

[ -f "$database" ] && rm -f $database{,.attr{,.old},.old}

    [ -f "$serial" ] && rm -f $serial{,.old}

    [ -f "$private_key" ] && rm -f $private_key

    [ -f "$certificate" ] && rm -f $certificate

[ -f "$crlnumber" ] && rm -f $crlnumber{,.old}

[ -f "$crl" ] && rm -f $crl

rm -f $dir/certs/* $dir/newcerts/*

}

# Sign the Certificate Request

signCsr(){

openssl ca -in $1 -days $2 -out $dir/certs/$1.crt

}

#Revoke Certificate

revokeCrl(){

SN=`openssl x509 -in $1 -noout -serial|cut -d"=" -f2`

openssl ca -revoke $new_certs_dir/$SN.pem &> /dev/null

openssl ca -gencrl -out $crl &> /dev/null

}

# Create Private Key

createPK(){

openssl genrsa -out $1 $2

openssl req -new -key $1 -out $1.csr

}

#viewInfo(){

# if [ "$1" = "crl" ];then

# openssl crl -in $crl -noout -issuer -crlnumber

# fi

#}

if [ "$1" = "bldCA" ];then

configPki

elif [ "$1" = "delCA" ];then

delPki

elif [ "$1" = "revoke" -a -f $2 ];then

revokeCrl $2

elif [ "$1" = "signCsr" -a -f "$2" -a -n "$3" ];then

signCsr $2 $3

elif [ "$1" = "genPK" -a -n "$2" -a "$3" -ge "1024" ];then

createPK $2 $3

else

echo -e "\033[1;31mCreate Private CA Insititution\033[0m"

echo -e "\tUsage: `basename $0` <bldCA|delCA|signCsr <csrFile> 

<ExpireDays>|revoke <CRTFile> > "   #此处和上一行为一行内容

echo -e "\033[1;31mGenerate both Private Key and CerTificate Requeste\033[0m"

echo -e "\tUsage: `basename $0` <genPK> <PKName> <KeyLength>"

fi



实现ssh基于密钥认证,并实现批量化将公钥传输至指定的目标主机上

1.首先自建立一个文档里边有三列 IP USERNAME PASSWORD

如 cat ipList.txt 

192.168.1.5 admin admin

2.建立脚本生成本机的私钥,并读取此上述文件将本机的公钥拷贝至目标主机

#!/bin/bash

# Description: this script automatically Copy the SHH pub Key

# to the remote host.

# Version: 2.0

# Auth: Winthcloud


port=22

keyfile=~/.ssh/id_rsa

iplist=ip.txt

[ -f "$keyfile" ] || ssh-keygen -t rsa -f $keyfile -P "" &>/dev/null

while read ipline;do

ip=`echo $ipline | awk '{print $1}'`

user=`echo $ipline | awk '{print $2}'`

password=`echo $ipline | awk '{print $3}'`

expect << EOF

spawn ssh-copy-id -i $keyfile.pub $user@$ip -p $port

expect {

"yes/no" {send "yes\n";exp_continue}

"password" {send "$password\n"}

}

expect eof

EOF

echo -e "\033[1;32m$ip has received the pub Key\033[0m"

done < $iplist


ssh私钥加密

虽然使用密钥通信时方便,不为私钥,但是如果私钥丢失,则会出现很严重的问题

但是为私钥添加密码后,使用起来又需要输入密码,这里有一个工具可以代替用户输入密码


为私钥加密

ssh-keygen -p

代替用户输入密码(本人测试未成功)

ssh-agent bash

ssh-add



本文总结:

1. 编写脚本可先构框架,再写具体命令(这个叫什么开发来着?)

2. 另一种编写方式边写边加需求(这个是另外一种开发方式也忘记叫什么了哈哈)

3. 基于密钥认证机制的机器指定私钥文件为~/.ssh/id_rsa叫这个名字是因为sshd服务

所定义的如果把名字改为其它的文件名使用ssh连接时需要使用-i选项来指定私钥位置,所以生

成的私钥文件最好不要改名不然连接时会多个参数需要手工敲

4. 私钥的权限必须是600,即组和其它没有权限

5. 在脚本中使用重定向的时候最后结束符EOF必须是在绝对行首前边不可有空格,不然会被

认为是书写的字符导致最终文件没有结束标志。


猜你喜欢

转载自blog.51cto.com/winthcloud/2176302
今日推荐