@@ -1251,6 +1251,69 @@ OpenWrap.format.prototype.getPublicIP = function() {
1251
1251
return $rest ( ) . get ( "https://ifconfig.co/json" ) ;
1252
1252
} ;
1253
1253
1254
+ /**
1255
+ * <odoc>
1256
+ * <key>ow.format.getTLSCertificates(aHost, aPort, withJava, aPath, aPass, aSoTimeout) : Array</key>
1257
+ * Tries to retreive the TLS certificates from aHost, aPort (defaults to 443). Optionally if withJava=true the original certificate
1258
+ * Java object will also be included. If the CA certificates is in a different location you can provide aPath and the corresponding aPass.
1259
+ * Additionally you can specificy aSoTimeout (socket timeout in ms) which defaults to 10s.
1260
+ * </odoc>
1261
+ */
1262
+ OpenWrap . format . prototype . getTLSCertificates = function ( aHost , aPort , withJava , aPath , aPass , aSoTimeout ) {
1263
+ _$ ( aHost , "aHost" ) . isString ( ) . $_ ( ) ;
1264
+ aPort = _$ ( aPort , "aPort" ) . isNumber ( ) . default ( 443 ) ;
1265
+ aPath = _$ ( aPath , "aPath" ) . isString ( ) . default ( ow . format . getJavaHome ( ) + "/lib/security/cacerts" ) ;
1266
+ aPass = _$ ( aPass , "aPass" ) . isString ( ) . default ( "changeit" ) ;
1267
+ withJava = _$ ( withJava , "withJava" ) . isBoolean ( ) . default ( false ) ;
1268
+ aSoTimeout = _$ ( aSoTimeout , "aSoTimeout" ) . isNumber ( ) . default ( 10000 ) ;
1269
+
1270
+ var context = javax . net . ssl . SSLContext . getInstance ( "TLS" ) ;
1271
+ var tmf = javax . net . ssl . TrustManagerFactory . getInstance ( javax . net . ssl . TrustManagerFactory . getDefaultAlgorithm ( ) ) ;
1272
+ var ks = java . security . KeyStore . getInstance ( java . security . KeyStore . getDefaultType ( ) ) ;
1273
+ ks . load ( io . readFileStream ( aPath ) , ( new java . lang . String ( aPass ) ) . toCharArray ( ) ) ;
1274
+ tmf . init ( ks ) ;
1275
+ var defaultTrustManager = tmf . getTrustManagers ( ) [ 0 ] ;
1276
+ var cchain ;
1277
+ var tm = new JavaAdapter ( javax . net . ssl . X509TrustManager , {
1278
+ getAcceptedIssuers : function ( ) {
1279
+ return new java . security . cert . X509Certificate ( ) ;
1280
+ } ,
1281
+ checkClientTrusted : function ( ) {
1282
+ throw new javax . net . ssl . UnsupportedOperationException ( ) ;
1283
+ } ,
1284
+ checkServerTrusted : function ( chain , authType ) {
1285
+ cchain = chain ;
1286
+ defaultTrustManager . checkServerTrusted ( chain , authType ) ;
1287
+ }
1288
+ } ) ;
1289
+ context . init ( null , [ tm ] , null ) ;
1290
+ var factory = context . getSocketFactory ( ) ;
1291
+
1292
+ var socket = factory . createSocket ( aHost , aPort ) ;
1293
+ socket . setSoTimeout ( aSoTimeout ) ;
1294
+ try {
1295
+ socket . startHandshake ( ) ;
1296
+ } catch ( e ) {
1297
+ }
1298
+ socket . close ( ) ;
1299
+
1300
+ var sres = af . fromJavaArray ( cchain ) ;
1301
+ var res = sres . map ( r => {
1302
+ var rr = {
1303
+ issuerDN : r . getIssuerDN ( ) ,
1304
+ subjectDN : r . getSubjectDN ( ) ,
1305
+ notBefore : new Date ( r . getNotBefore ( ) . toGMTString ( ) ) ,
1306
+ notAfter : new Date ( r . getNotAfter ( ) . toGMTString ( ) )
1307
+ } ;
1308
+ if ( withJava ) rr . javaObj = r ;
1309
+ if ( ! isNull ( r . getSubjectAlternativeNames ( ) ) ) rr . alternatives = af . fromJavaArray ( r . getSubjectAlternativeNames ( ) . toArray ( ) ) . map ( af . fromJavaArray ) ;
1310
+
1311
+ return rr ;
1312
+ } ) ;
1313
+
1314
+ return res ;
1315
+ } ;
1316
+
1254
1317
/**
1255
1318
* <odoc>
1256
1319
* <key>ow.format.testPublicPort(aPort) : Map</key>
0 commit comments