bitwarden

bitwarden auto fill Chrome extension> bitwarden> settings> option> autofill> enable auto-fill on page load podman server https://hub.docker.com/r/vaultwarden/server # docker pull vaultwarden/server:1.33.2-alpine podman pull vaultwarden/server:1.35.2-alpine podman run -d --name bitwarden -v bitwarden-data:/data/ -p 8000:80 docker.io/vaultwarden/server:latest docker run -d --name bitwarden --restart=always -v bitwarden-data:/data/ -p 8000:80 vaultwarden/server:1.28.1-alpine 测试一下,直接用浏览器访问 80 端口应该能看到 bitwarden 的登录页面,注册用户的话会被要求通过 https 访问。 client Linux (Arch): pacman -S bitwarden macOS (Homebrew): 桌面应用: brew install --cask bitwarden 命令行工具(CLI): brew install bitwarden-cli bitwarden ssh key, bw-key download bw-key from https://github.com/haipengno1/bw-key/releases ...

2026-01-11 · 1 min · 182 words · -

ca-certificates 导入CA证书

ca-certificates 导入 CA 证书, 安装 CA 证书 macos 导入自签名证书 在 Spotlight 里搜索 “钥匙串访问” 或者 Keychain Access, 在左侧栏里选择 System, 点击菜单栏 File> import items, 导入 自签名的 ca 证书 然后在 系统证书里面找名字是 *.wiloon.com 的证书, 双击打开, 展开 trust, when using this certificate: always trust archlinux ca-certificates update, 导入证书/安装证书 https://www.archlinux.org/news/ca-certificates-update/ # .pem rename to .crt # xxx.crt should export from sub ca sudo cp certs/ca-cert.pem /etc/ca-certificates/trust-source/anchors/wangyue-ca.crt sudo trust extract-compat # 验证是否安装成功 trust list|grep wiloon.com -A 5 -B 5 # 如果连接成功,它会输出服务器的证书链(包括自签名证书)、握手细节、证书的主题、颁发者等信息。 # s_client 工具在不指定验证选项时,只会“显示”证书信息,而不强制验证链条。 openssl s_client -connect hello.wiloon.com:443 openssl s_client -connect calibre.wiloon.com:443 -CApath /etc/ssl/certs -verify_return_error archlinux + chrome 但 Chrome(包括 Chromium)在 Linux 上使用独立的 NSS(Network Security Services)证书数据库,默认不直接读取系统 CA。它有自己的信任存储,通常位于 ~/.pki/nssdb/ ...

2025-06-24 · 3 min · 534 words · -

Openssl 生成自签名证书, self-signed cert

自签名证书, self-signed cert sudo pacman -S openssl # 查看默认的 OpenSSL 配置目录 openssl version -d # Create two directories for all certs and root private key that you will generate su - wiloon mkdir -p /home/wiloon/apps/self-signed-cert mkdir certs private # list all available curves openssl ecparam -list_curves # 使用 ECDSA 私钥 # 生成 ECDSA (椭圆曲线数字签名算法)密钥对, CA 密钥, root private key # 参数: -noout - 抑制输出椭圆曲线参数, 如果不加这个参数,命令会同时输出曲线参数和私钥,加上后只输出私钥部分 # -genkey:生成密钥对 # prime256v1 secp256r1 / NIST P-256 256 默认、安全性好、广泛兼容(TLS 默认) # ecparam 子命令, 专门处理椭圆曲线参数(EC Parameters) # -name prime256v1 指定曲线名称 openssl ecparam -name prime256v1 -genkey -out private/ca-key.pem # 使用 rsa 密钥 # genrsa 子命令默认就是生成 RSA 私钥, genrsa子命令没有-genkey参数 openssl genrsa -out private/ca-key.pem 4096 # read ca key openssl ec -in private/ca-key.pem -text -noout 准备一个生成 CA 证书的 配置文件 ca-cert.cnf, the value in the basicConstrains is CA:true ...

2025-06-24 · 4 min · 797 words · -

