网络安全的三个关键目标:

机密性、完整性、可用性

对称加密协议:

DES/AES/3DES。

非对称加密:RSA/DSS/ECC

   数学函数 

私钥:secret

公钥:public

私钥加密的数据只可以用公钥解密(身份验证),公钥加密的数据只可以用私钥解密。(机密性)

功能:身份验证、机密性、秘钥交换。

单向加密:可以将明文加密成密文,但不可解密,目的是保证数据的完整性。提取数据的特征码,称为哈希计算或者散列计算。

常见协议:MD5/SHA1

作用:保证数据的完整性

数字签名:用户通过私钥对文件的特征码进行加密,对方只可以使用发送方的公钥解密,称为数字签名,并且此过程中的特征码是通过MD5/SHA来进行提取特征码,也保证了特征码不会被篡改,保证了数据本身的完整性。(非对称加密本身可以实现数据的完整性,但是加密过程耗时,所以采用此方法)

完整的加密传输过程:

数字证书:

证书格式:x.509v3

  内容:版本号、序列号、签名算法标识、发行者名称、有效期、证书主体名称、证书主体公钥信息、发行商唯一标示、证书主体的唯一标识、签名、扩展。

PKI

是一个管理数字证书的规范,应该包括以下以下内容:

申请者

注册机构(RC)

签证机构(CA)

证书撤销列表(CRL)发布机构

证书存取库

SSL:最开始是由网景公司为web服务提供的安全协议。其模块是在会话层和传输层之间,常见的https、ftps、smtps、pop3都是建立在SSL基础之上的。

套接字:就是在一个端口上提供多种服务。

TLS是由国际组织来完成的通讯安全传输协议。和SSL有相同的意义。

OPENSSL:

libcrypto:加密、解密

libssl:实现ssl功能

openssl:命令行程序,由主命令和子命令组成,比如openssl dgst、openssl enc、openssl speed。如果需要查看具体子命令的用法可以使用man enc或者man sslpasswd的方法尝试

基本用法:

1、使用des3算法加密文件

openssl enc -des3 -in /path/to/somefile -e -out /path/to/file.des3

openssl enc -des3 -in /path/to/file.des3 -d -out /path/to/somefile

2、使用md5对文件进行计算特征码

openssl -dest -md5 fstab.txt

md5sum fstab.txt

3、openssl passwd -1 -salt

4、创建私钥(rsa算法)

openssl genrsa 1024 #1024位私钥的位数,可以自己设置

导出私钥:openssl genrsa >mykey.pri

5、对私钥进行加密

openssl genrsa -des3 1024

6、提取私钥的公钥

openssl rsa -in mykey.pri -pubout

如何申请证书

1、生成一个私钥,公钥

2、制作一个证书签署请求。

3、由ca负责对你生成的密钥对进行签署证书。

7、制作证书签署请求。

openssl req -new -key ./mykey.pri -out ./myreq.csr

8、自己创建CA。

默认ca证书配置文件可以查看/etc/pki/tls/openssl.cnf。

进入目录
cd /etc/pki/ca

创建CA私钥

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

生成自签名证书

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

自签需要使用-x509,cacert.pem不能变化,需要依据/etc/pki/tls/openssl.cnf创建。

创建签证列表

touch serial index.txt

对申请进行确认,并制作证书(.crt)

openssl ca -in myreq.csr -out mycert.crt

[ ca ]

default_ca      = CA_default            # The default ca section


####################################################################

[ CA_default ]


dir             = /etc/pki/CA           # Where everything is kept

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

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

RANDFILE        = $dir/private/.rand    # private random number file


x509_extensions = usr_cert              # The extentions to add to the cert


# Comment out the following two lines for the "traditional"

# (and highly broken) format.

name_opt        = ca_default            # Subject Name options

cert_opt        = ca_default            # Certificate field options


# Extension copying option: use with caution.

# copy_extensions = copy


# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs

# so this is commented out by default to leave a V1 CRL.

# crlnumber must also be commented out to leave a V1 CRL.

# crl_extensions        = crl_ext


default_days    = 365                   # how long to certify for

default_crl_days= 30                    # how long before next CRL

default_md      = default               # use public key default MD

preserve        = no                    # keep passed DN ordering


# A few difference way of specifying how similar the request should look

# For type CA, the listed attributes must be the same, and the optional

# and supplied fields are just that :-)

policy          = policy_match


# For the CA policy

[ policy_match ]

countryName             = match

stateOrProvinceName     = match

organizationName        = match

organizationalUnitName  = optional

commonName              = supplied

emailAddress            = optional


# For the 'anything' policy

# At this point in time, you must list all acceptable 'object'

# types.

[ policy_anything ]

countryName             = optional

stateOrProvinceName     = optional

localityName            = optional

organizationName        = optional

organizationalUnitName  = optional

commonName              = supplied

emailAddress            = optional

8、专用客户端测试工具

openssl s_client -connect host:port -CAfile /path/to/cacertfile(-CApath /path/) -ssl2(-tls1)

总结:

加密、解密:enc

信息摘要:dgst

生成私钥、提取公钥:genrsa

制作证书签署请求,自建ca:req

签署:ca

https通讯时,服务器会发送自己的证书给客户端,客户端要验证服务器的证书是否可靠,需要下载ca的证书来确定服务器的身份,而客户端和服务器通讯使用的是对称加密,但由于这种通讯时连接时间很短,在下次连接的时候,会更改秘钥,所有是安全的。

sudo详解

/etc/sudoers

可以定义谁在哪些主机上以什么身份使用的哪些命令。

user ALL=/sbin/mount /mnt/cdrom,/sbin/umount /mnt/cdrom

设置组用户权限:

%groupname 192.168.1.55=/usr/sbin/useradd

sudoers支持使用别名对同类对象进行分组,组名必须使用全大写字母。

Host_Alias:主机别名

User_Alias:用户别名

Cmnd_Alias:命令别名

例如:

User_Alias USERALASE=tom,gongbing,user1

Host_Alias HOSTALASE= 192.168.1.55,192.168.1.20

Cmnd_Alias COMMANDALASE=/usr/sbin/useradd,/user/sbin/usermod

USERALASE HOSTALASE=COMMANDALASE


sudo -l :查看配置文件sudoers中用户可以使用的命令。

-k:结束密码的有效期,下次执行命令时要求输入用户密码。

执行命令:

1、指定用户登录linux

2、执行命令

sudo visudo