重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
title: linux-openssl
创新互联建站坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都做网站、网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的潮州网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
date: 2020-09-16 11:02:15
categories:
{% note info %}
OpenSSL是一个健壮的、商业级的、功能齐全的开源工具包,用于传输层安全(TLS)协议,以前称为安全套接字层(Secure Sockets Layer, SSL)协议。协议实现基于全强度通用密码库,也可以单独使用。
openssl是一个功能丰富且自包含的开源安全工具箱。它提供的主要功能有:SSL协议实现(包括SSLv2、SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1编解码库、证书请求(PKCS10)编解码、数字证书编解码、CRL编解码、OCSP协议、数字证书验证、PKCS7标准实现和PKCS12个人数字证书格式实现等功能。
span style="color:red;"项目地址/span span style="color:red;"官方网址/span span style="color:red;"手册/span
{% endnote %}
{% tabs configtab, 1 %}
对称算法使用一个密钥。给定一个明文和一个密钥,加密产生密文,其长度和明文大致相同。解密时,使用读密钥与加密密钥相同。
ECB\CBC\CFB\OFB
摘要算法是一种能产生特殊输出格式的算法,这种算法的特点是:无论用户输入什么长度的原始数据,经过计算后输出的密文都是固定长度的,这种算法的原理是根据一定的运算规则对原数据进行某种形式的提取,这种提取就是摘要,被摘要的数据内容与原数据有密切联系,只要原数据稍有改变,输出的“摘要”便完全不同,因此,基于这种原理的算法便能对数据完整性提供较为健全的保障。但是,由于输出的密文是提取原数据经过处理的定长值,所以它已经不能还原为原数据,即消息摘要算法是不可逆的,理论上无法通过反向运算取得原数据内容,因此它通常只能被用来做数据完整性验证。
如今常用的“消息摘要”算法经历了多年验证发展而保留下来的算法已经不多,这其中包括MD2、MD4、MD5、SHA、SHA-1/256/383/512等。
常用的摘要算法主要有MD5和SHA1。MD5的输出结果为16字节,sha1的输出结果为20字节。
在公钥密码系统中,加密和解密使用的是不同的密钥,这两个密钥之间存在着相互依存关系:即用其中任一个密钥加密的信息只能用另一个密钥进行解密。这使得通信双方无需事先交换密钥就可进行保密通信。其中加密密钥和算法是对外公开的,人人都可以通过这个密钥加密文件然后发给收信者,这个加密密钥又称为公钥;而收信者收到加密文件后,它可以使用他的解密密钥解密,这个密钥是由他自己私人掌管的,并不需要分发,因此又成称为私钥,这就解决了密钥分发的问题。
主要的公钥算法有:RSA、DSA、DH和ECC。
Openssl中大量用到了回调函数。回调函数一般定义在数据结构中,是一个函数指针。通过回调函数,客户可以自行编写函数,让openssl函数来调用它,即用户调用openssl提供的函数,openssl函数再回调用户提供的函数。这样方便了用户对openssl函数操作的控制。在openssl实现函数中,它一般会实现一个默认的函数来进行处理,如果用户不设置回调函数,则采用它默认的函数。
{% endtabs %}
方法一,有的时候经常需要登录ssh,每次都需要输入密码,会比较繁琐。所以设置了一下使用RSA公钥认证的方式登录Linux。首先需要在服务器端设置/etc/ssh/sshd_config# vim /etc/ssh/sshd_config修改如下两行为yes。其实大多数情况下不用修改,默认就是yes。RSAAuthentication yesPubkeyAuthentication yes(1) 如果客户机和服务器都是Linux机器,那么我们使用下面的方法:(后面第2节会提到怎么在Windows下使用Putty生成密钥对)我们需要在客户端生成RSA密钥对。使用ssh-keygen命令:# ssh-keygen -t rsa参数t的意思是type,后面跟着加密类型,这里我们是rsa。然后会提示你输入密钥保存完成文件名,这里我们需要使用默认的id_rsa,之后才能正常才能登录。如果你生成的密钥作为其他用处,那么可以命名为其他名称:Generating public/private rsa key pair.Enter file in which to save the key (/home/cake/.ssh/id_rsa):之后会提示你输入一个passphrase,我们这里可以留空,这样我们登录的时候就不许输入密码。Enter passphrase (empty for no passphrase):Enter same passphrase again:然后会提示你密钥生成成功。这是你的私钥保存为~/.ssh/id_rsa,你的公钥是~/.ssh/id_rsa.pub我们现在需要做的是,把id_rsa.pub的内容,添加的服务器端的~/.ssh/autherized_keys文件最后。你可以把这个文件上传到服务器端,然后使用命令:# cat id_rsa.pub ~/.ssh/autherized_keys到这里就完成了。(2) 在Windows下使用Putty生成密钥对:Putty的安装目录下有个puttygen.exe程序,我们运行这个程序。之后点击Generate,开始生成密钥对。我们需要根据提示,在指定方框内随机滑动鼠标。这是为了根据鼠标轨迹,产生一些随机数据。之后生成结束,我们点击Save Private Key将私钥存放在某个目录中。然后赋值最上面文本框中的全部内容,粘贴到Linux服务器端的autherized_key的最后。我们现在可以关闭这个小程序。现在打开Putty,在左边的选项中,选择Conneciton–SSH–Auth,在Private key file for authentication中,选择刚才保存的私钥路径就可以了。到此位置,Putty也可以不用密码登录了。方法二使用Linux主机生成的密匙1、生成密匙[root@ .ssh]#ssh-keygen -t rsaGenerating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa):Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /root/.ssh/id_rsa.Your public key has been saved in /root/.ssh/id_rsa.pub.The key fingerprint is:e4:9a:47:a7:b4:8a:0b:98:07:b8:70:de:6b:16:2c:0croot@2、将 /root/.ssh/id_rsa.pub改名为/root/.ssh/authorized_keys[root@ .ssh]#mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys3、将私钥id_rsa拷贝到远程客户端1)、如果远程客户端是linux,拷贝到远程客户端/root/.ssh/即可2)、putty作为远程客户端在putty不能识别直接从服务器拷贝来的私钥,需要使用puttygen.exe进行格式转换(1)、打开puttygen.exe -- Conversions -- Import Key(2)、选择拷贝过来的私钥文件id_rsa(3)、Save private key-id_rsa.ppk(保存私钥)4、打开putty.exe1)、Session -- Host Name (填写服务器地址或者域名)2)、Connection -- SSH -- Auth (点Browse选择刚生成的id_rsa.ppk)3)、open成功打开后出现如下提示:login as: rootAuthenticating with public key "imported-openssh-key"----------------------------------------------------------------------------------当然你有可能会遇到这个错误 [因为我遇到了,呵呵]:Permissions 0755 for '你配置的公钥文件路径' are too open.这个是因为这几个文件权限设置的有点问题执行命令: chmod 600 你的文件
不得不说,免密登录确实很方便
使用配置公钥秘钥
这个网上其实很多资料,
首先在服务器执行ssh-kegen,一路回车
或ssh-keygen -t rsa -C " your_email@example.com "
完成后会在、root/.ssh下生产公钥秘钥文件
将公钥追加到authorized_keys
cat rsa_pubauthorized_keys
将秘钥复制到本地,
找到puttygen来生成ppk文件
打开puttygen,点击load,选择所有文件, 选择 id_rsa文件,Save private key,保存秘钥
然后登录页面选择这个秘钥文件就可以,后面登录就不用了再输入密码了
win10现在貌似已经默认安装了openshh,可以直接用来ssh登录
也可以配置成免密登录
win10命令行执行ssh-keygen生成公钥以及秘钥
公钥放到服务器目录root/.ssh,和1一样的方式
生成的时候如果选择不是默认目录,则需要添加下秘钥
管理员身份打开powershell
执行下列命令
cd 到秘钥所在路径
get-service ssh-agent| set-servers-startuptype manaul
startservices sshagent
get-servcies sshagent
ssh-add s_sra
power shell也要深入学习下了,很多有用的功能
然后,执行ssh root@192.168.0.102
直接就可以登录到服务器了,
做个bat或ps1脚本,把ssh这句写入,就可以实现双击直接登录了,
首先明确一点,一对密钥分为私钥和公钥,私钥是你自己留着的,公钥是放在远程主机的。密钥对通过 ssh-keygen 创建的,在哪台主机创建的无所谓,你可以将公钥放到任意你想登陆的服务器上,也可以把私钥放到任意需要登陆的客户机上。
现在使用 ssh-keygen 生成一对密钥
使用 ssh-copy-id 将公钥发送到指定的主机上
在目标主机的 ~/.ssh/authorized_keys 中会添加刚刚发送来的公钥。
这样就可以实现免密登陆了。
Linux 使用ssh-agent来管理密钥,使用 ssh-keygen 生成之后会自动添加到ssh-agent,也可以通过 ssh-add 私钥 来添加,通过以下命令操作
有些程序点名需要 -----BEGIN OPENSSH RSA KEY-----
可以使用以下命令生成
1、linux秘钥有ssh密钥或SSL密钥,都有公钥和私钥概念,都属于PKI范畴。
私钥包含密码并用来解密,公钥用来加密。
2、ssh-keygen
-t
rsa会在~/.ssh生成密钥对
more
id_isa就是私钥,id_isa.pub为公钥
3、more
id_isa可以看到
-----BEGIN
RSA
PRIVATE
KEY-----
4、ssh-keygen
-l可以查看Show
fingerprint
of
key
file
5、用openssl察看key
openssl
rsa
-in
key.pem
-text
-noout
6、SSL证书包含域名和公司信息
openssl
x509
-inform
PEM
-in
ssl.pem
-noout
-text
客户端设置
客户需要生成密钥对(公共和私有)。 稍后我们会将公钥上传到SSH服务器。
ssh-keygen
生成SSH密钥时,系统将提示您输入密码。 我们建议在此步骤中使用新密码。 这将避免别人使用你的钥匙。
将公钥上传到服务器
现在我们将使用ssh-copy-id命令来上传密钥。 您可以手动将公钥(~/.ssh/id_rsa.pub)附加到服务器上的 ~/.ssh/authorized_keys。
ssh-copy-id user@hostname
更安全的SSH设置
此步骤是可选的,但建议禁用密码验证(特别是root用户)打开文件 /etc/ssh/sshd_config 并将PasswordAuthentication更改为“no”值。
PasswordAuthentication no
确保在重新启动SSH服务器之前测试您的ssh密钥验证!
sudo service ssh restart