Chủ Nhật, 18 tháng 9, 2022

[C#] How to get info certificate https website

Hi mọi người, ngày buồn như tiếng thở dài, tìm đâu cho thấy bài hay để viết :)).

Nhưng lang thang một hồi lại thấy bài này cũng hay, có tính năng kiểm tra Certificate SSL của website đang sữ dụng chứng chỉ Certificate SSL ở đâu ^^~.

Nếu bạn quản lý một lúc nhiều website, và bạn muốn quản lý thông tin tất cả các chứng chỉ website.

Thì bài viết này, sẻ giúp bạn các code để lấy thông tin của một certificate website.

Thông tin ssl của website mình xem từ trình duyệt Chrome:

Ở hình trên, các bạn thấy thông tin chi tiết của website HUNGQB.COM.
FULL CODE
using System;
using System.Net.Security;
using System.Net.Sockets;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DownloadCertificateWebsite
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private async void btnGet_Click(object sender, EventArgs e)
        {
            var info = new StringBuilder();
            var certificate = await CertificateDownloader.GetCertificateAsync(txt_website.Text.Trim(), 443);
            info.AppendLine($"Subject:   {certificate.Subject}");
            info.AppendLine($"Issuer:    {certificate.Issuer}");
            info.AppendLine($"NotBefore: {certificate.NotBefore}");
            info.AppendLine($"NotAfter:  {certificate.NotAfter}");
            info.AppendLine($"Algorithm: {certificate.SignatureAlgorithm.FriendlyName}");
            txt_info.Text = info.ToString();
        }
    }

    static class CertificateDownloader
    {

        private static readonly RemoteCertificateValidationCallback s_certificateCallback = (a, b, c, d) => true;

        public static async Task<X509Certificate2> GetCertificateAsync(string domain, int port = 443)
        {
            var client = new TcpClient(domain, port);
            var sslStream = new SslStream(client.GetStream(), leaveInnerStreamOpen: true, s_certificateCallback);
            await sslStream.AuthenticateAsClientAsync(domain).ConfigureAwait(false);
            var serverCertificate = sslStream.RemoteCertificate;
            if (serverCertificate != null)
                return new X509Certificate2(serverCertificate);

            return null;
        }
    }
}
Chúc mọi người thành công và áp dụng thủ thuật này vào chương trình kiểm tra website tốt nhất nhé.

9 nhận xét:

Nặc danh nói...

test thử code báo lỗi bạn?

Kelvin Key nói...

mình sữ dụng bình thường mà bạn?

Quản Trị Viên nói...

Thấy ok nhưng k có website của bản thân phát triển để kiểm tra thì cũng vậy thôi haha.

MOD HUNGQB ™ nói...

bạn có thể vào đây để tại source code về test thử nhé.

MOD HUNGQB ™ nói...

Uầy, nói sao nghe có gì đó sai sai ấy bạn :)), NAME : QUẢN TRỊ VIÊN ??? vậy bạn quản trị cái gì vậy haha vd : e út, gai, hang hiệc...??? :))

Unix Coders nói...

haha, k có website để viết chương trình này :v

Nặc danh nói...

https://www.youtube.com/watch?v=Yr43tclhSKw

MOD HUNGQB ™ nói...

website : https://tinhoc88.com/lap-trinh-vb-net/page-1

MOD HUNGQB ™ nói...

có thể dùng blog m` để test bạn nhé