letsencrypt, certbot, certbot-auto, acme.sh

“letsencrypt, certbot, certbot-auto, acme.sh” certbot, certbot-auto, acme.sh certbot: recommended by the official website. certbot-auto: no longer supported. acme.sh: 第三方的 acme 协议实现. install certbot almalinux pip sudo dnf install python3 augeas-libs sudo dnf remove certbot python3 -m venv /opt/certbot/ /opt/certbot/bin/pip install --upgrade pip /opt/certbot/bin/pip install certbot certbot-nginx ln -s /opt/certbot/bin/certbot /usr/bin/certbot archlinux pacman -S certbot ubuntu # 不推荐用这种方式安装, 版本太旧 sudo apt install certbot # 如果以前安装过, 先卸载掉再安装 snap 版本 sudo apt-get remove certbot sudo apt update # for ubuntu snap is pre-installed sudo apt install snapd sudo snap install core sudo snap refresh core sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/bin/certbot snap set certbot trust-plugin-with-root=ok # 如果在使用 google dns, 需要安装这个包 snap install certbot-dns-google certonly # certonly: do not install, 不安装到 nginx, 因为 nginx 在 docker 里, 所以这里用 certonly # -m: provide email # --agree-tos: tos yes # --eff-email: share email yes # --keep-until-expiring: keep cert yes certbot certonly --standalone -m wiloon.wy@gmail.com --agree-tos --eff-email --keep-until-expiring \ -d wiloon.com -d bitwarden.wiloon.com certbot certonly --standalone -m wiloon.wy@gmail.com --agree-tos --eff-email --keep-until-expiring -d wangyue.dev # list all certificates issued by certbot certbot certificates # select and delete certificates certbot delete # for google dns certbot certonly --dns-google --dns-google-credentials /root/cellular-deck-280204-6455aa19691d.json -d wiloon.com -d *.wiloon.com commands # 查看证书, 查看已经安装的证书 certbot certificates centos dnf update dnf remove certbot dnf install epel-release dnf install snapd systemctl enable --now snapd.socket snap install core snap refresh core ln -s /var/lib/snapd/snap /snap snap install --classic certbot ln -s /snap/bin/certbot /usr/bin/certbot snap set certbot trust-plugin-with-root=ok snap install certbot-dns-google Couldn’t download https://raw.githubusercontent.com/certbot/certbot/v0.39.0/letsencrypt-auto-source/letsencrypt-auto. [urlopen error [Errno 110] Connection timed out](urlopen error [Errno 110] Connection timed out) ...

2020-06-04 · 3 min · 542 words · -

JWT, session

“JWT, session” github.com/golang-jwt/jwt 背景知识: Authentication和Authorization的区别 Authentication: 用户认证,指的是验证用户的身份,例如你希望以小A的身份登录,那么应用程序需要通过用户名和密码确认你真的是小A。 Authorization: 授权,指的是确认你的身份之后提供给你权限,例如用户小A可以修改数据,而用户小B只能阅读数据。 由于http协议是无状态的,每一次请求都无状态。当一个用户通过用户名和密码登录了之后,他的下一个请求不会携带任何状态,应用程序无法知道他的身份,那就必须重新认证。因此我们希望用户登录成功之后的每一次http请求,都能够保存他的登录状态。 目前主流的用户认证方法有基于token和基于session两种方式。 JWT和session ID也会暴露于未经防范的重放攻击 将JWT发布到特定的IP地址并使用浏览器指纹。 Local Storage 无状态 JWT (Stateless JWT) : 包含 Session 数据的 JWT Token。Session 数据将被直接编码进 Token 内。 有状态 JWT (Stateful JWT) : 包含 Session 引用或其 ID 的 JWT Token。Session 数据存储在服务端。 Session token (又称 Session cookie) : 标准的、可被签名的 Session ID,例如各类 Web 框架 (译者注: 包括 Laravel) 内已经使用了很久的 Session 机制。Session 数据同样存储在服务端。 ———————————————— 原文作者: Wi1dcard 转自链接: https://learnku.com/articles/22616 版权声明: 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接。 https://juejin.im/post/5a437441f265da43294e54c3 聊一聊JWT与session 前言 认证和授权,其实吧简单来说就是:认证就是让服务器知道你是谁,授权就是服务器让你知道你什么能干,什么不能干,认证授权俩种方式: Session-Cookie与JWT,下面我们就针对这两种方案就行阐述。 ...

