我在使用公钥认证设置OpenSSH for Windows时遇到问题.
我在本地桌面上工作,可以使用Unix机器或其他OpenSSH for Windows机器上的密钥进行ssh.
我已将构建复制到服务器上,我可以使密码验证工作正常,但是当我使用密钥时,我得到以下问题:
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug3: start over, passed a different list publickey,password,keyboard-interactive
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /cygdrive/c/sshusers/jsadmint2232/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
Connection closed by 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
因此,出于测试目的,我一直尝试SSH到localhost,但即使远程尝试,我也会遇到同样的问题.
更奇怪的是,当我启用了密码和公钥时sshd_config,它只会尝试使用密钥,然后使用上述消息轰炸,甚至不会尝试使用密码.
以下是我采取的步骤:
我目前正致力于将键转换为字符串,反之亦然.它适用于公钥转换,并将私钥转换为String.由于某种原因,相同的代码不会将String转换回私钥,这是我无法弄清楚的.
转换器代码是:
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
@SuppressWarnings("restriction")
public class KeyConvert {
public static PublicKey stringToPublicKey(String s) {
BASE64Decoder decoder = new BASE64Decoder();
byte[] c = null;
KeyFactory keyFact = null;
PublicKey returnKey = null;
try {
c = decoder.decodeBuffer(s);
keyFact = KeyFactory.getInstance("DSA", "SUN");
} catch (Exception e) {
System.out.println("Error in Keygen");
e.printStackTrace();
}
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(c);
try {
returnKey = keyFact.generatePublic(x509KeySpec);
} catch (Exception e) {
System.out.println("Error in Keygen2");
e.printStackTrace(); …Run Code Online (Sandbox Code Playgroud) 我使用RSA算法生成公钥和私钥
final KeyPairGenerator keyGen = KeyPairGenerator.getInstance(ALGORITHM);
keyGen.initialize(1024);
final KeyPair key = keyGen.generateKeyPair();
final PrivateKey privateKey=key.getPrivate();
final PublicKey publickey=key.getPublic();
Run Code Online (Sandbox Code Playgroud)
之后,使用Base64编码器对这些密钥进行编码并将其保存到数据库中.
如何在java中将此编码的字符串转换为私有和公钥类型是解密文件.使用Base64Decoder解码此String时将获得一个字节数组.如何将此Byte数组转换为公钥或私钥类型?
我在修改我的装备时遇到问题.我试图运行rhc设置,我也删除了我的.ssh文件夹并再次执行rhc设置,但这也没有用.
不知道发生了什么变化,但它在几个小时前工作了.
>git push -u <GEAR_NAME> master
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.
>git remote add devstage3 -f ssh://<GEAR_ID>@<GEAR_NAME>-<GEAR-DOMAIN>.rhcloud.com/~/git/<GEAR_DOMAIN>.git/
Run Code Online (Sandbox Code Playgroud)
此外,我试图启动一个不同的齿轮并承诺,但我得到同样的错误:
Updating <GEAR_NAME>
The authenticity of host '<GEAR_NAME>-<GEAR-DOMAIN>.rhcloud.com (<GEAR_IP>)' can't be established.
RSA key fingerprint is <KEY_FINGERPRINT>.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '<GEAR_NAME>-<GEAR-DOMAIN>.rhcloud.com,<GEAR_IP>' (RSA) to the list of known hosts.
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
fatal: Could not …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试使用C#生成并发送公共RSA密钥.它应该是PEM格式的2048位长密钥.我使用OpenSSL命令成功完成了以下操作(缩短了一些输出):
$ openssl genrsa 2048
Generating RSA private key, 2048 bit long modulus
............................................................+++
............................................................+++
e is 65537 (0x10001)
$ openssl rsa -pubout
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAy1MoBtENHBhYLgwP5Hw/xRGaBPHonApChBPBYD6fiq/QoLXA
RmyMoOjXHsKrrwysYIujXADM2LZ0MlFvPbBulvciWnZwp9CUQPwsZ8xnmBWlHyru
xTxNSvV+E/6+2gMOn3I4bmOSIaLx2Y7nCuaenREvD7Mn0vgFnP7yaN8/9va4q8Lo
...
...
y5jiKQKBgGAe9DlkYvR6Edr/gzd6HaF4btQZf6idGdmsYRYc2EMHdRM2NVqlvyLc
MR6rYEuViqLN5XWK6ITOlTPrgAuU6Rl4ZpRlS1ZrfjiUS6dzD/jtJJvsYByC7ZoU
NxIzB0r1hj0TIoedu6NqfRyJ6Fx09U5W81xx77T1EBSg4OCH7eyl
-----END RSA PRIVATE KEY-----
writing RSA key
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy1MoBtENHBhYLgwP5Hw/
xRGaBPHonApChBPBYD6fiq/QoLXARmyMoOjXHsKrrwysYIujXADM2LZ0MlFvPbBu
lvciWnZwp9CUQPwsZ8xnmBWlHyruxTxNSvV+E/6+2gMOn3I4bmOSIaLx2Y7nCuae
nREvD7Mn0vgFnP7yaN8/9va4q8LoMKlceE5fSYl2QIfC5ZxUtkblbycEWZHLVOkv
+4Iz0ibD8KGo0PaiZl0jmn9yYXFy747xmwVun+Z4czO8Nu+OOVxsQF4hu1pKvTUx
9yHH/vk5Wr0I09VFyt3BT/RkecJbAAWB9/e572T+hhmmJ08wCs29oFa2Cdik9yyE
2QIDAQAB
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)
以下代码是我用来使用C#生成公钥的代码:
// Variables
CspParameters cspParams = null;
RSACryptoServiceProvider rsaProvider = null;
StreamWriter publicKeyFile = null;
string publicKey = "";
try
{
// Create a new …Run Code Online (Sandbox Code Playgroud) 当我执行这些命令时(在第一个之后设置密码)...
$ ssh-keygen -t dsa
$ chmod 600 my_key
$ chmod 600 my_key.pub
Run Code Online (Sandbox Code Playgroud)
......然后,测试密码......
$ ssh-add my_key.pub
Run Code Online (Sandbox Code Playgroud)
......我一直在:
Bad passphrase, try again for my_key.pub:
Bad passphrase, try again for my_key.pub:
Bad passphrase, try again for my_key.pub:
Bad passphrase, try again for my_key.pub:
...
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我已经研究了一些关于如何实现我在问题中所说的内容并发现了几个API,但大多数API看起来非常复杂,因为我只是在这方面的一个noobie我只想要一个简单的方法,如:
public String Encrypt(String message, PublicKey publicKey)
Run Code Online (Sandbox Code Playgroud)
不知道是否可以这样做?如果没有那么请有人开导我另一种方式来实现这个:)
谢谢.
更新:
到目前为止,我只看到OpenPGP加密的所有库都需要公钥和私钥才能进行加密,而我只想用公钥加密(因为我没有私钥来使用它) !
可能是一个简单的问题,但我在这里不知所措......
在github中,可以为每个存储库添加部署密钥,该部署密钥仅提供对该单个存储库的访问.
但是对于一个客户端,我在同一台服务器上使用git管理了两个项目(项目A和项目B).如果我使用项目A的公钥,github告诉我,我不能将它用作项目B的部署密钥,反之亦然.
如何创建另一个公钥并设置git以使用项目A的一个键和项目B的另一个键?
我需要将我的iPhone应用程序与系统集成,他们需要通过给定的公钥加密数据,有3种不同格式的文件.xml .der和.pem,我研究过并发现了一些关于从中获取SecKeyRef的文章DER/PEM,但它们总是返回零.以下是我的代码:
NSString *pkFilePath = [[NSBundle mainBundle] pathForResource:@"PKFile" ofType:@"der"];
NSData *pkData = [NSData dataWithContentsOfFile:pkFilePath];
SecCertificateRef cert;
cert = SecCertificateCreateWithData(NULL, (CFDataRef) pkData);
assert(cert != NULL);
OSStatus err;
if (cert != NULL) {
err = SecItemAdd(
(CFDictionaryRef) [NSDictionary dictionaryWithObjectsAndKeys:
(id) kSecClassCertificate, kSecClass,
(id) cert, kSecValueRef,
nil
],
NULL
);
if ( (err == errSecSuccess) || (err == errSecDuplicateItem) ) {
CFArrayRef certs = CFArrayCreate(kCFAllocatorDefault, (const void **) &cert, 1, NULL);
SecPolicyRef policy = SecPolicyCreateBasicX509();
SecTrustRef trust;
SecTrustCreateWithCertificates(certs, policy, &trust);
SecTrustResultType trustResult;
SecTrustEvaluate(trust, …Run Code Online (Sandbox Code Playgroud) 我正在开发的共享软件注册系统将公共DSA密钥嵌入可执行文件本身,私钥驻留在服务器上.(为便于讨论,让我们假设服务器是100%安全的,有没有办法对任何人得到他们的手私钥.)
每当购买程序时,服务器通过使用私钥对用户的名称进行签名来为用户生成许可证.然后将该许可证通过电子邮件发送给用户.一旦用户手动将其名称和许可证输入共享软件应用程序,它就会被嵌入在应用程序中的公钥验证为有效或无效的许可证.
然而,对于具有正确的"技术诀窍"的确定的人来说,反汇编可执行文件并检索公钥将是相当微不足道的.
我的问题是,他们可以用它做什么?公钥本身是完全无害的吗?公钥是否足以对密钥生成器进行逆向工程?
好奇的人想知道.提前致谢!
public-key ×10
ssh ×3
c# ×2
encryption ×2
git ×2
java ×2
pem ×2
private-key ×2
rsa ×2
cryptography ×1
der ×1
dsa ×1
git-push ×1
github ×1
iphone ×1
jce ×1
openshift ×1
openssh ×1
openssl ×1
passphrase ×1
pgp ×1
registration ×1
security ×1
signing ×1
windows ×1