private static string GetFingerprint(IntPtr x509) { var bufferHandle = default(GCHandle); int length = OpenSsl.EVP_MAX_MD_SIZE; var buffer = new byte[length]; try { bufferHandle = GCHandle.Alloc(buffer, GCHandleType.Pinned); if (OpenSsl.X509_digest(x509, OpenSsl.EVP_sha256(), bufferHandle.AddrOfPinnedObject(), ref length) != 1) { throw new Exception($"Cannot calculate digest: {OpenSsl.GetLastError()}"); } } finally { bufferHandle.Free(); } var sb = new StringBuilder("sha-256 "); for (var i = 0; i < length; ++i) { sb.AppendFormat("{0:X2}:", buffer[i]); } sb.Length -= 1; return(sb.ToString()); }