2020-05-23 · 3 min · 529 words · -

Bcrypt

Bcrypt https://www.jianshu.com/p/2b131bfc2f10 Bcrypt 是单向 Hash 加密算法,类似 Pbkdf2 算法 不可反向破解生成明文。 每次输出的 hashPass 都不一样, Bcrypt 是怎么加密的? Bcrypt 有四个变量: saltRounds: 正数,代表hash杂凑次数,数值越高越安全,默认10次。 myPassword: 明文密码字符串。 salt: 盐,一个128bits随机字符串,22字符 myHash: 经过明文密码password和盐salt进行hash,个人的理解是默认10次下 ,循环加盐hash10次,得到myHash 每次明文字符串myPassword过来,就通过10次循环加盐salt加密后得到myHash, 然后拼接BCrypt版本号+salt盐+myHash等到最终的bcrypt密码 ,存入数据库中。 这样同一个密码,每次登录都可以根据自省业务需要生成不同的myHash, myHash中包含了版本和salt,存入数据库。 作者: martin6699 链接: https://www.jianshu.com/p/2b131bfc2f10 来源: 简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。 https://www.ujcms.com/knowledge/509.html http://www.mindrot.org/projects/jBCrypt/ https://www.cnblogs.com/jpfss/p/11024716.html http://www.mindrot.org/projects/jBCrypt/ 在 Java 中使用 Bcrypt, BCryptPasswordEncoder 如果引入了 Spring Security, BCryptPasswordEncoder 提供了相关的方法。 public class BCryptPasswordEncoderTest { public static void main(String[] args) { String pass = "admin"; BCryptPasswordEncoder bcryptPasswordEncoder = new BCryptPasswordEncoder(); String hashPass = bcryptPasswordEncoder.encode(pass); System.out.println(hashPass); boolean f = bcryptPasswordEncoder.matches("admin",hashPass); System.out.println(f); } } 可以看到,每次输出的 hashPass 都不一样, 但是最终的f都为 true,即匹配成功。 ...

2019-04-30 · 1 min · 149 words · -

SHA, Secure Hash Algorithm

SHA, Secure Hash Algorithm 安全散列算法 (英语: Secure Hash Algorithm,缩写为SHA) 安全散列算法SHA (Secure Hash Algorithm) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院 (NIST) 发布的一系列密码散列函数,包括 SHA-1、SHA-224、SHA-256、SHA-384 和 SHA-512 等变体。主要适用于数字签名标准 (DigitalSignature Standard DSS) 里面定义的数字签名算法 (Digital Signature Algorithm DSA) Hash 是什么,它的作用 先举个例子。我们每个活在世上的人,为了能够参与各种社会活动,都需要一个用于识别自己的标志。也许你觉得名字或是身份证就足以代表你这个人,但是这种代表性非常脆弱,因为重名的人很多,身份证也可以伪造。最可靠的办法是把一个人的所有基因序列记录下来用来代表这个人,但显然,这样做并不实际。而指纹看上去是一种不错的选择,虽然一些专业组织仍然可以模拟某个人的指纹,但这种代价实在太高了。 而对于在互联网世界里传送的文件来说,如何标志一个文件的身份同样重要。比如说我们下载一个文件,文件的下载过程中会经过很多网络服务器、路由器的中转,如何保证这个文件就是我们所需要的呢?我们不可能去一一检测这个文件的每个字节,也不能简单地利用文件名、文件大小这些极容易伪装的信息,这时候,我们就需要一种指纹一样的标志来检查文件的可靠性,这种指纹就是我们现在所用的Hash算法(也叫散列算法)。 散列算法 (Hash Algorithm) ,又称哈希算法,杂凑算法,是一种从任意文件中创造小的数字「指纹」的方法。与指纹一样,散列算法就是一种以较短的信息来保证文件唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到逆向规律。因此,当原有文件发生改变时,其标志值也会发生改变,从而告诉文件使用者当前的文件已经不是你所需求的文件。 这种标志有何意义呢?之前文件下载过程就是一个很好的例子,事实上,现在大部分的网络部署和版本控制工具都在使用散列算法来保证文件可靠性。而另一方面,我们在进行文件系统同步、备份等工具时,使用散列算法来标志文件唯一性能帮助我们减少系统开销,这一点在很多云存储服务器中都有应用。 https://blog.csdn.net/asdzheng/article/details/70226007

