Katherine Reid · Jul 7, 2021 go to post

Have you tried specifying the location and name of the SSLDefs.ini file with the ISC_SSLconfigurations environment variable?  This is an alternate way of specifying where the configuration file is.

Katherine Reid · May 26, 2021 go to post

The two places that I would look for more information on a <PROTECT> error are the audit log and the line of code the error is coming from.   The audit entry for a <PROTECT> error sometimes has more information about why the error was generated.  The line of code can also help as it can show you whether there was an explicit permission check, a reference to a particular global, etc.

Katherine Reid · May 17, 2021 go to post

There isn't support for EC keys in Cache.  If you haven't already, you could ask for an enhancement to add support in IRIS.  That's a long term solution though.  For now, the only solutions I can think of are workarounds like your CPIPE and cURL method or stunnel around %Net.Httprequest.

Katherine Reid · Apr 14, 2021 go to post

For <PROTECT> errors, if you turn on auditing of protect errors, the audit log will often have more information about the exact place the error comes from.   To do this, you will need to enable auditing system-wide via either the portal or ^SECURITY, make sure that auditing for the specific event you want (protect) is enabled, then reproduce the error.

There deliberately isn't much information about which permission is missing given to the user who got the error, to prevent a malicious user from mapping out info about the permissions needed.

Katherine Reid · Mar 25, 2021 go to post

Is your concern that the audit log will have extra events that aren't really failures?  If the login eventually succeeds, the authentication methods which didn't work should not cause loginfailure audit events.  Otherwise, there would be loginfailure events confusing the audit log on any system with more than one type of authentication enabled.

If the login fails, all types of authentication which were tried will be logged.

Katherine Reid · Mar 25, 2021 go to post

Yes, you must enable an authentication type system-wide before you can use it in an application.  An authentication type must be enabled both system-wide and in the individual application or service the login is using to be used.

You can turn LDAP off in all other applications if you only want it in the one application.   The one which is using LDAP authentication will need to look at the shared system-wide settings about domains, servers, attributes, etc, to know what to do with users logging in. 

If the users and employees are part of different domains, you might want to look into the multiple domain support.  You may be able to use the multiple domain support to let both sets of logins work separately.

Katherine Reid · Nov 18, 2020 go to post

Async mirrors are commonly used for reporting and other purposes.   What do you want to scale down to use it here?   

Katherine Reid · Nov 12, 2020 go to post

Mirroring is about creating identical globals on multiple machines with one update.  I assume you don't want these systems exactly the same, but depending on what you do want, maybe you could find a configuration which would do it.  For example, maybe you could put the global you want replicated in its own database on an async member and not mirror any other databases.

Katherine Reid · Sep 25, 2020 go to post

It sounds like you're trying to configure a webgateway on Linux to authenticate to an IRIS server on another machine using Kerberos.  Is that right?

If so, are you already using Kerberos authentication on the IRIS server for other connections?    I would start by making sure Kerberos is working for other connection types first, which will help sort out whether this is a configuration problem on the server side or the Webgateway side.

Do you already use Kerberos elsewhere on the Linux server?

Katherine Reid · Sep 23, 2020 go to post

IRISTEMP is a bit different than other databases.  For example, it holds the PPGs.  If you're seeing growth in IRISTEMP specifically, then in addition to the other debugging suggestions I would also run:

d ^GETPPGINFO

to get the counts of PPG blocks.  You need to run this before the process which is causing the problem goes away and its blocks are automatically released to get any useful information.

Katherine Reid · Jul 29, 2020 go to post

Yes.  There's a property in the %Net.FtpSession class which says which one to use: LegacySSL.  If it's true, you'll get implicit FTPS.  If it's false, you get the default of explicit FTPS.  There's a note in the documentation of that property you might try out if you haven't already:

"Depending on the configuration of the server you are talking to it may be needed to also send 'PBSZ 0' and 'PROT P' before you can communicate, this can be done with 'Set rc=ftp.sendCommand("PBSZ 0"),rc2=ftp.sendCommand("PROT P")'."

