хорошо, я использую mac для генерации моих самозаверяющих ключей. Вот метод работы, который я использовал.
Я создал сценарий оболочки для ускорения генерации ключей.
genkey.sh
#/bin/sh
ssh-keygen -f host.key
openssl req -new -key host.key -out request.csr
openssl x509 -req -days 99999 -in request.csr -signkey host.key -out server.crt
openssl pkcs12 -export -inkey host.key -in server.crt -out private_public.p12 -name "SslCert"
openssl base64 -in private_public.p12 -out Base64.key
добавить флаг + x execute к скрипту
chmod +x genkey.sh
затем вызовите genkey.sh
./genkey.sh
Я ввожу пароль (важно указать пароль хотя бы для экспорта в конце)
Enter pass phrase for host.key:
Enter Export Password: {Important to enter a password here}
Verifying - Enter Export Password: { Same password here }
Затем я беру все в Base64.Key и помещаю его в строку с именем sslKey
private string sslKey = "MIIJiAIBA...................................." +
"......................ETC...................." +
"......................ETC...................." +
"......................ETC...................." +
".............ugICCAA=";
Затем я использовал ленивый загрузчик свойств Load, чтобы получить сертификат X509 с закрытым ключом.
X509Certificate2 _serverCertificate = null;
X509Certificate2 serverCertificate{
get
{
if (_serverCertificate == null){
string pass = "Your Export Password Here";
_serverCertificate = new X509Certificate(Convert.FromBase64String(sslKey), pass, X509KeyStorageFlags.Exportable);
}
return _serverCertificate;
}
}
Я хотел пойти по этому пути, потому что я использую .net 2.0 и Mono на Mac, и я хотел использовать код vanilla Framework без скомпилированных библиотек или зависимостей.
В последний раз я использовал SslStream для защиты TCP-соединения с моим приложением
SslStream sslStream = new SslStream(serverCertificate, false, SslProtocols.Tls, true);
Надеюсь, это поможет другим людям.
Примечание
Без пароля мне не удалось правильно разблокировать закрытый ключ для экспорта.