2018-06-24 · 1 min · 40 words · -

yubikey

yubikey HMAC-SHA1 challenge-response YubiKey 4 可以同时工作在三种模式: OTP mode: 作为键盘设备 (HID) : Yubico OTP, 第一次使用前需要把 KEY_ID,AES_KEY,SECRET 提交至验证服务器 (Yubico提供或者自己搭建) ,之后应用程序每次通过服务器验证密码的可靠性 (解码后SECRET对应、COUNT增大 (防止重放攻击) ) 。 Challenge-Response: 即可以通过 HID 接口给定一个输入, 输入 HMAC 的计算结果。输入需要本地代码实现。 静态密码, HOTP:算法与Challenge-Response类似,然而使用累加计数器代替了输入,并且HTOP是一个标准协议,许多网站和设备都兼容该标准。 在YubiKey中包含两个configuration slot,每一个slot可以单独配置以上模式中的其中一种,通过短触和长触来选择输入。 U2F mode: U2F 是一个开源的认证标准协议, 使用非对称加密算法, 在每次需要认证是设备可以对 challenge 信息使用私钥进行签名来完成认证。 作为一个开源的标准协议, Google、Dropbox 等网站都支持这种协议的两步验证, 然而现阶段浏览器端仅有 Chrome 支持。 CCID mode, Smartcard 模式: CCID (SmartCard) OpenPGP card 和 PIV card, 可以用来安全地保存 RSA 私钥 YubiKey 还可以作为标准的 OpenPGP Smart Card 使用, 用来存储 PGP 私钥 (设备中私钥是可写不可读的, 解密/签名操作在设备上完成) 。关于 PGP Smart Card 的更多信息, 可以参考这篇文章。 ...

2018-06-20 · 3 min · 579 words · -

SSH 密钥类型 RSA, DSA, ecdsa, ed25519

SSH 密钥类型 RSA, DSA, ecdsa, ed25519 rsa ecdsa ed25519 ed25519 是目前最安全、加解密速度最快的 key 类型, 优先选择 ed25519 rsa 兼容性最好, 小于 1024 位密钥长度的 RSA 已经有被攻破的记录, 建议长度 2048, 3072 或更大, 不过作为加密使用的 RSA 有着随密钥长度增加, 性能急剧下降的问题。 DSA 不建议使用, ssh-keygen 在生成 DSA 密钥时, 其长度只能为 1024 位 DSA, RSA 1977 年, 三位数学家 Rivest、Shamir 和 Adleman 设计了一种算法, 可以实现非对称加密。这种算法用他们三个人的名字命名, 叫做 RSA 算法。 原理与安全性 RSA 与 DSA 都是非对称加密算法。其中RSA的安全性是基于极其困难的大整数的分解 (两个素数的乘积) ;DSA 的安全性是基于整数有限域离散对数难题。基本上可以认为相同密钥长度的 RSA 算法与 DSA 算法安全性相当。 有点要注意,RSA 的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解 RSA 就一定需要作大数分解。不过也不必太过担心,RSA 从诞生以来,经历了各种攻击,至今未被完全攻破 (依靠暴力破解,小于1024位密钥长度的 RSA 有被攻破的记录,但未从算法上被攻破) 。 ...