If that doesn't help, you might need to give more details about what error it's giving.

Katherine Reid · Jul 15, 2020 go to post

Cache 2017.1 supports Kerberos and OpenAM, which are both SSO methods.  You can also implement your own authentication methods using delegated authentication, or use LDAP to do logins with domain accounts (which is not full SSO since you have to type the login again, but sometimes people call it that because it's just one account.)   If you want to set up SSO via SAML, you'll need to write some code to handle that, there isn't anything that can be enabled by just configuring it.

Katherine Reid · Jul 10, 2020 go to post

I am assuming you mean Cache database encryption keys, which are stored in files.  If the HSM supports transparently giving the file to Cache when asked, I don't see why this wouldn't work, but I doubt it's been tested. 

If the HSM requires you to enter a passphrase, use a private key to decrypt the file, or other interactive step, you might or might not have a problem.  How are you planning to do the key activation?  Will you be present and able to do those steps?  

I assume your HSM does not support KMIP, which is a communication protocol for sending keys to a central key server.  Cache does support KMIP.

Katherine Reid · Jun 29, 2020 go to post

I was wondering if VMS was the issue! 

The server using VMS shouldn't affect the client side, meaning I think you can still set up Studio to use the standard TLS options for all the client apps, if you want to do that.   

VMS versions of Cache do support TLS 1.0, but not 1.1 or higher.  (This is based on the OS library support.)  1.0 is being phased out in many places, so I agree it's best to find a way to use 1.2 or even 1.3 if you can.

Katherine Reid · Jun 29, 2020 go to post

First, are you trying to set up stunnel on the Studio machine to encrypt the connection, stunnel on the Cache server to decrypt the connection, or both?  If you're trying to do stunnel on the Studio machine, you would configure it to listen on a local port, then configure Studio to think that is the host and port of the Cache server.  Studio connects to the local port and stunnel forwards the data to Cache after encrypting it.  Using stunnel with Studio shouldn't be different than using it with other protocols; Studio isn't doing anything unusual with the connection.

Second, is there a reason you're using stunnel instead of the built-in TLS support for Studio?  It's been available since Cache 2015.1.  Here's a writeup on setting it up: https://community.intersystems.com/post/configuring-cach%C3%A9-client-applications-ssltls

Katherine Reid · Jun 18, 2020 go to post

With LDAP authentication, role assignment is handled by the LDAP server.  There are multiple ways of doing this, and the options vary by version, but the most commonly used is adding your user to a group on the LDAP server with a name that specifies the role you want it to have.  For HealthShare HealthConnect, you can use the same methods of configuring this as Cache or InterSystems IRIS.  Here's the IRIS 2020.1 documentation on it:

https://docs.intersystems.com/irisforhealthlatest/csp/docbook/Doc.View.cls?KEY=GCAS_LDAP#GCAS_ldap_authorization
If you are using an earlier version, or a version of HealthShare other than HealthConnect, your options will be different.

Katherine Reid · Jun 3, 2020 go to post

Have you thought about the OS security issues for the instance?  For example: if you do a minimal security install on Linux, many more processes run as root than if you do any other install.  The only safe way to fix that is via a re-install.  I'm always nervous about the idea of converting a minimal install to a more secure one because of those kinds of issues and I don't want people to think their instances are more secure than they really are.

Katherine Reid · May 26, 2020 go to post

Please avoid using irisdb.exe -s ..\mgr if at all possible.  Calling the executable directly doesn't work in some particular cases, and using irisssession is how you're supposed to do this to avoid those issues.  Please look into how you can get irissession if you need it instead of using a wrapper like this.

Katherine Reid · May 26, 2020 go to post

For master key, do you mean the database encryption key, ie, the one Cache is using to encrypt the database?  If so, you need to re-key the database manually if this is something you want to do.  This should be an option available in the ^EncryptionKey utility in the %SYS namespace.  (The older cvencrypt utility will also re-key, but is slower and does not have KMIP functionality.)   The InterSystems IRIS docs cover using ^EncryptionKey for re-keying here:

https://irisdocs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=GCAS_cvencrypt

If you mean a different key than the database encryption one, can you explain which one? For example, you authenticate to the KMIP server using a public/private key pair.  Is this the one you mean?  Something else?

Katherine Reid · May 26, 2020 go to post

Are you asking about the KMIP server and how it works?  If so, I don't think this is the right place to ask, and would recommend you talk to people who know more about your KMIP system.

Or are you asking about how Cache handles key rotation for encrypted databases and/or managed key encryption?   If so, this is mostly up to the user.  There isn't automatic re-keying of databases on a schedule.

Katherine Reid · Apr 29, 2020 go to post

I've done a tremendous number of system restores over the years, and generally think that structuring your restore process to require manually removing the WIJ isn't a preferred design choice.  It's too easy to get into the habit of removing it, and then do it at a time when it causes problems.  

I assume you're asking about doing this following a restore of all databases, including CACHESYS,  since if only some databases were restored, removing the WIJ could lead to problems with the databases which were not restored.    I'm also assuming you're talking about designing a backup restore process, not an actual down system you're trying to get back up.  (If you're talking about a down system you need help with right now, please call the WRC.)

In a full system restore, you would restore the databases and WIJ from the older time.   Since you're already restoring all databases, have you considered treating it like a full system restore and including the older WIJ, which would let you avoid the need to remove the current WIJ?   This would also mean that the system would know which journal restore point to start from, and could automatically start journal restore for you at startup, assuming the journals are all available before you start up.

Katherine Reid · Sep 20, 2019 go to post

Is there a reason you're using shadowing instead of mirroring?  Shadowing is much older and doesn't really receive updates or improvements.  It was also not as good at telling you when there was a problem and the destination was behind or out of date, which means it's harder to know that the backup server is ok.

Katherine Reid · Jun 18, 2019 go to post

This will connect and works for testing, but for a production configuration you should also edit the configuration so that it checks the server's certificate.  If you don't, the configuration will connect without an error even if someone is pretending to be the server you're trying to connect to.  Since you're setting up TLS, that's probably not what you want.

To do this, change the "Server certificate verification" setting from 'none' to 'require' and then fill in the name of the file which contains the certificate authority (CA) certificate for the server you're connecting to in the "File containing trusted Certificate Authority certificate(s)" field.  The certificate should be in PEM format, and the file may contain multiple certificates if you want to include more than one. 

Katherine Reid · Jun 14, 2019 go to post

Are you trying to have the same user have different login namespaces on different systems?  If so, for your InterSystems IRIS instances, have you looked at the "Authorization group ID" and "Authorization Instance ID" which are part of each LDAP configuration?   You can use these to make each instance (or group of instances) look for a different group to define the namespace.    

Katherine Reid · May 8, 2019 go to post

It can be tricky to get the exact form of the username right on a Linux client connecting to a Windows AD server.  If you're familiar with using an LDAP browser, you might be able to use one to manually look for the user object you're trying to find, and see what the account name shows up as.   That might let you check for any details you might not be exactly matching.

Unfortunately I don't know of a one size fits all solution, since each AD server is set up differently.

Katherine Reid · May 7, 2019 go to post

There are a lot of possible reasons this search be failing, but they mostly boil down to not looking in the right place for the user or not being able to identify the user when you find it.  Here are a few things to try:

For a Windows AD server, you will almost certainly want sAMAccountName as the unique search attribute. 

Check to make sure your base DN includes the location of the user you're trying to authenticate.  You may want to test with a high-level or generic base DN to make sure it matches the user account.  For example, try DC=intersystems, DC=com instead of a longer base DN like: OU=Boston, OU=Users, DC=intersystems, DC=com  This will mean you search a larger part of the tree (which is slower) but will let you make sure you're searching an area which includes your user.

Take a look at exactly what DN the is being used for the failing user.  This should be in the detailed output of the test connection.  Is the base DN being appended to the full DN that you gave as the username?  If so, you may not want to use the full DN as the username, and instead just the value of the account name.