| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- using Renci.SshNet.Common;
- using Renci.SshNet.IntegrationTests.Common;
- using Renci.SshNet.Security;
- using Renci.SshNet.TestTools.OpenSSH;
- namespace Renci.SshNet.IntegrationTests
- {
- [TestClass]
- public class HostKeyAlgorithmTests : IntegrationTestBase
- {
- private IConnectionInfoFactory _connectionInfoFactory;
- private RemoteSshdConfig _remoteSshdConfig;
- [TestInitialize]
- public void SetUp()
- {
- _connectionInfoFactory = new LinuxVMConnectionFactory(SshServerHostName, SshServerPort);
- _remoteSshdConfig = new RemoteSshd(new LinuxAdminConnectionFactory(SshServerHostName, SshServerPort)).OpenConfig();
- }
- [TestCleanup]
- public void TearDown()
- {
- _remoteSshdConfig?.Reset();
- }
- [TestMethod]
- public void SshRsa()
- {
- DoTest(HostKeyAlgorithm.SshRsa, HostKeyFile.Rsa);
- }
- [TestMethod]
- public void SshRsaSha256()
- {
- DoTest(HostKeyAlgorithm.RsaSha2256, HostKeyFile.Rsa);
- }
- [TestMethod]
- public void SshRsaSha512()
- {
- DoTest(HostKeyAlgorithm.RsaSha2512, HostKeyFile.Rsa);
- }
- [TestMethod]
- public void SshEd25519()
- {
- DoTest(HostKeyAlgorithm.SshEd25519, HostKeyFile.Ed25519);
- }
- [TestMethod]
- public void Ecdsa256()
- {
- DoTest(HostKeyAlgorithm.EcdsaSha2Nistp256, HostKeyFile.Ecdsa256);
- }
- [TestMethod]
- public void Ecdsa384()
- {
- DoTest(HostKeyAlgorithm.EcdsaSha2Nistp384, HostKeyFile.Ecdsa384);
- }
- [TestMethod]
- public void Ecdsa521()
- {
- DoTest(HostKeyAlgorithm.EcdsaSha2Nistp521, HostKeyFile.Ecdsa521);
- }
- [TestMethod]
- public void SshRsaCertificate()
- {
- DoTest(HostKeyAlgorithm.SshRsaCertV01OpenSSH, HostCertificateFile.RsaCertRsa);
- }
- [TestMethod]
- public void SshRsaSha256Certificate()
- {
- DoTest(HostKeyAlgorithm.RsaSha2256CertV01OpenSSH, HostCertificateFile.RsaCertRsa);
- }
- [TestMethod]
- public void Ecdsa256Certificate()
- {
- DoTest(HostKeyAlgorithm.EcdsaSha2Nistp256CertV01OpenSSH, HostCertificateFile.Ecdsa256CertRsa);
- }
- [TestMethod]
- public void Ecdsa384Certificate()
- {
- DoTest(HostKeyAlgorithm.EcdsaSha2Nistp384CertV01OpenSSH, HostCertificateFile.Ecdsa384CertEcdsa);
- }
- [TestMethod]
- public void Ecdsa521Certificate()
- {
- DoTest(HostKeyAlgorithm.EcdsaSha2Nistp521CertV01OpenSSH, HostCertificateFile.Ecdsa521CertEd25519);
- }
- [TestMethod]
- public void Ed25519Certificate()
- {
- DoTest(HostKeyAlgorithm.SshEd25519CertV01OpenSSH, HostCertificateFile.Ed25519CertEcdsa);
- }
- private void DoTest(HostKeyAlgorithm hostKeyAlgorithm, HostKeyFile hostKeyFile, HostCertificateFile hostCertificateFile = null)
- {
- _remoteSshdConfig.ClearHostKeyAlgorithms()
- .AddHostKeyAlgorithm(hostKeyAlgorithm)
- .ClearHostKeyFiles()
- .AddHostKeyFile(hostKeyFile.FilePath)
- .WithHostKeyCertificate(hostCertificateFile?.FilePath)
- .Update()
- .Restart();
- HostKeyEventArgs hostKeyEventsArgs = null;
- using (var client = new SshClient(_connectionInfoFactory.Create()))
- {
- client.HostKeyReceived += (sender, e) => hostKeyEventsArgs = e;
- client.Connect();
- client.Disconnect();
- }
- Assert.IsNotNull(hostKeyEventsArgs);
- Assert.AreEqual(hostKeyAlgorithm.Name, hostKeyEventsArgs.HostKeyName);
- Assert.AreEqual(hostKeyFile.KeyLength, hostKeyEventsArgs.KeyLength);
- CollectionAssert.AreEqual(hostKeyFile.FingerPrint, hostKeyEventsArgs.FingerPrint);
- if (hostCertificateFile is not null)
- {
- Assert.IsNotNull(hostKeyEventsArgs.Certificate);
- Assert.AreEqual(Certificate.CertificateType.Host, hostKeyEventsArgs.Certificate.Type);
- Assert.AreEqual(hostCertificateFile.CAFingerPrint, hostKeyEventsArgs.Certificate.CertificateAuthorityKeyFingerPrint);
- }
- else
- {
- Assert.IsNull(hostKeyEventsArgs.Certificate);
- }
- }
- private void DoTest(HostKeyAlgorithm hostKeyAlgorithm, HostCertificateFile hostCertificateFile)
- {
- DoTest(hostKeyAlgorithm, hostCertificateFile.HostKeyFile, hostCertificateFile);
- }
- }
- }
|