2018-05-13 · 3 min · 552 words · -

AES

AES AES算法简介 AES的全称是Advanced Encryption Standard,意思是高级加密标准。它的出现主要是为了取代DES加密算法的,因为我们都知道DES算法的密钥长度是56Bit,因此算法的理论安全强度是2的56次方。但二十世纪中后期正是计算机飞速发展的阶段,元器件制造工艺的进步使得计算机的处理能力越来越强,虽然出现了3DES的加密方法,但由于它的加密时间是DES算法的3倍多,64Bit的分组大小相对较小,所以还是不能满足人们对安全性的要求。于是1997年1月2号,美国国家标准技术研究所宣布希望征集高级加密标准,用以取代DES。AES也得到了全世界很多密码工作者的响应,先后有很多人提交了自己设计的算法。最终有5个候选算法进入最后一轮: Rijndael,Serpent,Twofish,RC6和MARS。最终经过安全性分析、软硬件性能评估等严格的步骤,Rijndael算法获胜。 在密码标准征集中,所有AES候选提交方案都必须满足以下标准: 分组大小为128位的分组密码。 必须支持三种密码标准: 128位、192位和256位。 比提交的其他算法更安全。 在软件和硬件实现上都很高效。 AES密码与分组密码Rijndael基本上完全一致, Rijndael 分组大小和密钥大小都可以为128位、192位和256位。然而AES只要求分组大小为128位,因此只有分组长度为128Bit的Rijndael才称为AES算法。本文只对分组大小128位,密钥长度也为128位的Rijndael算法进行分析。密钥长度为192位和256位的处理方式和128位的处理方式类似,只不过密钥长度每增加64位,算法的循环次数就增加2轮,128位循环10轮、192位循环12轮、256位循环14轮。 ECB模式 (电子密码本模式: Electronic codebook) ECB是最简单的块密码加密模式,加密前根据加密块大小 (如AES为128位) 分成若干块,之后将每块使用相同的密钥单独加密,解密同理。 CBC模式 (密码分组链接: Cipher-block chaining) CBC模式对于每个待加密的密码块在加密前会先与前一个密码块的密文异或然后再用加密器加密。第一个明文块与一个叫初始化向量的数据块异或。 CBC模式相比ECB有更高的保密性,但由于对每个数据块的加密依赖与前一个数据块的加密所以加密无法并行。与ECB一样在加密前需要对数据进行填充,不是很适合对流数据进行加密。 CFB模式(密文反馈:Cipher feedback) 与ECB和CBC模式只能够加密块数据不同,CFB能够将块密文 (Block Cipher) 转换为流密文 (Stream Cipher) 。 注意:CFB、OFB和CTR模式中解密也都是用的加密器而非解密器。 CFB的加密工作分为两部分: 将一前段加密得到的密文再加密; 将第1步加密得到的数据与当前段的明文异或。 由于加密流程和解密流程中被块加密器加密的数据是前一段密文,因此即使明文数据的长度不是加密块大小的整数倍也是不需要填充的,这保证了数据长度在加密前后是相同的。 OFB模式 (输出反馈: Output feedback) OFB是先用块加密器生成密钥流 (Keystream) ,然后再将密钥流与明文流异或得到密文流,解密是先用块加密器生成密钥流,再将密钥流与密文流异或得到明文,由于异或操作的对称性所以加密和解密的流程是完全一样的。 http://blog.csdn.net/songdeitao/article/details/17267443 https://blog.csdn.net/qq_28205153/article/details/55798628 import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; public class AESCodec { public static byte[] encrypt(String key, byte[] value) { try { SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/Nopadding"); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); return cipher.doFinal(value); } catch (Exception ex) { ex.printStackTrace(); } return null; } public static byte[] decrypt(String key, byte[] encrypted) { try { SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/Nopadding"); cipher.init(Cipher.DECRYPT_MODE, skeySpec); byte[] original = cipher.doFinal(encrypted); return original; } catch (Exception ex) { ex.printStackTrace(); } return null; } } https://blog.poxiao.me/p/advanced-encryption-standard-and-block-cipher-mode/ ...

