-
Notifications
You must be signed in to change notification settings - Fork 433
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Connection when both "Force Enryption" and "Extended Protection" are active #963
Comments
Please confirm if Client (Windows Server 2012 R2 in your case) has enabled Extended Protection support. This blog will be worth looking into on how to enable it: More details about Windows Update required for Extended Protection support: https://support.microsoft.com/en-us/help/973917/description-of-the-update-that-implements-extended-protection-for-auth |
Hi @cheenamalhotra, confirmed as this is enabled by default in Windows Server 2012 R2. |
Just to put myself better on this, the error you are receiving "The login is from an untrusted domain and cannot be used with Windows authentication" is coming due to lack of configuration on client side. From the links above, you may wanna check
Since you are working with Kerberos negotiation, it is expected to be supported by default, further configuration for LmCompatibilityLevel may not be mandatory. On the contrary, please also confirm:
Please also provide your connection string with repro code if possible in a standalone Java class. |
thanks for helping @cheenamalhotra Using this Connection String
I've checked the Kerberos setup using the Kerberos config tool and also registered the registry key |
I hope you wanted to mention error occurs if Force Encryption is set to true and are you not passing |
I'm sorry. I lost track of all the different setups. Same error happens also with |
Hi @cheenamalhotra it would be great if you have another hint for me :-) |
I'll try to reproduce this in my environment, as I'm not entirely sure if this is a configuration problem or something else. Let me know if you have any pointers to problem root cause. |
that would be awesome @cheenamalhotra there is not much I did on the setup. Here's what I did on the Server side:
On the Client Side I tried/used:
|
Thanks @michaelenglert for the details. Out of curiosity, have you tried to connect with any of the other SQL Server drivers? |
I configured Force Protocol Encryption + Extended Protection on SQL Server 2012 and am able to connect using Kerberos. I could connect with below properties set using TrustStore trustStore = new TrustStore();
SQLServerDataSource ds = new SQLServerDataSource();
ds.setServerName("<your server name>");
ds.setTrustStore(trustStore.getFileName());
ds.setTrustStorePassword(TrustStore.TRUST_STORE_PASSWORD);
ds.setIntegratedSecurity(true);
ds.setEncrypt(true);
try (Connection con = ds.getConnection()) {
System.out.println("Connected");
} Also, it works without adding |
I followed same steps defined in https://blogs.technet.microsoft.com/srd/2009/12/08/extended-protection-for-authentication/ for configuring Client and Server. No extra configurations were needed. On the contrary, if you face any problems with Certificate validation, you may try to provide "trustServerCertificate=true" in connection and can avoid setting any TrustStore. |
Ok, looks like I am able to reproduce the error now, but the issue isn't dependent on Force Encryption Turned On/Off but on Extended Protection when set to "Required" on SQL Server Instance configuration window. Anyways, I'll investigate more into it and let you know soon! |
Upon investigations I discovered that in order to work with both Extended Protection and Encryption on Connection, client needs to supply Channel Binding which is accomplished by the client transferring the SPN and the CBT to the server in a tamperproof fashion. In absence of which server will not accept any requests from client. More details can be found here. As of now, the driver does not implement Channel Binding and thus this combination of Extended Protection + Force Encryption during connection is not supported. Turning one of them OFF will result in a successful connection, as you must have figured out too. |
Thanks. I really appreciate that you took the time to investigate this!! Does it make sense to convert this question to an enhancement request then?! Thanks again |
thanks @cheenamalhotra |
Hi @cheenamalhotra thank you in advance! |
Hi @salen2000, you can't do anything on the client side as of now. Changes to the driver are needed to make this work. |
Thanks Rene, |
Hi @salen2000 Yes that is true for JDBC Driver, as I mentioned above as well, not with NTLM and Kerberos authentication. Other authentication modes are unaffected. |
Hello cheenamalhotra, Do we have anyone working on this issue? This is stuck now for 8 months and I don’t see any solution or roadmap to solve this. Is it possible to prioritize this? Thanks! Ricardo Aviz |
@ricardoaviz Adding channel binding support (and thus, extended protection support) to the JDBC driver is on our future roadmap, but we do not have a specific timeline for it at this time. I've bumped it up the list a bit and I do think it's an important security feature but we'll have to see where it makes the cut when planning future releases. |
com.microsoft.sqlserver.jdbc.SQLServerException: Login failed. The login is from an untrusted domain and cannot be used with Windows authentication. ClientConnectionId:dd5204e9-85ad-4625-be53-758b67062a5c Is this issue is resolved in any other new version of JDBC driver... |
Hi Vinay, What is your post about? Can you please clarify your post? Tks |
Jre version we are using 1.8 |
Hi @vinaykariyappa1 , |
@postfach33 There are no updates to share at this time. This issue is still in the backlog. |
@David-Engel and @peterbae Is there any timeline to implement the channel binding feature into the JDBC driver? We are working with Java in a Linux environment and need to access SQL Server databases with Extended Protection and Forced Encryption as this is a requirement from our organization. The implementation of the channel binding feature would help us a lot! |
@mariush17 I'm sorry, there is no current timeline for this feature in the JDBC driver. |
@David-Engel any news on adding support for channel binding feature into the JDBC driver? |
@juantarquino-ssb |
Is there any workaround for using integrated authentication with servers that have those two things enabled? or an alternative driver that does support channel binding for sql server? This issue is preventing us from using Java internally to connect to sql servers because we need to use integrated authentication in Windows. |
Channel binding support is on our radar, however unfortunately it did not make the cut for this semester, we will look will into this again when we plan for the next semester. fyi, we do take into account user requests when we do planning, so if there is any feature you would like implemented we encourage you do fill out our survey. Thanks. |
Just an update for those following the thread, we are still in the middle of investigating this. From my initial investigation, to enable channel bindings in the driver I applied the following fix to the
However, the above change doesn't seem to have an impact and I still receive the login error. I'll continually post updates as I investigate. Updates (I'll post brief updates in this post to avoid spam)
|
@ all: It is official for TLS 1.3 Binding!
Details:
Thanks in advance. |
Hi @tkyc, Regards, |
Hi @dineubr, We're still working on this. Terry released an update in an edit to his most recent comment:
|
Hey all, this will be the final update on channel binding/extended protection. Channel binding is fully implemented and is proven to be working within the JDBC driver. However, there are still a few caveats to the implementation. As of right now, we are limited by the JDK. The JDK does not provide a way to get the In the case of reflection, it is too fragile and will require more overhead on our part to maintain (eg. we'll need to test this on all driver supported JDKs and even then it might only work on a select few specific JDK versions). And, since reflection is used, we need to use the In the case of using the bouncy-castle API, after discussing with the team, we'll need an approval from the security team which isn't likely to happen (we had past issues getting approval to use bouncy-castle). Regardless, even if bouncy-castle was approved for use, it only solves part of the problem (exposing the For now, we'll need put this feature on hold as we are limited by the JDK. TL;DRChannel binding is implemented and is proven to be working, but isn't likely to be merged because of JDK blockers. Reflection is used to get
Need to use flag at runtime to import internal JDK ChannelBinding class TlsChannelBindingImpl to zero address field byte arrays. (zeroing the address field byte arrays is a channel binding implementation detail within the driver).
|
I stumbled across this issue as well. A pity that it is now waiting on external factors.
Why is Extended Protection: Allowed not possible? AFAIK this is the setting at the server side which does not enforce Extended Protection. |
Java is missing public APIs that allow channel binding to be implemented. The POC described above was accomplished via methods that are not suitable to production-level code. |
Hi are there any updates on this issue? |
@user1oc No new updates. Lack of appropriate public Java APIs is still a blocker for this issue. I don't see that changing any time soon. |
BTW it’s also an issue for http and ldap and really needs reconsideration on openjdk level. Maybe escalate it to the Microsoft Java team? |
@ecki Yeah, we've considered that as an option, but for now even with support from the Microsoft Java team I don't see the openjdk team consenting to the required Java API changes to make this happen as these types of changes were requested in the past. |
@martin-guth thats indeed problematic, I suspect the SSPI on the client think it can/should negotiate it and then Java does not add the token therefore corrupting the handshake which the server uses to abort. Would maybe a good idea to filter it out in the driver so it does not get negotiated. |
I would actually relabel the Issue from 'Enhancement' to 'Security Issue' as we are forced to downgrade the complete Instance, because if just 1 Client still can't use Channel binding nowadays, all other clients have to use the downgraded security as well. |
any update on when this will be fixed? |
hi @ADror-Quest Unfortunately we don't have a timeline to address this as this feature is still currently blocked by a lack of TLS APIs in Java required to implement it. We did work on this in a feature branch where we worked around this using reflection (channel-bindings) or Bouncy Castle (channel-bindings-bc) . These are not official solutions they will not be merged however you are welcome to take a look and build a version of the driver for your needs but please be aware this is not something that we officially support. Until there is a proper API available in Java this will not be something that will be supported in the driver. |
If the driver Not yet accept Channel binding, it should not propose it (i.e. Filter the Bit out in the negotiation message), otherwise the opportunistic („allowed“) setting does not work. |
Question
I'm trying to connect to a SQL Server (2012) using Windows Authentication where both
Force Enryption
is set totrue
andExtended Protection
is set torequired
.What I'm getting on the Client side is:
Server side:
I've tried many different configuration options (client side) including:
sslProtocol
all optionstrustStore
alongsidetrustStorePassword
with a self signed certtrustServerCertificate
serverSpn
alongside corresponding server settingencrypt
All results in the same error combination. OS instances are identical on Windows Sever 2012 R2 latest SP.
Any hints would be highly appreciated.
Thanks
Michael
The text was updated successfully, but these errors were encountered: