それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

オレオレ証明書サイトでAjaxする。

昔のメモが出てきたので上げておく。WindowsXp(2008年)頃に対応したネタ。


オレオレ証明書のサイトとXmlHttp.Requestで通信するとエラーになる。

XMLHTTPではサーバー証明書のエラーを回避できない。WinnetとWinHTTPと、内部的に使っているCライブラリが違うそうだ。

XmlHttpオブジェクトを起動 ServerXMLHTTPでHTTP接続をする。

ソースコード
var  Request=function(){
    //MSDNから調べたCERT FLAGの値。
    var SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS = 2;
    var SXH_SERVER_CERT_IGNORE_UNKNOWN_CA = 256;
    var SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS = 13056;
  
    var xmlhttp = new ActiveXObject("Msxml2.ServerXMLHTTP.4.0");
    xmlhttp.open("GET", login_form_url, false);
    //HTTPSの自己証明書がエラーになるので⇒強制ロードする
    xmlhttp.setOption( 2 , 13056 );
    xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=UTF-8");
    xmlhttp.onreadystatechange = function(){}
    xmlhttp.send(null);
    //続けてログインをPOST
    xmlhttp.open("POST", login_cgi_url, false);
    xmlhttp.send("username="+username+"&"+"password="+password);

MSDNの資料

証明書問題の資料
2 	
SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS 

The SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS option is a DWORD mask of various flags that can be set to change this default behavior. The default value is to ignore all problems. You must set this option before calling the send method. The flags are as follows:

SXH_SERVER_CERT_IGNORE_UNKNOWN_CA = 256 

Unknown certificate authority

SXH_SERVER_CERT_IGNORE_WRONG_USAGE = 512 

Malformed certificate such as a certificate with no subject name.

SXH_SERVER_CERT_IGNORE_CERT_CN_INVALID = 4096 

Mismatch between the visited hostname and the certificate name being used on the server. 

SXH_SERVER_CERT_IGNORE_CERT_DATE_INVALID = 8192 

The date in the certificate is invalid or has expired.

SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS = 13056 

All certificate errors.

To turn off a flag, you subtract it from the default value, which is the sum of all flags. For example, to catch an invalid date in a certificate, you turn off the SXH_SERVER_CERT_IGNORE_CERT_DATE_INVALID flag as follows:
shx.setOption(2) = (shx.getOption(2) _
 - SXH_SERVER_CERT_IGNORE_CERT_DATE_INVALID)

ナニに使っていたかというと、学内のWirelessLanの自動ログイン。これがWEBページだったのだが、なにせ自己証明だったので困っていた。最近まで便利だった。