2018-02-07 · 1 min · 134 words · -

openssl basic

openssl basic 查看私钥长度 openssl rsa -in id_rsa.pem -text -noout get cert openssl s_client -connect site.com:636 </dev/null 2>/dev/null | openssl x509 -outform PEM > site.pem import cert into ca certs sudo keytool -importcert -noprompt -alias site-`date "+%Y%m%d%H%M%S"` -file ./site.pem -keystore /usr/java/latest/lib/security/cacerts -storepass changeit 查看证书信息 pem openssl x509 -noout -text -in ca.crt openssl x509 -noout -text -in foo.pem 查看 .der .crt 证书 openssl x509 -inform der -text -noout -in foo.crt pem 格式转 DER 格式 openssl x509 -outform der -in charles.pem -out charles.crt 查看 https 证书 openssl s_client -showcerts -connect www.baidu.com:443 # 证书链是倒序的, 从上面数第一个是叶子节点, 跟浏览器里看到的证书顺序相反. 查看 pem 证书内容 比如证书关联到了哪几个域名, 证书的有效期等. ...

2017-10-30 · 3 min · 458 words · -

apache shiro 自定义过滤器

apache shiro 自定义过滤器 http://blog.csdn.net/michnus/article/details/7987367

2013-01-17 · 1 min · 4 words · -

OpenSK

OpenSK Google 完全开源了其安全密钥项目 OpenSK,该实现支持 FIDO U2F 和 FIDO2 规范,支持 W3C 的 WebAuthn 标准,并采用安全可靠的 Rust 语言编写。 利用 OpenSK 开源项目,研究人员、安全密钥制造商以及发烧友可以快速制作出支持 FIDO 规范的安全密钥设备,体验更加安全的用户身份验证服务。 为了让用户能够低成本、快速上手体验 OpenSK,我们在 nRF52840 MDK USB Dongle 上做了移植,使其能够简单快速升级 OpenSK 固件而无需使用昂贵的下载工具。 硬件要求 nRF52840 MDK USB Dongle(裸板或外壳版都行,可自行在淘宝选购) 最新版 Google Chome 浏览器(38+)或 Firefox 浏览器 https://zhuanlan.zhihu.com/p/109631580

2012-12-29 · 1 min · 41 words · -

TLS, HTTPS

TLS, HTTPS 创建自签名TLS/SSL证书和私钥 https://www.ssldragon.com/zh/how-to/openssl/create-self-signed-certificate-openssl/ # 生成私钥 openssl genpkey -algorithm RSA -out private.key 自签名证书里的域名不能用 .dev 结尾, .dev 是 Google 持有的顶级域名, 不能用在自签名证书里 https://stackoverflow.com/questions/49503337/self-signed-dev-cert-untrusted-using-firefox-59-on-ubuntu https://blog.ideawand.com/2017/11/22/build-certificate-that-support-Subject-Alternative-Name-SAN/ https://www.mikesay.com/2018/12/30/create-self-signed-ssl/ 创建 CA 证书用的配置文件 ca.cnf https://www.mikesay.com/2018/12/30/create-self-signed-ssl/ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout selfsigned-key.key -out selfsigned-certificate.crt openssl: 基本命令行工具,用来创建和管理OpenSSL证书,私钥和其它文件。 req: 子命令,主要是用来创建和处理PKCS#10格式的证书请求。它也能创建被用作根证书的自签名证书。 -x509: 这个选项告诉openssl创建一个自签名证书而不是一个证书请求。 -nodes: 这个选项告诉openssl不要加密私钥,否则当使用在Nginx上时,每次Nginx启动都要提示输入密码。 -days 365: 设置证书的有效期为1年(365天)。 -newkey rsa:2048: 这个选项告诉 openss l在生成证书的同时生成私钥。rsa:2048 说明创建一个 2048 比特长的 RSA 私钥。 -keyout: 告诉 openssl 生成的私钥的名字和路径。 -out: 告诉openssl生成的自签名证书和路径。 客户端安装自签名证书 # ubuntu # 将证书拷贝到目录 “/usr/local/share/ca-certificates” sudo cp selfsigned-certificate.crt /usr/local/share/ca-certificates # 更新CA存储 sudo update-ca-certificates # 删除sudo update-ca-certificates --fresh sudo rm /usr/local/share/ca-certificates/selfsigned-certificate.crt sudo update-ca-certificates --fresh SAN SAN, Subject Alternative Name(证书主体别名) 是 SSL 标准 x509 中定义的一个扩展。它允许一个证书支持多个不同的域名。通过使用 SAN 字段,可以在一个证书中指定多个 DNS 名称(域名)、 IP 地址或其他类型的标识符,这样证书就可以同时用于多个不同的服务或主机上。这种灵活性意味着企业不需要为每个域名单独购买和安装证书, 从而降低了成本和复杂性。 ...

