コード例 #1
0
        private string prepareCrlCache()
        {
            string crlCache;

            if (String.IsNullOrEmpty(_crlUrl))
            {
                return(null);
            }


            Uri uri = new Uri(_crlUrl);

            crlCache = Path.Combine(Logger.LogPath, Uri.UnescapeDataString(uri.Segments[uri.Segments.Length - 1]));


            if (!File.Exists(crlCache))
            {
                NetTool.CacheUrlResource(_crlUrl, crlCache);
            }

            if (!File.Exists(crlCache))
            {
                _errMsg = String.Format("無法下載憑證廢止清單=>{0}", _crlUrl);
                return(null);
            }

            return(crlCache);
        }
コード例 #2
0
        private IntPtr buildCrl()
        {
            string crlCache = prepareCrlCache();

            if (crlCache == null)
            {
                return(IntPtr.Zero);
            }

            IntPtr pCrlContext = openCRL(crlCache);

            if (IntPtr.Zero == pCrlContext)
            {
                _errMsg = Win32.Win32.ShowWin32Error(Marshal.GetLastWin32Error());
                return(IntPtr.Zero);
            }

            Win32.Win32.CRL_CONTEXT crlContext = (Win32.Win32.CRL_CONTEXT)Marshal.PtrToStructure(pCrlContext, typeof(Win32.Win32.CRL_CONTEXT));
            Win32.Win32.CRL_INFO    crlInfo    = (Win32.Win32.CRL_INFO)Marshal.PtrToStructure(crlContext.pCrlInfo, typeof(Win32.Win32.CRL_INFO));
            DateTime crlUpdate = DateTime.FromFileTime(((long)crlInfo.NextUpdate.dwHighDateTime << 32) + (long)crlInfo.NextUpdate.dwLowDateTime);

            if (crlUpdate < DateTime.Now)
            {
                Win32.Win32.CertFreeCRLContext(pCrlContext);
                NetTool.CacheUrlResource(_crlUrl, crlCache);

                if (!File.Exists(crlCache))
                {
                    _errMsg = String.Format("無法讀取載憑證廢止清單=>{0}", crlCache);
                    return(IntPtr.Zero);
                }

                pCrlContext = openCRL(crlCache);
                if (IntPtr.Zero == pCrlContext)
                {
                    _errMsg = Win32.Win32.ShowWin32Error(Marshal.GetLastWin32Error());
                    return(IntPtr.Zero);
                }
            }

            return(pCrlContext);
        }