如何使用系统authorized_keys
文件中的条目进行java.security.PublicKey
实施?我特别想比较来自authorized_keys文件中的公共密钥和Apache
SSHD PublickeyAuthenticator
界面中可用的公共密钥。
令我惊讶的是,那里没有明显的东西。我很好奇,并实现了一种解码authorized_keys
文件的方法。这取决于用于Base64解码的Apache
Commons Codec。
import java.io.File;
import java.math.BigInteger;
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.DSAPublicKeySpec;
import java.security.spec.RSAPublicKeySpec;
import java.util.Scanner;
import org.apache.commons.codec.binary.Base64;
public class AuthorizedKeysDecoder {
private byte[] bytes;
private int pos;
public PublicKey decodePublicKey(String keyLine) throws Exception {
bytes = null;
pos = 0;
// look for the Base64 encoded part of the line to decode
// both ssh-rsa and ssh-dss begin with "AAAA" due to the length bytes
for (String part : keyLine.split(" ")) {
if (part.startsWith("AAAA")) {
bytes = Base64.decodeBase64(part);
break;
}
}
if (bytes == null) {
throw new IllegalArgumentException("no Base64 part to decode");
}
String type = decodeType();
if (type.equals("ssh-rsa")) {
BigInteger e = decodeBigInt();
BigInteger m = decodeBigInt();
RSAPublicKeySpec spec = new RSAPublicKeySpec(m, e);
return KeyFactory.getInstance("RSA").generatePublic(spec);
} else if (type.equals("ssh-dss")) {
BigInteger p = decodeBigInt();
BigInteger q = decodeBigInt();
BigInteger g = decodeBigInt();
BigInteger y = decodeBigInt();
DSAPublicKeySpec spec = new DSAPublicKeySpec(y, p, q, g);
return KeyFactory.getInstance("DSA").generatePublic(spec);
} else {
throw new IllegalArgumentException("unknown type " + type);
}
}
private String decodeType() {
int len = decodeInt();
String type = new String(bytes, pos, len);
pos += len;
return type;
}
private int decodeInt() {
return ((bytes[pos++] & 0xFF) << 24) | ((bytes[pos++] & 0xFF) << 16)
| ((bytes[pos++] & 0xFF) << 8) | (bytes[pos++] & 0xFF);
}
private BigInteger decodeBigInt() {
int len = decodeInt();
byte[] bigIntBytes = new byte[len];
System.arraycopy(bytes, pos, bigIntBytes, 0, len);
pos += len;
return new BigInteger(bigIntBytes);
}
public static void main(String[] args) throws Exception {
AuthorizedKeysDecoder decoder = new AuthorizedKeysDecoder();
File file = new File("authorized_keys");
Scanner scanner = new Scanner(file).useDelimiter("\n");
while (scanner.hasNext()) {
System.out.println(decoder.decodePublicKey(scanner.next()));
}
scanner.close();
}
}
问题内容: 由于需要执行一些服务器端代码-主要是发送电子邮件,因此我决定将Nodejs&Express与Firebase一起用于服务器端元素以保存数据- 部分是出于学习经验。 我的问题是,在使用简单电子邮件和密码API进行身份验证时,使用客户端Firebase库和Nodejs库的最佳方法是什么?如果我执行身份验证客户端,然后随后在NodeJS端调用其他路由,则该用户的身份验证将在请求中进行。在No
我想将以下XML发布到web服务:- 我希望得到以下响应XML:-
我正在使用Activiti7,我想禁用activiti安全性。我尝试重写WebSecurityConfigurerAdapter配置方法,但它不起作用
问题内容: 我问自己,例如Selenium是否有可能确保Selenium Grid中的通信安全。据我所知,Selenium通过JSON和Selenese命令进行通信。但是它没有被加密。是否可以加密通信? 非常感谢。 问题答案: 快速攻克:建立ssh隧道。 使用以下ssh命令将远程服务器的端口4444转发为本地端口: ssh user @ remotesrv -L 4444:127.0.0.1:44
默认情况下,所有敏感的HTTP端点都是安全的,只有具有Actuator角色的用户才能访问它们。安全性是使用标准的HTTPServletRequest.isUserInRole方法实施的。我们可以使用management.security.enable = false来禁用安全性。只有在执行机构端点在防火墙后访问时,才建议禁用安全性。
当我使用security.basic.enabled=false在具有以下依赖项的Spring Boot项目上禁用安全性时: 为了修复此异常,我必须添加属性-management.security.enabled=false。我的理解是,当执行器在类路径中时,应该将security.basic.enabled=false和management.security.enabled=false设置为禁用