证书服务(一)非对称加密RSA,ssh使用密钥登录


简介:

证书服务是现在安全系统必不可少的安全手段。

经常用到的有SSL证书加密网站HTTPS,SSH登录的密钥。

一般是由CA证书中心给各个终端发放证书,然后各个终端

一:简单的非对称加密

公钥和私钥的概念

在现代密码体制中加密和解密是采用不同的密钥(公开密钥),也就是公开密钥算法(也叫非对称算法、双钥算法)”,每个通信方均需要两个密钥,即公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。

二:由信任的证书中心发放的证书

证书的概念

数字证书则是由证书认证机构(CA)对证书申请者真实身份验证之后,用CA的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机 构的公章)后形成的一个数字文件。CA完成签发证书后,会将证书发布在CA的证书库(目录服务器)中,任何人都可以查询和下载,因此数字证书和公钥一样是公开的。实际上,数字证书就是经过CA认证过的公钥。

三:ssh配置公钥私钥登录服务器

ssh主要有两种登录方式:第一种为密码口令登录,第二种为公钥登录。
密码口令登录
  通过密码进行登录,主要流程为:
    1、客户端连接上服务器之后,服务器把自己的公钥传给客户端
    2、客户端输入服务器密码通过公钥加密之后传给服务器
    3、服务器根据自己的私钥解密登录密码,如果正确那么就让客户端登录
公钥登录
  公钥登录是为了解决每次登录服务器都要输入密码的问题,流行使用RSA加密方案,主要流程包含:
    1、客户端生成RSA公钥和私钥
    2、客户端将自己的公钥存放到服务器
    3、客户端请求连接服务器,服务器将一个随机字符串发送给客户端
    4、客户端根据自己的私钥加密这个随机字符串之后再发送给服务器
    5、服务器接受到加密后的字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝。这样就不用使用密码了。

1.生成密钥对

opensll方式:

openssl genrsa -out private.pem 4096  #生成私钥。

openssl rsa -in private.pem -pubout -out pbulic.pem #由私钥生成公钥

ssh-keygen方式:

ssh-keygen -b 4096  #在用户目录下的.ssh目录生成密钥对。

用户jack:

 用户root:

puttygen方式:

RSA  4096,是设置的参数,对应openssl的 genrsa,4096,点击Generate后,在这个窗口随意晃动鼠标来生成密钥。

Save  public key,公钥。

Save private key,私钥。

很多地方都会用到的,毕竟所有的加密证书,都是从创建私钥开始的。

2.上传公钥

 我分别用puttygen,openssl,ssh-keygen生成了密钥。

上传至服务器/root/.ssh目录

我常用winscp,ctrl+alt+h 可以显示隐藏文件,隐藏隐藏文件也是这个快捷键。

3.配置sshd

ssh是远程登录客户端,sshd是ssh远程登录服务器。

我们要配置sshd,以使sshd服务,支持使用密钥登录。

[root@host ~]$ cd .ssh
[root@host .ssh]$ cat id_rsa.pub >> authorized_keys
[root@host .ssh]$ chmod 600 authorized_keys
[root@host .ssh]$ chmod 700 ~/.ssh
 

将公钥写入信任列表,并确认权限。

编辑 /etc/ssh/sshd_config 文件,进行设置:

里面有一行:Include /etc/ssh/sshd_config.d/*.conf

似乎现在流行在config.d下面增加配置文件了,不用你改原来的配置文件。

那就进去建一个吧。

/etc/ssh/sshd_config.d/RSAAuthentication.conf

PubkeyAuthentication yes
PubkeyAcceptedKeyTypes=+ssh-rsa

主要是PubkeyAcceptedKeyTypes=+ssh-rsa,默认貌似现在是GSSAPI了,增加ssh-rsa格式的密钥

PubkeyAuthentication yes,这行不确定原配置文件是什么,就也写进去了。

重启ssh服务

[root@host .ssh]$ systemctl restart sshd

4.另一种方法配置公钥(推荐方法)

winscp配置公钥

 

 打开私钥文件,然后向服务器安装公钥,根据提示输入用户名密码即可。

私钥还是要和用户名匹配使用的。

但是sshd的配置还得去修改。

5.公钥,authorized_keys

 putty,openssl,生成的公钥都不能直接导入到authorized_keys,需要putty导入私钥,然后自动生成这个认证密钥,才能导入,所以推荐winscp导入服务器公钥,它会自动转换的。

导入openssl格式的私钥,putty还会提示,就是让你转换一下格式而已,另存一份Putty格式的才可以用。

6.cockpit导入公钥

7.禁用密码登录

/etc/ssh/sshd_config.d/RSAAuthentication.conf  增加一行:

PasswordAuthentication no   #禁止密码登录。

 改这个之前至少配置好一个用户的密钥,否则你将无法远程登录。