2012-03-21 · 3 min · 517 words · -

GPG

GPG GNU Privacy Guard 什么是 GPG 首先得搞清楚一个和它很像的东西:PGP (Pretty Good Privacy),这是一个非对称加密协议,可惜它本身是商业软件。于是万能的开源社区搞出了一个遵循此标准的免费实现:GPG (Gnu PG) ‘Debian – Apt-get, NO_PUBKEY / GPG error’ The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 010908312D230C5F Solution sudo apt-key adv –keyserver keyserver.ubuntu.com –recv-keys 3C962022012520A0 Simply type the following commands, taking care to replace the number of the key that displayed in the error message: gpg -keyserver pgpkeys.mit.edu -recv-key 010908312D230C5F gpg -a -export 010908312D230C5F | sudo apt-key add - ...

2011-12-17 · 1 min · 80 words · -

ssh-keygen

ssh-keygen, linux 生成 ssh 密钥 ssh-keygen 是用于为 SSH 创建新的身份验证密钥对的工具。此类密钥对用于自动登录,单点登录和验证主机。 目前广泛的用在 linux 服务验证、git 身份验证上。 执行 ssh-keygen 可以生成一个密钥对, 这个密钥对称为公钥文件和私钥文件 ,例如: 使用 rsa 算法:id_rsa(私钥), id_rsa.pub(公钥) 使用 dsa 算法:id_dsa(私钥), id_dsa.pub(公钥) 在 ~/.ssh 目录下生成私钥 id_rsa 和公钥 id_rsa.pub 文件 # 优先使用 ed25519 # 默认的密钥目录 /home/user_0/.ssh, .ssh 目录不存在的话会自动创建. ssh-keygen -t ed25519 -C "foo" ssh-keygen -t ed25519 -C "foo" -f ~/tmp/foo # RSA 算法 ssh-keygen -t rsa -C "foo" ssh-keygen -t rsa -C "foo" -f ~/tmp/foo ssh-keygen -t ed25519 -f foo -C "bar" # -t 选择加密算法, -t ed25519 使用加密算法 ed25519, 可选值: ed25519, rsa, dsa # -f foo, 生成的密钥文件名, 不指定文件名的话, ed25519 算法默认的文件名是 id_ed25519, 也可以指定完整的路径, 如 /home/user_0/tmp/foo # -C "bar" 在公钥文件中添加注释,即为这个公钥“起个别名”(不是 id,可以更改)。 # 公钥放到服务器的这个文件里 vim ~/.ssh/authorized_keys # 打印公钥指纹, The -l option instructs to show the fingerprint in the public key # while the -f option specifies the file of the key to list the fingerprint for. ssh-keygen -l -f id_ed25519 # 从私钥生成公钥 # -y This option will read a private OpenSSH format file and print an OpenSSH public key to stdout. ssh-keygen -y -f id_ed25519 > id_ed25519.pub ssh-keygen -t rsa ssh-keygen -t rsa -b 4096 ssh-keygen -t ecdsa -b 521 # -t type 指定要创建的密钥类型。可以使用: "rsa1"(SSH-1) "rsa"(SSH-2) "dsa"(SSH-2) ssh-keygen -t rsa -C "Michael Ledin" -b 4096 -m "PEM" # -C comment # -b key 长度 # -t 类型: dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa scp /root/.ssh/id_rsa.pub root@192.168.10.184:/root ssh 192.168.10.184 cat /root/id_rsa.pub >> /root/.ssh/authorized_keys # ok,you will login 192.168.10.184 without input password. 推送公钥到服务器 ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.1.0.2 print SHA256 fingerprint # retrieve the SHA256 fingerprint ssh-keygen -lf /path/to/ssh/key # GitHub (MD5) fingerprint format ssh-keygen -E md5 -lf <fileName> ssh-keygen -A public key file: authorized_keys ...

2011-11-24 · 3 min · 543 words · -

Hash, MAC, HMAC

Hash, MAC, HMAC HMAC Hash-MD5, SHA-1, integrity MAC- keyed hash, integrity & authenticity. HMAC 长度和其所用的hash长度一样 Hash 是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。 如果两个散列值是不相同的 (根据同一函数),那么这两个散列值的原始输入也是不相同的。 这个特性是散列函数具有确定性的结果,具有这种性质的散列函数称为单向散列函数。 但另一方面,散列函数的输入和输出不是唯一对应關係的,如果两个散列值相同,两个输入值很可能是相同的。 但也可能不同,這種情況稱為「碰撞」,這通常是兩個不同長度的散列值,刻意計算出相同的輸出值。 Hash,一般翻译做“散列”,也有直接音译为"哈希"的,就是把任意长度的输入 (又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。 简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。 HASH主要用于信息安全领域中加密算法,他把一些不同长度的信息转化成杂乱的128位的编码里,叫做HASH值. 也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系 了解了hash基本定义,就不能不提到一些著名的hash算法,MD5 和 SHA1 可以说是目前应用最广泛的Hash算法。 MD5(RFC1321) 是 Rivest 于 1991 年对 MD4 的改进版本,将任意长的明文 hash 成 128 bit 的杂凑值。 MD5是一种不可逆的加密算法,目前是最牢靠的加密算法之一,尚没有能够逆运算的程序被开发出来,它对应任何字符串都可以加密成一段唯一的固定长度的代码。 那么它有什么用呢?很简单,通过它可以判断原始值是否正确 (是否被更改过)。一般用于密码的加密。而我们所提供的MD5校验码就是针对安装程序的唯一对应的一段代码。你可以使用任何MD5运算器对下载的文件进行运算,运算出来的结果如果完全符合我们提供的MD5校验码,那么说明你下载的这个程序没有被中途修改过。 这个特征码有如下特性,首先它不可逆,例如我有一段秘密的文字如:“My Secret Words”,经算法变换后得到MD5码(b9944e9367d2e40dd1f0c4040d4daaf7),把这个码告诉其他人,他们根据这个MD5码是没有系统的方法可以知道你原来的文字是什么的。 其次,这个码具有高度的离散性,也就是说,原信息的一点点变化就会导致MD5的巨大变化,例如"ABC" MD5(902fbdd2b1df0c4f70b4a5d23525e932)和"ABC " (多了一空格)MD5(12c774468f981a9487c30773d8093561)差别非常大,而且之间没有任何关系,也就是说产生的MD5码是不可预测的。 最后由于这个码有128位那么长,所以任意信息之间具有相同MD5码的可能性非常之低,通常被认为是不可能的。 所以一般认为MD5码可以唯一地代表原信息的特征,通常用于密码的加密存储,数字签名,文件完整性验证等。 SHA1 是由 NIST NSA 设计为同 DSA 一起使用的,sha 是 Secure Hash algorithm 的缩写;它对长度小于 2^64 的输入,产生长度为 160bit 的散列值; SHA-1 设计时基于和 MD4 相同原理,并且模仿了该算法。 ...

2011-08-25 · 1 min · 211 words · -